🛠️

Bunのロックファイル(bun.lockb)のバージョン管理をPull Requestのコメントで可視化する

2024/04/08に公開

Bunをパッケージマネージャーとして利用する場合、ロックファイルのバージョン管理をどのように行っていますか。

Bunはロックファイル(bun.lockb)がバイナリ形式のため、変更内容をgitコミットの差分から確認することができません。

公式ではgit diffでyarn.lockの形式で差分を確認する方法が紹介されていますが、手作業で毎回diffをとるのは面倒です。

また、差分を検知するためにyarn.lockを出力して差分を検知する用途でバージョン管理する方法もありますが、他の開発者に対して混乱を生んだり、ロックファイルの二重管理になってしまいます。

今回はリポジトリでyarn.lockを管理せずに、ロックファイルの差分をPull Requestにコメントすることでロックファイルのバージョン管理を可視化する方法を紹介します。

作ったもの

Bunのロックファイルに変更があった場合、mainブランチとPull Request のブランチのbun.lockbの差分を自動的にPRにコメントするワークフローです。

check diff output

さらに、同じPull Request内でbun.lockbが更新された場合は、前のコメントを非表示にすることで、常に最新の差分のみを表示するようになっています。

hidden Pull Request comment

どのように実現しているか

Bun のロックファイルを yarn.lock の形式で出力し、github-commentでPull RequestにコメントをするGitHub Actionsのワークフローで実現しています。

詳しく見たい方は、サンプル実装をあげていますので参照してください。

https://github.com/kudoas/diff-check-bun-lockfile

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

https://bun.sh/docs/install/lockfile

あとはHEADブランチとmainブランチの差分をgit diffで出力すると、表示させたい差分を確認できます。

git diff origin/main HEAD -- bun.lockb

Pull Requestにコメントをする方法

Pull Requestへのコメントはgithub-commentというCLIを利用しています。

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

https://zenn.dev/shunsuke_suzuki/articles/improve-cicd-with-github-comment

「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を組み合わせることでカスタマイズすることで、見やすいコメントを実現しています。

詳しく知りたい方は、ドキュメントを参照してください。

https://suzuki-shunsuke.github.io/github-comment/

もう1つの推しポイントは、新しいコメントが追加されたときに前のコメントを隠せることです。

今回のユースケースの場合は、CIごとの結果を知りたいわけではなく、Pull Requestに対して最新の実行結果のみ知りたいはずです。
このようにシンプルに管理できるところが良いポイントです。

まとめ

GitHub Actionsとgithub-commentを組み合わせて、Bunのロックファイルの差分をPull Requestにコメントする方法を紹介しました。

Bunを使う上での課題であったロックファイルの差分確認が簡単になるので、ぜひ使ってみてください。

参考

https://github.com/kudoas/diff-check-bun-lockfile
https://bun.sh/docs/install/lockfile
https://github.com/suzuki-shunsuke/github-comment
https://suzuki-shunsuke.github.io/github-comment/
https://zenn.dev/watany/articles/e21a54cf3d56d8

Discussion