GitHubのCI/CD機能、GitHub Actionsが去年11月にリリースされました。
GitHub ActionsはGitHubで公式に用意された環境のため、CircleCIやTravisCIなどの既存のCI/CDサービスがpush時にアクションするよりも広範囲にGitHubのイベントを取得してワークフローを実行することができます。
また、GitHub内でのみ完結するため、GitHubの権限を外に出す必要もありません。
その点もセキュリティ的には良いと思われます。
まだリリースして時間が経っていないというのもあり、公式のテンプレートは色々用意されているもののサンプルの情報は少ないです。
.NET Coreのテンプレートはビルドとテストを実行するものが用意されており、CIでは他にLintチェックやフォーマットチェック等もプッシュ時に行うように自動化していきたいところです。
今回はまず.NETのビルドのテンプレートをもとにフォーマットチェックを行うようにしてみました。
GitHub Actionsの書き方は以下の書籍(2020年4月時点で日本の書籍はこれしかなさそう)を参考に実装しています。
-
ワークフローを作成する
GitHubのリポジトリのトップ画面のタブからActions
を選択します。
テンプレートで用意された内容は以下です。
.NET Coreのバージョンは3.1です。
GitHub Actionsの定義はymlファイルの形式で記述していきます。
name: .NET Core on: push: branches: [ master ] # pull_request: プルリクエスト時の実施は不要なので削除します # branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1.101 - name: Install dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Test run: dotnet test --no-restore --verbosity normal
1行目の
name:
はワークフローの名前です。
その次のon
の後にワークフローを実行させたいGitHubのイベントを記述します。
(ここではプルリクエスト時のワークフロー実行は不要なので削除しています)その後に、jobが複数定義でき、
build
という名前のjobは、runs-on:
で指定されたOS環境ubuntu(Linux)で実行されます。(環境にはWindowsやMacを指定することもできます)1つのjobには複数のstepが指定でき、上記テンプレートでは5つのステップを実施しています。
- チェックアウト
- .NET Coreのセットアップ
- ライブラリのインストール
- ビルド
- テスト
-
ワークフローにフォーマットチェックを追加する
フォーマッタには、dotnet-formatを使用します。
dotnet-formatはEditorConfigに対応してるフォーマッタです。
.editorconfigを.NETプロジェクトにおけばその設定内容でフォーマットしてくれます。
.editorconfigファイルがない場合はデフォルト設定でフォーマットします。以下をテンプレートに追加します。
- name: Install dotnet format run: dotnet tool install -g dotnet-format - name: format-check run: dotnet format --check --dry-run
dotnet-formatのインストールは
dotnet tool
コマンドを使用します。
フォーマットチェックはdotnet format
コマンドにオプションとして--check
と--dry-run
を付与します。オプションの意味はそれぞれ以下です。
--dry-run
:フォーマットを実行しますが、結果を保存しません
--check
:フォーマットが発生した場合に0以外の値を返却しますGitHub Actionではrunで実行したコマンドが0以外の返却値を返すとエラーになります。これにより、フォーマットされていないものがpushされたらエラーとなり、フォーマット漏れを防ぐことができます。
最終的なyamlファイルは以下になりました。
name: .NET Core on: push: branches: [ master ] jobs: build: runs-on: ubuntu-latest steps: - uses: actions/checkout@v2 - name: Setup .NET Core uses: actions/setup-dotnet@v1 with: dotnet-version: 3.1.101 - name: Install dotnet format run: dotnet tool install -g dotnet-format - name: format-check run: dotnet format --check --dry-run - name: Install dependencies run: dotnet restore - name: Build run: dotnet build --configuration Release --no-restore - name: Test run: dotnet test --no-restore --verbosity normal
Top comments (0)