銀の光と碧い空

クラウドなインフラとC#なアプリ開発の狭間にいるエンジニアの日々

NupkgファイルをGiHub PackageにPublishするGitHub Actionを作りました

github.com

というGitHub Actionを公開しました。

作った背景ですが、まずGitHub Actionsの中でGitHub PackageにNuGetパッケージを公開する手順は、Windows限定で昨日の記事に書きました。

tech.tanaka733.net

公開リポジトリならWindowsでも無料なので気にする必要もないのですが、プライベートリポジトリだとLinuxの2倍料金がかかるのでLinuxで対応したいこともあるでしょう。

help.github.com

Linuxの場合、nuget.configファイルで設定しないといけないのは昨日の記事の通りです。この中で、TOKENをyamlの中に直接書くわけにもいかなので、引数で渡した処理しないといけないというのも書いた通りです。bashでXML扱うのも面倒ですが、クロスプラットフォームだとPowerShell Coreもシェルとして利用できるので、これで対応することも可能です。

help.github.com

なのですが、何度も長いスクリプト埋め込むのもいやなので、練習がてらGitHub Actionとして作成することにしました。実装は、安直にnuget.configファイルをプロジェクトルートに配置してから、dotnet nuget pushコマンドを実行しています。

github.com

今、GitHub HackathonでGitHub Actionsを作って公開すると応募できるので、ぜひこのActionを使って、その次は作成してみてください。

githubhackathon.com

NupkgファイルをGiHub PackageにPublishするGitHub Actionを作りました

github.com

というGitHub Actionを公開しました。

作った背景ですが、まずGitHub Actionsの中でGitHub PackageにNuGetパッケージを公開する手順は、Windows限定で昨日の記事に書きました。

tech.tanaka733.net

公開リポジトリならWindowsでも無料なので気にする必要もないのですが、プライベートリポジトリだとLinuxの2倍料金がかかるのでLinuxで対応したいこともあるでしょう。

help.github.com

Linuxの場合、nuget.configファイルで設定しないといけないのは昨日の記事の通りです。この中で、TOKENをyamlの中に直接書くわけにもいかなので、引数で渡した処理しないといけないというのも書いた通りです。bashでXML扱うのも面倒ですが、クロスプラットフォームだとPowerShell Coreもシェルとして利用できるので、これで対応することも可能です。

help.github.com

なのですが、何度も長いスクリプト埋め込むのもいやなので、練習がてらGitHub Actionとして作成することにしました。実装は、安直にnuget.configファイルをプロジェクトルートに配置してから、dotnet nuget pushコマンドを実行しています。

github.com

今、GitHub HackathonでGitHub Actionsを作って公開すると応募できるので、ぜひこのActionを使って、その次は作成してみてください。

githubhackathon.com

GitHub Actionsで作成したNuGetパッケージをGitHub Packagesに公開する

久しぶりにNuGetパッケージを公開したくなったのですが、最近だとGitHubで公開しているのならGitHub Actionsでビルドするのが簡単なようです。

tech.guitarrapc.com

最終的には作成したパッケージは nuget.org に公開するのですが、いったんprivateなNuGetリポジトリに配置して自分でテストしてから公開しようと考えました。となるとGitHub Packagesを使うのが便利そうな気がします。

help.github.com

ただ、気になったのがGitHub PackagesでのNuGetの認証方法で、ユーザーと平文パスワードによる認証しかサポートしていないようです。いくつか記事を確認しましたが、ユーザーと平文パスワードの組み合わせを.NET CLIで使う場合、nuget.configファイルを配置して対応するしかなさそうです。

timheuer.com

blog.mjjames.co.uk

GitHub Actionsの中でこのようなXMLファイルを生成するのめんどくさいな*1と思っていたら、↑の記事でWindows環境ならnuget.exenuget sources addコマンドで対応できることがわかりました*2

そこで、Windows環境で.NET Core CLIとnuget.exeをセットアップしてパッケージングとGitHub Packageに公開するjob定義はこのようになります。ビルドのパスや、GitHub Packagesのユーザー名は適当に置き換えてください。

jobs:
  build:
    runs-on: windows-latest
    steps:
    - uses: actions/checkout@v2
    - name: Setup NuGet
      uses: NuGet/setup-nuget@v1.0.2
      with:
        nuget-api-key: ${{ secrets.NUGET_API_KEY }}
        nuget-version: latest 
    - name: Setup .NET Core SDK
      uses: actions/setup-dotnet@v1
      with:
        dotnet-version: 3.1.101
    - name: Build
      run: dotnet build .\Serilog.Sinks.NewRelicLab.Logs\Serilog.Sinks.NewRelicLab.Logs.csproj --configuration Release
    - name: Pack
      run: dotnet pack .\Serilog.Sinks.NewRelicLab.Logs\Serilog.Sinks.NewRelicLab.Logs.csproj  --output .\artifacts --configuration Release
    - name: Add GPR Source
      run: nuget sources Add -Name "GPR" -Source  https://nuget.pkg.github.com/tanaka-takayoshi/index.json -UserName tanaka-takayoshi -Password ${{ secrets.GITHUB_TOKEN }}
    - name: Publish
      run: nuget push ".\artifacts\" -Source "GPR" -SkipDuplicate 

Serilog.Sinks.NewRelicLab.Logs/dotnetcore.yml at master · tanaka-takayoshi/Serilog.Sinks.NewRelicLab.Logs · GitHub

これでGitHub Packageに公開できるようになりました。

github.com

*1:パスワードの部分をシークレットを使って置換などしないといけないので

*2:この筆者はパッケージへの署名がしたくて、署名はWindowsでのみ実行できるのでWindows環境を使っているらしい