7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

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

Last updated at Posted at 2021-02-19

はじめに

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から作成する
image.png

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

image.png

作成後は、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の入力項目となる要素を記述しておく必要があります。
image.png
VERSION_REGEXはプロジェクトファイル内のPackageVersionの内容を正規表現で取り出しています。
PackageVersionだけは今後も手動で更新する必要があります。

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

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

7
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?