GitHub Actions を使用して Slack にコミットメッセージ付きのメッセージを送ろうとした時にうまくいかなかったことの調査・解決方法をまとめます。
何が起きていたか
以下のフォーラムを参考にしてコミットメッセージを取得しようとしていた。
しかしうまく動かなかった。
Accessing commit message in pull_request event - Community Forum -
- name: get commit message
run: |
echo ::set-env name=commitmsg::$(git log --format=%B -n 1 ${{ github.event.after }})
先に結論
actions/checkout@v1
と actions/checkout@v2
の挙動が異なっていたため、動作していなかった。
解決策
解決策は2つあります。
actions/checkout@v1
を使用する
こちらは単純です。actions/checkout@v1
と actions/checkout@v2
の挙動の差異が問題ならば actions/checkout@v1
を使用すればうまくいきます。
ただ、せっかく actions/checkout@v2
が出ているのに使用しないのは避けていきたいところです。
actions/checkout@v2
を使用し、同時に ref
を指定する
actions/checkout@v2
アクションを使用するタイミングで Pull Request の HEAD にチェックアウトする方法です。
今回自分はこちらを採用しました。
- uses: actions/checkout@v2
with:
ref: ${{ github.event.pull_request.head.sha }}
調査
挙動が違うと感じた/実感した際に行った調査内容についてです。
git log
をワークフローの中に入れてみた
actions/checkout@v1
コミットハッシュが 24c119f
となっています。
ログは以下のようになっています。
上から2つ目に対象のコミットが入っていますね。
git log
shell: /bin/bash -e {0}
commit 61407417192b36f7ce78a7d10100c0ca0aa77609
Merge: 554330b 24c119f
Author: Ryoya Ito <30540303+ry-itto@users.noreply.github.com>
Date: Sat May 9 08:38:22 2020 +0000
Merge 24c119f72c7d35bb0e24894e2740b96e018e0c51 into 554330bcd5721bc2fb8ac0382255e97860914d94
commit 24c119f72c7d35bb0e24894e2740b96e018e0c51
Author: Ryoya Ito <30540303+ry-itto@users.noreply.github.com>
Date: Sat May 9 17:38:20 2020 +0900
Update build_task.yml
commit a8c6cebe203d7fd393229976c9155882a11ed1dd
Author: Ryoya Ito <30540303+ry-itto@users.noreply.github.com>
Date: Sat May 9 17:35:53 2020 +0900
Update build_task.yml
...
actions/checkout@v2
以下がログです。
これだけ?となるかと思いますが、これだけです。これ以上のログはないです。
対象のコミットが含まれていないことがわかるかと思います。
git log
shell: /bin/bash -e {0}
commit 2670243ed341020471cbb8f156ea036ceb33c3ba
Author: Ryoya Ito <30540303+ry-itto@users.noreply.github.com>
Date: Sat May 9 07:40:41 2020 +0000
Merge 3f6fd628703a69a867143c6b08ec49e5e279d226 into 554330bcd5721bc2fb8ac0382255e97860914d94
推測
-
actions/checkout@v1
では、そのまま Pull Request のブランチのgit log
全て + マージ後の状況のコミット -
actions/checkout@v2
では、マージ後の状況のコミットしか持っていない
のかなと思っています。
(マージ後の状況のコミット
なのかどうかは定かではありません。もしわかる方いたら教えていただけるとありがたいです。)
終わりに
今回はコミットメッセージを取得することが目的でしたが、他のパターンでも今回のようなことは起こり得ると思います。
ネット上にある actions/checkout@v1
を使用した記事を参考にする際は上記解決方法を試してみてください。