Github Actionを活用してnugetへpackageの公開を行う。
はじめに
- はじめに
- 前提
- nugetのAPIアクセスキーを作成する。
- Actions secretにAPIアクセスキーを登録
- Actionの実行をmasterブランチに限定する。
- Build & Packageステップの追加
- Uploadステップの追加
- まとめ
- 参考・引用
先日作成した『CommandLineSelectableMenu』はmasterブランチへのコミットに反応して、自動的に新しいPackageをUploadします。
今日は備忘録を兼ねて、そのまとめです。
前提
『CommandLineSelectableMenu』を前提にWorkflowを作成しているので、下記を前提としています。
- OS : Ubuntu
- プロジェクト: .NET Standard
プロジェクト構成は下記の通りです。
./ |--- .github | |--- workflows | |--- upload.yml |--- src | |--- Example.sln | |--- Example | |--- Example.csproj | `--- Program.cs `--- README.md
nugetのAPIアクセスキーを作成する。
nugetに自作のPackageを公開するためには、サイトから直接Uploadを行う方法とコマンドラインからUploadする方法があります。
今回はコマンドラインからdotnet nuget push
コマンドを使用してUploadを行っていきます。 コマンドライン上からUploadしていくためには、API キーの作成が必要なります。
作成方法については、nuget パッケージの公開方法 | Microsoft Docsを参考にしてください。
Actions secretにAPIアクセスキーを登録
取得したAPIアクセスキーは事前に『Actions secrets』に登録しておきましょう。
取得したAPIキーをworkflowに記載するのは絶対にやめましょう!!
まずは、Settings > Secrets を開きます。
すると、『Actions secrets』が表示されるので、『New repository secret』を選択します。
後はキー名を設定して、先ほど取得したAPIキーをValueに設定すればOKです。
Actionの実行をmasterブランチに限定する。
Packageの公開タイミングは、feature
ブランチやdevelop
ブランチ、bugfix
といったトピックブランチをMergeするタイミングなど、master
ブランチに変更が行われるタイミングに限定します。
name: Package publish eample - Publish to Nuget on: push: branches: - master
これで、Action実行の対象がmaster
ブランチに限定されます。
Build & Packageステップの追加
次にBuildから Packageを作成するステップまでを追加します。
使用するOSはUbuntu
を使用します。
name: Package publish eample - Publish to Nuget on: push: branches: - master jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1 - name: Build run: dotnet build --configuration Release working-directory: ./src - name: Unit tests run: dotnet test --configuration Release working-directory: ./src - name: Generate nuget package. run: dotnet pack --configuration Release -o nupkg working-directory: ./src
- ステップ1では、ブランチをチェックアウトします。
- ステップ2では、.NET Coreのセットアップを行います。
- ステップ3では、Buildの確認を行います。
./src
配下に.slnファイルがあるので、作業フォルダは./src
を指定します。作業フォルダやBuild設定は、実際のプロジェクトに合わせて変更します。 - ステップ4では、単体テストを実行します。
- ステップ5では、Packagingを行います。方法はほとんどBuild変わりませんが、ここでは出力フォルダを指定しています。
./nupkg
へ.nupkgファイルを出力します。
BuildからTestまでのステップに関しては、master
ブランチにMergeするタイミングではなく、ブランチに関わらず、Pushに応じてActionが実行される方が望ましいです。
なので、BuildからTestまでは専用のWorkflowを作成しておくことをお勧めします。
Uploadステップの追加
最後にUploadステップを追加します。
name: Package publish eample - Publish to Nuget on: push: branches: - master jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v1 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1 - name: Build run: dotnet build --configuration Release working-directory: ./src - name: Unit tests run: dotnet test --configuration Release working-directory: ./src - name: Generate nuget package. run: dotnet pack --configuration Release -o nupkg working-directory: ./src - name: Publish to nuget run: find . -type f -name *.nupkg -print0 | xargs -0 -I pkg dotnet nuget push pkg -k $nuget_api_key -s "https://api.nuget.org/v3/index.json" --skip-duplicate env: nuget_api_key: ${{ secrets.NUGET_API_KEY }} working-directory: ./src/nupkg
find . -type f -name *.nupkg -print0
でカレントディレクトリ内のファイルを対象に*.nupkg
ファイルを検索します。
-print0
の部分は、後続のxargs
で -0
オプションを指定して、NULL文字区切りにしているので、それに合わせて設定しています。
また、xarg -0 -I pkg
の記載の通り、-I
オプションが指定されているので標準入出力から読み込んだ値はpkg
に入っています。
後はnuget パッケージの公開方法 | Microsoft Docsに記載のある通り実行すればOKです。
ここでPointになるのは、nuget_api_key
の部分です。
nuget_api_key: ${{ secrets.NUGET_API_KEY }}
この部分で、secrets.NUGET_API_KEYを環境変数nuget_api_keyに設定しています。
まとめ
- nugetへPackageのUploadを行う際は、大まかに分けてサイトから行う方法とコマンドラインから行う方法の2通りがある。
- APIアクセスキーをActionで使用する際は、事前に『Actions secrets』に登録しておく。
- 意外と簡単。
こちらで実際に使用しているので気なる方はどうぞ。