久しぶりに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.exe
のnuget 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