GitHub Actionsでcheckout
や、サードパーティのアクションを利用する際
- uses: org/name@v1
のように指定するとメジャーバージョンがv1
の最新のソースを読んでくれる
という認識は一般的に広がっていて、当たり前のように使っていると感じる
しかし、この挙動は、GitHub Actionsがよしなにやってくれているわけではなかったのをいまさら理解した
- ドキュメント
Workflow syntax for GitHub Actions - GitHub Docs
指定方法については
Git ref、SHA、またはDockerタグを指定
メジャーバージョンの指定について
アクションがメジャーバージョンのタグを公開する場合、互換性を保ちつつ、重要な修正とセキュリティパッチを受け取ることを期待すべきです。この動作はアクションの作者の裁量であることに注意してください。
と書いてある
アクションの作者がメジャーバージョンのタグを提供していない場合はそういう記述をしても使えませんよという話
そもそもSHAを指定するのがセキュリティ的に良いよねというのはあるもののついつい便利だし使ってしまいがちなので覚えておきたい
背景
自作のアクションを作って、確認のために他のリポジトリのActionsから何の気なしにv1
指定して呼び出そうとしたら次のようなエラーが発生した
unable to find version `v1`
おかしいな…と思い調べたらすぐに出てきて
Custom Action : unable to find version · community · Discussion #39519
内容を見ると、リリースのたびにv1
というタグを切っているか、v1
という専用のブランチを用意しているって話のよう
なのでv1
などメジャーバージョンのみの指定で動かせるかはアクションを提供する側次第ということ
しらなかった…
actions/checkoutの場合
確認してみた(2024-01-07時点)
actions/checkout: Action for checking out a repo
- タグ一覧
たしかにv4
というタグが存在する、指定しているSHAはこの時点で最新のv4.1.1
と同じものを指している
ということは、v4.0
などは指定できないのかということで試したがたしかに指定できなかった
- uses: actions/checkout@v4.0
Unable to resolve action `actions/checkout@v4.0`, unable to find version `v4.0`
理解しました
冒頭ドキュメントでも書いてあるとおり、アクション提供側が用意してあげる必要がある
なのでv4
指定が自動的に最新のバージョンが読まれるようにタグを付け直すみたいなことをする必要がある…?
actions/checkout
では次のワークフローを使っているよう
checkout/.github/workflows/update-main-version.yml at main · actions/checkout
ここでtagが指すターゲットを書き換えてforce pushしている
workflow_dispatchイベントでの発火なのでリリース時に手動で実行しているように見える
勉強になりました