やりたいこと
ちょっとしたNETクラスライブラリをNuGetで公開したいのですが、バージョン番号の管理がちょっと面倒です。
(NuGetのバージョンと、アセンブリのバージョンと、gitのタグは合わせほうがいいです。)
やり方は色々とありますが、この記事ではなるべくシンプルに、GitHubにプッシュしたタグ(v1.0.1)をトリガーに、NuGetのpublishまでを自動的に行うようにGitHub Actionsを設定するようにしました。
事前準備
- NuGetでAPI Keyを作成しておく。
- ビルドする対象のプロジェクトのSettings -> Secrets に、
NUGET_API_KEY
という名前でNuGetのAPIキーを設定しておく。 -
.csproj
ファイルのパッケージに関する設定は、Versionを除いて適切に設定しておく。
GitHub Actions
下記のファイルをリポジトリに追加します。
.github/workflows/release.yml
name: .NET Core
on:
push:
tags:
- 'v*'
jobs:
build:
runs-on: ubuntu-latest
env:
DOTNET_NOLOGO: true
steps:
- uses: actions/checkout@v2
- name: Setup .NET Core
uses: actions/setup-dotnet@v1
with:
dotnet-version: 3.1.x
- name: Install dependencies
run: dotnet restore
- name: Build
run: dotnet build --configuration Release --no-restore -p:Version=${GITHUB_REF/refs\/tags\/v/}
- name: Packaging
run: dotnet pack --include-symbols --configuration Release --no-build --output nupkgs -p:PackageVersion=${GITHUB_REF/refs\/tags\/v/}
- name: Nuget Push
run: dotnet nuget push nupkgs/*.nupkg -k ${{ secrets.NUGET_API_KEY }} -s https://api.nuget.org/v3/index.json
GitHubのReleaseにもアップロードするなら、もう少し手直しが必要です。
簡単な解説
-
v
で始まるタグがpushされた時に実行されます。 - Windowsだとビルドが遅いのでOSはubuntuにしてます。
- dotnetバージョンは、マイナーバージョンの指定が面倒なので
3.1.x
にしてます。 -
${GITHUB_REF/refs\/tags\/v/}
は、タグ名のrefs/tags/v1.0.1
を1.0.1
に置き換えます。 -
dotnet build
コマンドの-p:Version=
でアセンブリのバージョンを指定しています。 -
dotnet nuget push
コマンドの-p:PackageVersion=
でNuGetのパッケージのバージョンを指定しています。 - Testは別のActionsで実行する想定です。