銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

GitHub Actionsで作成したNuGetパッケージをGitHub Packagesに公開する

久しぶりにNuGetパッケージを公開したくなったのですが、最近だとGitHubで公開しているのならGitHub Actionsでビルドするのが簡単なようです。

tech.guitarrapc.com

最終的には作成したパッケージは nuget.org に公開するのですが、いったんprivateなNuGetリポジトリに配置して自分でテストしてから公開しようと考えました。となるとGitHub Packagesを使うのが便利そうな気がします。

help.github.com

ただ、気になったのがGitHub PackagesでのNuGetの認証方法で、ユーザーと平文パスワードによる認証しかサポートしていないようです。いくつか記事を確認しましたが、ユーザーと平文パスワードの組み合わせを.NET CLIで使う場合、nuget.configファイルを配置して対応するしかなさそうです。

timheuer.com

blog.mjjames.co.uk

GitHub Actionsの中でこのようなXMLファイルを生成するのめんどくさいな*1と思っていたら、↑の記事でWindows環境ならnuget.exenuget sources addコマンドで対応できることがわかりました*2

そこで、Windows環境で.NET Core CLIとnuget.exeをセットアップしてパッケージングとGitHub Packageに公開するjob定義はこのようになります。ビルドのパスや、GitHub Packagesのユーザー名は適当に置き換えてください。

jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup NuGet
      uses: NuGet/setup-nuget@v1.0.2
      with:
        nuget-api-key: ${{ secrets.NUGET_API_KEY }}
        nuget-version: latest 
    - name: Setup .NET Core SDK
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.101
    - name: Build
      run: dotnet build .\Serilog.Sinks.NewRelicLab.Logs\Serilog.Sinks.NewRelicLab.Logs.csproj --configuration Release
    - name: Pack
      run: dotnet pack .\Serilog.Sinks.NewRelicLab.Logs\Serilog.Sinks.NewRelicLab.Logs.csproj  --output .\artifacts --configuration Release
    - name: Add GPR Source
      run: nuget sources Add -Name "GPR" -Source  https://nuget.pkg.github.com/tanaka-takayoshi/index.json -UserName tanaka-takayoshi -Password ${{ secrets.GITHUB_TOKEN }}
    - name: Publish
      run: nuget push ".\artifacts\" -Source "GPR" -SkipDuplicate 

Serilog.Sinks.NewRelicLab.Logs/dotnetcore.yml at master · tanaka-takayoshi/Serilog.Sinks.NewRelicLab.Logs · GitHub

これでGitHub Packageに公開できるようになりました。

github.com

*1:パスワードの部分をシークレットを使って置換などしないといけないので

*2:この筆者はパッケージへの署名がしたくて、署名はWindowsでのみ実行できるのでWindows環境を使っているらしい