GitHub ActionsでCODEOWNERSファイルの変更を詳細に報告するツール
皆さん、こんにちは! @hoshinotsuyoshi です。今回は、私が開発した便利なツールについて紹介したいと思います。このツールは、GitHubのCODEOWNERSファイルの変更を正確に報告し、プルリクエストのレビューを効率的に進めるのに役立ちます。
背景
プロジェクトの管理では、CODEOWNERSファイルを使用して、特定のファイルやディレクトリに対する所有者(コードの保有者)を指定することがあります。
しかし、このファイルの解釈・パースは複雑怪奇で、このファイルの内容が変更された場合、具体的にどのファイルが影響を受けるのかを把握するのは簡単ではありません。
同僚のmh4gfさんの記事 GitHubのCODEOWNERSで一部サブディレクトリだけ別のオーナーを指定する も御覧ください。 サブディレクトリだけ別のオーナーを指定するときにこんな書き方をしないといけないんです。 どうです、すごく難しいでしょう? CODEOWNERSファイル自体のレビューが大変なんです。
この問題に対処するために、私はGitHub Actionを利用したツールを開発しました。
GitHub Actions用のファイル
こんなのを作りました。
# .github/workflows/post-codeowners-result-diff.yml
name: post-codeowners-result-diff
on:
pull_request:
paths:
- .github/CODEOWNERS
- .github/workflows/post-codeowners-result-diff.yml
jobs:
post-codeowners-result-diff:
runs-on: ubuntu-latest
permissions:
contents: read
pull-requests: write
timeout-minutes: 10
steps:
- name: setup codeowners
run: |
mkdir /opt/bin
curl -sL "https://github.com/hmarr/codeowners/releases/download/v${CODEOWNERS_VERSION}/codeowners_${CODEOWNERS_VERSION}_linux_amd64.tar.gz" -o /tmp/codeowners.tar.gz
hash=$(sha256sum /tmp/codeowners.tar.gz | awk '{ print $1 }')
if [ "$hash" = "e69a42a4a28efd58a87a0dc0d8f32223c1f6ccda7954afd40108abf98517a13f" ]; then
cat /tmp/codeowners.tar.gz | tar zfx - -C /opt/bin
else
echo $hash
echo invalid
exit 1
fi
env:
CODEOWNERS_VERSION: 1.1.2
- uses: actions/checkout@v3
with:
ref: ${{ github.base_ref }}
- name: call codeowners command on github.base_ref
run: |
/opt/bin/codeowners > /tmp/result.1
- uses: actions/checkout@v3
with:
ref: ${{ github.ref }}
- name: call codeowners command on github.ref
run: |
/opt/bin/codeowners > /tmp/result.2
- name: make report file
run: |
echo '<details><summary>codeowners diff report (.github/workflows/post-codeowners-result-diff.yml)</summary>' > /tmp/diffs
echo '' >> /tmp/diffs
echo '```diff' >> /tmp/diffs
diff -u /tmp/result.1 /tmp/result.2 >> /tmp/diffs | true
echo '```' >> /tmp/diffs
echo '' >> /tmp/diffs
echo '</details>' >> /tmp/diffs
- name: post comment
uses: marocchino/sticky-pull-request-comment@v2
with:
hide_and_recreate: true
header: report
path: /tmp/diffs
使い方
上記のファイルを .github/workflows/
の下に.ymlファイルとしてプロジェクトに追加します。それだけです。
あとは、以下のことが GitHub Actionsで自動で動きます
- GitHub上でプルリクエストが開かれた際に、CODEOWNERSファイルに変更があるかどうかを自動的に検知します。
- 変更がある場合、プルリクエストに自動的に詳細な差分レポートがコメントとして投稿されます。
サンプルレポート
変更があった場合、以下のような詳細な差分レポートが生成されます。
どうです! わかりやすそうでしょう!?
結び
このツールを使えば、CODEOWNERSファイルの変更に関する不透明な部分を解消し、チーム全体でのコードの所有権を確実に管理できます。ぜひお試しください!
最後に、このツールのレビューをしてくれた社内の方と、 CODEOWNERSパーサーの開発者の方に感謝申し上げます。 というかこのパーサーが便利すぎて嬉しくて感謝コメントを投稿しました。
皆さんのフィードバックをお待ちしています!
それでは、Happy coding!
Discussion