特定のコミットメッセージを元に処理を行うActions


概要

特定のコミットをトリガーに何かの処理をしたいときの対処法を書きました。

前提

  • GitHub

  • GitHub Actions

コード

name: trigger-comment

on:
  pull_request:
    types: [synchronize]

jobs:
  check_commit:
    runs-on: ubuntu-latest
    env:
      KEYWORD: '[review]'
    outputs:
      is_target: ${{ steps.check_message.outputs.is_target }}
    steps:
      - name: checkout
        uses: actions/checkout@v1
      - name: Check commit message
        id: check_message
        run: |
          message=$(git log --format=%B -n 1 ${{ github.event.pull_request.head.sha }})
          if echo "$message" | grep -q -F "${{ env.KEYWORD }}"; then
            echo "::set-output name=is_target::true"
          else
            echo "::set-output name=is_target::false"
          fi
  build:
    runs-on: ubuntu-latest
    needs: check_commit
    if: ${{ needs.check_commit.outputs.is_target == 'true' }}
    steps:
      - name: checkout
        uses: actions/checkout@v1
      - name: echo
        run: |
          echo "Hello World"

やっていること

ジョブを以下の二つに分割しています。

  • コミットメッセージを見て対象のコミットかを判断するジョブ

  • 実際に実行したい処理のジョブ

これは、Triggerとなる条件は on 句に設定できるものの細かい条件は設定できないためです。

さいごに

かつては [skip ci] をするためにこのような方法を用いることがありましたが
GitHub Actionsがデフォルトで対応したため、その目的では不要となりました。

GitHub Actions: Skip pull request and push workflows with [skip ci]

https://github.blog/changelog/2021-02-08-github-actions-skip-pull-request-and-push-workflows-with-skip-ci/