GitHub Actionsを使用してNugetパッケージを自動で公開する


はじめに

GitHub Actionsを使用してNugetへのPushを自動化することを調べたときのメモです。

参考

下記記事の「Publish NuGet Package」章での内容をメインに実際に動かしながら調べました。
https://netlicensing.medium.com/publish-nuget-packages-using-github-actions-9ac5e97d07d4

手順

①".github\workflows"内にYAMLファイルを作る。

以下に示すのは、Nugetプッシュを行うYAMLファイルです。

workflow_runに実行条件を記載しています。詳細を以下に記載します。

  • workflow_run:あるworkflowが完了したり、呼び出されたら起動するイベントトリガー
    • workflows:["Build"]:workflowsに登録しているBuildアクションの後に実行します。
    • branches:[ main ]:mainブランチでworkflowsのアクションが行われた際に実行します。
              (他のブランチは対象外となる)
    • types: - completed:workflowsで指定したアクションが完了時に実行します。

末尾の方のwith:以下の内容が重要なところなので後ほど説明します。
jobsの内容については参考にした記事と同じ内容のため、そちらを参照ください。
(Buildの自動化については参考の記事の「Create Actions Workflow」章を参照ください)

name: Publish - Nuget

on:
  workflow_run:
    workflows: ["Build"]
    branches: [ main ]
    types:
      - completed

jobs:
  publish-nuget:

    runs-on: ubuntu-latest

    steps:
    - uses: actions/checkout@v2
    - name: Setup .NET
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.x
    - name: Install dependencies
      run: dotnet restore
      working-directory: src/SlackNotification
    - name: Build
      run: dotnet build src/SlackNotification/SlackNotification.sln --no-restore
    - name: Publish to NuGet
      uses: brandedoutcast/publish-nuget@v2
      with:
        PROJECT_FILE_PATH: src/SlackNotification/SlackNotification.csproj
        VERSION_REGEX: '^\s*<PackageVersion>(.*)<\/PackageVersion>\s*$'
        TAG_FORMAT: '*'
        NUGET_KEY: ${{secrets.NUGET_API_KEY}}

②NugetのAPIキーを作成する。

Nugetへの公開リクエストを認証するにあたり必要になります。
(APIキーを作成するにあたり、自動公開したいNugetパッケージを1度はアップロードしておかないとキーを関連付ける対象に選べないので注意)
右上のアカウント情報からAPI Keysを選択し、Createから作成する

下記のように設定し、作成する。

作成後は、APIキーをどこかにコピーしておきます。(作成したタイミングでしか確認できないため)

③YAMLファイルのwith:以下の内容を記載する。

      with:
        PROJECT_FILE_PATH: src/SlackNotification/SlackNotification.csproj
        VERSION_REGEX: '^\s*<PackageVersion>(.*)<\/PackageVersion>\s*$'
        TAG_FORMAT: '*'
        NUGET_KEY: ${{secrets.NUGET_API_KEY}}

PROJECT_FILE_PATHはプロジェクトファイルを指定しますがcsprojの方にNugetの入力項目となる要素を記述しておく必要があります。

VERSION_REGEXはプロジェクトファイル内のPackageVersionの内容を正規表現で取り出しています。
PackageVersionだけは今後も手動で更新する必要があります。

NUGET_KEY${{secrets.NUGET_API_KEY}}を指定していますが、これはGitのSettingのSecretsで指定した環境変数を取得しています。
GitのSettingsからSecretsのRepository secretsにNugetのAPIキーを設定します。右上のNew repository secretから追加できます。

ここまで設定できればmainブランチにプッシュした際にNugetに自動公開されます。