🐧

tfcmt apply で通知先の取得方法を改善

2022/05/10に公開

Terraform の CI/CD を改善する tfcmt というツールを開発しています。

https://github.com/suzuki-shunsuke/tfcmt

https://zenn.dev/shunsuke_suzuki/articles/improve-terraform-cicd-with-tfcmt

tfcmt v3.2.2 から tfcmt apply で通知先の取得方法を改善しました。

もし tfcmt apply が上手く Pull Request にコメントしてくれなくて困っているならば、 tfcmt を update することで解消するかもしれません。

tfcmt は Pull Request か Commit にコメントをするようになっており、コマンドラインオプションや環境変数から Pull Request 番号か revision を取得します。
Pull Request をマージして apply を実行する場合、環境変数からは Pull Request 番号が取得できないケースが多いです。

その場合、従来 (<= v3.2.1) はコミットメッセージから Pull Request 番号を取得し、取得できなかった場合は一つ前のコミットにコメントをするという挙動になっていました。
これは tfnotify から引き継いできた仕様ですが、個人的にはあまり望ましい挙動ではないと思っていました。

ただ、そもそも自分のユースケースでは ci-info という別のツールで設定した環境変数を元に tfcmt が Pull Request 番号を取得していて、特に困っていなかったので深追いもせずそのままにしていました。

https://github.com/suzuki-shunsuke/ci-info

ci-info では環境変数から Pull Request 番号が取得できない場合後述する GitHub API を使って Pull Request 番号を取得し、 CI_INFO_PR_NUMBER という環境変数を設定するのですが、
tfcmt ではこの環境変数をサポートしています。

ちなみに tfaction でも内部的に ci-info を使っています。

https://github.com/suzuki-shunsuke/tfaction

しかし、最近 tfcmt の利用者から相談を受けたので対応することにしました。

v3.2.2 以降では現在のコミットに関連する Pull Request を取得し、取得できなかった場合は現在のコミットにコメントをするようにしました。
コミットに関連する Pull Request は API で取得できます。

https://docs.github.com/en/rest/commits/commits#list-pull-requests-associated-with-a-commit

squash merge や rebase merge の場合、コミットメッセージから pull request 番号を上手く取得出来ないケースもありましたが、上記の API の場合 squash merge や rebase merge でも問題なく取得できるはずです。

ただし、同じコミットに複数の Pull Request が関連づいている場合、別の Pull Request にコメントされてしまう可能性はあります。
その場合、そもそもそのようなことが起こらないように branch 戦略を見直すなり、何らかの方法で適切な pull request 番号を取得して tfcmt に渡すようにしてください。

Discussion