以前 NuGet パッケージを作った時にはローカルマシンから nuget.org に Push したのだけれど、正直面倒くさいのでリポジトリにPushしたら勝手にパッケージがプッシュされて欲しい。
最近 GitHub で CIサービス? の Actions が使えるようになり、GitHub Package Registry なるGitHub独自のパッケージレジストリも誕生したようだ。
となれば、試すしかない。
試した結果
できた。
<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>
単にプロジェクトのプロパティで『ビルド画NuGetパッケージを生成』するように指定すればいい。 (自分は.NET Coreのプログラム開発にはVisual Studio(Windows)を使っている。最高に便利)
プロジェクトをビルドして、生成されるであろう 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 であることに。
しかたないよね。βプログラムに応募してもすぐには有効化されなかったのだから。