はじめに
.NET Core 3.0 がリリースされたようなので GitHub Actions でビルドしてみます。
GitHub Actions のベータ版も申込みからすぐに使えるようになっています。
.NET Core 3.0 App
コンソールアプリケーションを作ってコミットしておきます。
詳細のコードは割愛。全体のコードはこちら。
GitHub Actions
基礎的なところは GitHub ヘルプ に説明があるのでコードの中から .NET Core のビルドに関係あるところだけ取り上げます。
コード
name: Build .NET Core 3.0
on: push
jobs:
build:
runs-on: macOS-latest # ubuntu-latest, windows-latest, etc
steps:
- uses: actions/checkout@v1
- uses: actions/setup-dotnet@v1.0.2 # >= v1.1.0 だと dotnet run に失敗する
with:
dotnet-version: 3.0.100
- run: dotnet build --configuration Release
- uses: actions/upload-artifact@v1
with:
name: artifact
path: ./GitHub-Actions-.NET-Core-3.0-Build-Example/bin/Release/netcoreapp3.0/
- run: dotnet run --configuration Release --project ./GitHub-Actions-.NET-Core-3.0-Build-Example/
actions/setup-dotnet
uses: actions/setup-dotnet@v1.0.2 # >= v1.1.0 だと dotnet run に失敗する
with:
dotnet-version: 3.0.100
actions/setup-dotnet を使って dotnet cli を使えるようにします。
コメントにも書いていますが v1.1.0 の変更で dotnet run
が libhostfxr.dylib
1 が見つからないエラーになってしまうので v1.0.2 を指定します。2
dotnet build
は v1.2.0 でも大丈夫でした。
dotnet-version
には SDK のバージョンを指定します。
Download .NET Core 3.0 (Linux, macOS, and Windows) でBuild apps - SDK
の項目のところにあるバージョンが使えます。
3.0 未満をビルドしたい場合はこちらから該当のバージョンを。
毎回ダウンロードしているようなので新しいバージョンが出ても使えるはずです。
dotnet build
- run: dotnet build --configuration Release
ここが今回の主題です。
リリースビルドをするために --configuration
オプションを付けています。
残りのコードは Artifacts にアップロードしたり実際にコンソールアプリケーションとして実行をしているだけです。
Actions の実行結果の右上にある Artifacts
から実行ファイルをダウンロードできます。
Mac でビルドしたので解凍した後ターミナルから ./GitHub-Actions-.NET-Core-3.0-Build-Example
を実行すれば Hello World!
と表示されます。(他の OS も同様です。)
おわりに
公式で用意されているアクションを組み合わせるだけで簡単にビルドできるのは良いですね。
今回は .NET Core 3.0 のビルドということで OS や .NET Core のバージョンを直指定しましたが jobs.<job_id>.strategy
を使ってマトリックスビルドをすることもできます。
jobs:
build:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ ubuntu-latest, macOS-latest, windows-latest ]
dotnet: [ 3.0.100 ]
steps:
- uses: actions/checkout@v1
- uses: actions/setup-dotnet@v1.0.2
with:
dotnet-version: ${{ matrix.dotnet }}
-
Ubuntu:
libhostpolicy.so
, Mac:libhostpolicy.dylib
, Windows:hostpolicy.dll
↩ -
dotnet cli の問題が絡んでいるようで Issue #9114 · dotnet/cli で議論されています。 ↩