koudenpaのブログ

趣味のブログです。株式会社はてなでWebアプリケーションエンジニアをやっています。職業柄IT関連の記事が多いと思います。

GitHub Actions で .NET Core の NuGet パッケージを Push した

以前 NuGet パッケージを作った時にはローカルマシンから nuget.org に Push したのだけれど、正直面倒くさいのでリポジトリにPushしたら勝手にパッケージがプッシュされて欲しい。

最近 GitHubCIサービス? の Actions が使えるようになり、GitHub Package Registry なるGitHub独自のパッケージレジストリも誕生したようだ。

となれば、試すしかない。

試した結果

できた。

NuGetパッケージを作成するプロジェクト設定

  <PropertyGroup>
    <TargetFramework>netstandard2.0</TargetFramework>
    <GeneratePackageOnBuild>true</GeneratePackageOnBuild>
    <Version>0.1.3</Version>
    <Authors>koudenpa</Authors>
    <PackageLicenseFile>LICENSE</PackageLicenseFile>
    <PackageProjectUrl>https://github.com/7474/JapaniseTextClassifier/tree/master/JapaniseTextClassifier</PackageProjectUrl>
    <RepositoryUrl>https://github.com/7474/JapaniseTextClassifier</RepositoryUrl>
    <RepositoryType>GitHub</RepositoryType>
    <Description>JapaniseTextClassifier classifies whether Japanese text contains sexual or unpleasant expressions.


As of August 2019, each cloud vendor's (Azure, GCP, etc) text classification SaaS is only available in English.
Therefore, JapaniseTextClassifier translates Japanese into English before classification.
You can specify which cloud vendor's SaaS is used for translation and classification.</Description>
  </PropertyGroup>

f:id:koudenpa:20190830030418p:plain
Visual Studio のプロジェクトプロパティでの設定の様子

単にプロジェクトのプロパティで『ビルド画NuGetパッケージを生成』するように指定すればいい。 (自分は.NET Coreのプログラム開発にはVisual StudioWindows)を使っている。最高に便利)

それをビルドしてPushするActions設定

プロジェクトをビルドして、生成されるであろう nupkg ファイルをワイルドカードで指定してPushしている。 同じバージョンのパッケージを複数回Pushすると単に重複エラーするので安心だ。

認証用のAPIキーの扱いも簡単、実際的でよかった。 (この記事を書いている現在ドキュメントには記載はないがブラウザから編集できる(リポジトリのSettings->Secrets))

name: Release JapaniseTextClassifier

on:
  push:
    branches:
    - release/nupkg

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v1
    - uses: actions/setup-dotnet@v1
      with:
        dotnet-version: '2.2.103'
    - run: dotnet build --configuration Release
    - run: dotnet nuget push JapaniseTextClassifier/bin/Release/JapaniseTextClassifier.*.nupkg -k $NUGET_OLG_API_KEY -s https://api.nuget.org/v3/index.json
      env:
        NUGET_OLG_API_KEY: ${{ secrets.NUGET_OLG_API_KEY }}

Pushされたもの www.nuget.org

すっと実現できて非常に良い体験だったが、GitHub Acitons というよりはプロジェクトの設定でビルド時にパッケージを作れる csproj 周りのビルドシステムと dotnet nuget push コマンドの体験だった。

オチ

お気づきだろうか? Push先が GitHub Package Registry ではなく nuget.org であることに。

しかたないよね。βプログラムに応募してもすぐには有効化されなかったのだから。