GitHub Actions v2 で .NET Core 3.0 をビルドする

# はじめに
[.NET Core 3.0](https://devblogs.microsoft.com/dotnet/announcing-net-core-3-0/) がリリースされたようなので GitHub Actions でビルドしてみます。
GitHub Actions のベータ版も[申込みからすぐに使える](https://twitter.com/GitHubJapan/status/1174506573726531584)ようになっています。

# .NET Core 3.0 App
コンソールアプリケーションを作ってコミットしておきます。
詳細のコードは割愛。全体のコードは[こちら](https://github.com/SnowCait/GitHub-Actions-.NET-Core-3.0-Build-Example)。

# GitHub Actions
基礎的なところは [GitHub ヘルプ](https://help.github.com/ja/categories/automating-your-workflow-with-github-actions) に説明があるのでコードの中から .NET Core のビルドに関係あるところだけ取り上げます。
## コード
```yml:.github/workflows/build.yml
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
```yml
uses: actions/setup-dotnet@v1.0.2 # >= v1.1.0 だと dotnet run に失敗する
with:
  dotnet-version: 3.0.100
```
[actions/setup-dotnet](https://github.com/actions/setup-dotnet) を使って dotnet cli を使えるようにします。
コメントにも書いていますが [v1.1.0 の変更](https://github.com/actions/setup-dotnet/compare/v1.0.2...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)](https://dotnet.microsoft.com/download/dotnet-core/3.0) で`Build apps - SDK` の項目のところにあるバージョンが使えます。
3.0 未満をビルドしたい場合は[こちら](https://dotnet.microsoft.com/download/dotnet-core)から該当のバージョンを。
毎回ダウンロードしているようなので新しいバージョンが出ても使えるはずです。

## dotnet build
```yml
- run: dotnet build --configuration Release
```
ここが今回の主題です。
リリースビルドをするために `--configuration` オプションを付けています。

残りのコードは Artifacts にアップロードしたり実際にコンソールアプリケーションとして実行をしているだけです。
[Actions の実行結果](https://github.com/SnowCait/GitHub-Actions-.NET-Core-3.0-Build-Example/commit/1f37eeda8c279458a3b1d9052edeba09d8b2018f/checks)の右上にある `Artifacts` から実行ファイルをダウンロードできます。
Mac でビルドしたので解凍した後ターミナルから `./GitHub-Actions-.NET-Core-3.0-Build-Example` を実行すれば `Hello World!` と表示されます。（他の OS も同様です。）

# おわりに
公式で用意されているアクションを組み合わせるだけで簡単にビルドできるのは良いですね。
今回は .NET Core 3.0 のビルドということで OS や .NET Core のバージョンを直指定しましたが [`jobs.<job_id>.strategy`](https://help.github.com/ja/articles/workflow-syntax-for-github-actions#jobsjob_idstrategy) を使ってマトリックスビルドをすることもできます。

```yml
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 }}
```

[^1]: Ubuntu: `libhostpolicy.so`, Mac: `libhostpolicy.dylib`, Windows: `hostpolicy.dll`
[^2]: dotnet cli の問題が絡んでいるようで [Issue #9114 · dotnet/cli](https://github.com/dotnet/cli/issues/9114) で議論されています。