😌

GithubActionsで特定のコミットメッセージの場合のみStepを実行する方法

2023/05/13に公開

概要

トリガーイベントによって多少異なり、pull_requestイベントの場合に少し詰まったのでメモ。

サンプルコード

HEADのコミットメッセージが[execute]の場合にHelloWorldを出力するジョブを実装する。

push

イベントオブジェクトからコミットメッセージを取得できるのでシンプルに実装可能。

push
name: workflow-push
on: push
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Check out codes
        uses: actions/checkout@v3
      - name: execute
        if: "contains(github.event.head_commit.message, '[execute]')"
        run: echo "Hello World"

pull_request

イベントからコミットメッセージを取得できないため、コミットハッシュからメッセージを取得する処理が必要。
ポイントは2つ

  1. HEADブランチにCheckoutする
  2. HEADコミットのハッシュからコミットメッセージを取得する
pull_request
name: workflow-pull_request
on: 
  pull_request:
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Check out codes
        uses: actions/checkout@v3
        with:
          ref: ${{ github.event.pull_request.head.ref }} # ポイント1
      - name: execute
        run: |
          message=$(git log --format=%B -n 1 ${{ github.event.pull_request.head.sha }}) # ポイント2
          if echo "$message" | grep -F "[execute]"; then
            echo "Hello World";
          fi

Discussion