Bunのロックファイル(bun.lockb)のバージョン管理をPull Requestのコメントで可視化する
Bunをパッケージマネージャーとして利用する場合、ロックファイルのバージョン管理をどのように行っていますか。
Bunはロックファイル(bun.lockb)がバイナリ形式のため、変更内容をgitコミットの差分から確認することができません。
公式ではgit diffでyarn.lockの形式で差分を確認する方法が紹介されていますが、手作業で毎回diffをとるのは面倒です。
また、差分を検知するためにyarn.lockを出力して差分を検知する用途でバージョン管理する方法もありますが、他の開発者に対して混乱を生んだり、ロックファイルの二重管理になってしまいます。
今回はリポジトリでyarn.lockを管理せずに、ロックファイルの差分をPull Requestにコメントすることでロックファイルのバージョン管理を可視化する方法を紹介します。
作ったワークフロー
Bunのロックファイルに変更があった場合、mainブランチとPull Request のブランチのbun.lockbの差分を自動的にPRにコメントするワークフローです。
さらに、同じPull Request内でbun.lockbが更新された場合は、前のコメントを非表示にすることで、常に最新の差分のみを表示するようになっています。
どのように実現しているか
Bun のロックファイルを yarn.lock の形式で出力し、github-commentでPull RequestにコメントをするGitHub Actionsのワークフローで実現しています。
詳しく見たい方は、サンプル実装をあげていますので参照してください。
Bunのロックファイルの差分を検知する
Bunのロックファイルをyarn.lock形式で差分を出力できます。
gitの設定が必要なので、GitHub Actions上で公式で書かれている設定を行っています。
git config core.attributesFile .gitattributes && echo "bun.lockb diff=lockb" >> .gitattributes
git config diff.lockb.textconv bun
git config diff.lockb.binary true
あとはHEADブランチとmainブランチの差分をgit diffで出力すると、表示させたい差分を確認できます。
git diff origin/main HEAD -- bun.lockb
github-comment でPull Requestにコメントをする
Pull Requestへのコメントはgithub-commentというCLIを利用しています。
「Bunのロックファイルの差分を検知する方法」で説明したgit diffの実行結果を github-comment に渡してPull Requestにコメントをしています。
- ワークフローのコマンド例
github-comment exec -k bun_diff -- git diff origin/main HEAD -- bun.lockb
github-commentの推しポイントは2つあります。
1つはテンプレートを利用できることです。
コメントする際に差分をmarkdownで分かりやすく見せたり、GitHub Actionのワークフローのリンクを紐づけることも可能です。
- 実際に利用しているテンプレート
---
templates:
bun_diff_exec: |
# {{ template "status" . }} diff in bun lockfile {{ template "link" .}}
{{ if eq .ExitCode 0 }}
```diff
{{ .Stdout | AvoidHTMLEscape }}
```
{{ else }}{{template "hidden_combined_output" .}}{{ end }}
...
ここで詳細は割愛しますが、ビルドインのテンプレートやmarkdownを組み合わせることでカスタマイズすることで、見やすいコメントを実現しています。
詳しく知りたい方は、ドキュメントを参照してください。
もう1つの推しポイントは、新しいコメントが追加されたときに前のコメントを隠せることです。
CIごとの結果ではなく、Pull Requestに対して最新の実行結果のみ通知するのが良いポイントとなります。
まとめ
GitHub Actionsとgithub-commentを組み合わせて、Bunのロックファイルの差分をPull Requestにコメントする方法を紹介しました。
Bunを使う上での課題であったロックファイルの差分確認が簡単になるので、ぜひ使ってみてください。
参考
Discussion