はじめに
今回は指定したジョブが成功したかを監視するステータスチェックジョブを作成してBranch Protectionに指定する方法を紹介したいと思います。
複数のジョブがあったときに、一つでも失敗してしまうとマージができなくなるようにしていきます。
ワークフローの作成
今回は例として .NET
用のテスト と TypeScript
用のテスト を用意し、それらが成功するかを調べるジョブを作成します。
name: test on: workflow_dispatch: pull_request: jobs: # .NETのテストを実行するジョブ test-dotnet: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up .NET8 uses: actions/setup-dotnet@v4 with: dotnet-version: '8.x' - name: restore run: dotnet restore - name: build run: dotnet build --no-restore - name: test run: dotnet test --no-build # TypeScriptのテストを実行するジョブ test-typescript: runs-on: ubuntu-latest steps: - uses: actions/checkout@v4 - name: Set up Node uses: actions/setup-node@v4 with: node-version: 18 - name: Install dependencies working-directory: ./TypeScriptTest run: npm ci - name: Run tests working-directory: ./TypeScriptTest run: npm test # needsに指定したjobが一つでも失敗した場合は失敗し、全て成功したときはスキップされる # requiredは 成功 or スキップ ならOK status-check: runs-on: ubuntu-latest needs: - test-dotnet - test-typescript if: failure() steps: - run: exit 1
テストを実行しているジョブは見なくてOKでして、以下のコードが今回注目したいジョブです。
# needsに指定したjobが一つでも失敗した場合は失敗し、全て成功したときはスキップされる # requiredは 成功 or スキップ ならOK status-check: runs-on: ubuntu-latest needs: - test-dotnet - test-typescript if: failure() steps: - run: exit 1
needs
に監視対象のジョブ列挙します。あとはどれか一つでも失敗するとexit 1
が呼ばれ、全て成功するとスキップされます。
Branch Protectionを作成する
static-check
ジョブが成功したときのみマージできるようにBranch Protectionを設定してみたいと思います。
ブラウザのGitHubからSettings -> Code and automation -> Branches
よりAdd branch ruleset
を選択します。
Require status checks to pass
を有効にして、Status checks that are required
のAdd checks
からジョブを選択します。
実験
プルリクエストを作成して、わざとテストを失敗させてみたり成功させたりしてみます。