つばろぐ

主に C#, .NET, Azure の備忘録です。たまに日記。

NuGetパッケージのCI/CDをAzure PipelinesからGitHub Actionsに移行したときにやったこと

.NET の環境変数を一覧確認するために開発した「Enviewer」の CI/CD 環境を、Azure Pipelines から GitHub Actions に変更しました。
Enviewer についてはこちらをご覧ください。

tsubalog.hatenablog.com

元々 Enviewer の CI/CD 環境は Azure Pipelines を使用していました。

github.com

CI/CD 環境の移行時に、NuGet へのプッシュを以下のように変更しました。

やること Azure Pipelines でのコマンド GitHub Actions でのコマンド
リストア dotnet restore dotnet restore
ビルド dotnet build dotnet build
テスト dotnet test dotnet test
パッケージング dotnet pack dotnet pack
NuGet へのプッシュ nuget.exe push dotnet nuget push

learn.microsoft.com

移行に加えてやったこととして、

なお、 パッケージを nuget.org に登録する (dotnet nuget push) 際、すでに登録されているバージョンが存在する場合は、 HTTP 409 (Conflict) が返ります。

github.com

開発途中のようにバージョン番号が変更されない状態でワークフローがどんどん動くときなど、毎度失敗されては困ります。
それを回避するための対応を2つ加えました。

  1. dotnet nuget push におけるコンフリクトを警告扱いにして回避する --skip-duplicate オプションの追加
    • dotnet nuget push ... --skip-duplicate
  2. origin/main ブランチのときだけパッケージングとプッシュを行うための条件を追加
    • if: github.ref == 'refs/heads/main'

これで origin/main に変更が加えられたタイミングだけ、パッケージを nuget.org への登録を行えるようになりました。
GitHub Actions のワークフローファイルの全体はこちらになります。

github.com