notebook

都内でWEB系エンジニアやってます。

GitHub Actionsのバージョン指定

GitHub Actionsでcheckoutや、サードパーティのアクションを利用する際

- uses: org/name@v1のように指定するとメジャーバージョンがv1の最新のソースを読んでくれる

という認識は一般的に広がっていて、当たり前のように使っていると感じる

しかし、この挙動は、GitHub Actionsがよしなにやってくれているわけではなかったのをいまさら理解した

  • ドキュメント

Workflow syntax for GitHub Actions - GitHub Docs

docs.github.com

指定方法については

Git ref、SHA、またはDockerタグを指定

メジャーバージョンの指定について

アクションがメジャーバージョンのタグを公開する場合、互換性を保ちつつ、重要な修正とセキュリティパッチを受け取ることを期待すべきです。この動作はアクションの作者の裁量であることに注意してください。

と書いてある

アクションの作者がメジャーバージョンのタグを提供していない場合はそういう記述をしても使えませんよという話

そもそもSHAを指定するのがセキュリティ的に良いよねというのはあるもののついつい便利だし使ってしまいがちなので覚えておきたい

背景

自作のアクションを作って、確認のために他のリポジトリのActionsから何の気なしにv1指定して呼び出そうとしたら次のようなエラーが発生した

unable to find version `v1`

おかしいな…と思い調べたらすぐに出てきて

Custom Action : unable to find version · community · Discussion #39519

github.com

内容を見ると、リリースのたびに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イベントでの発火なのでリリース時に手動で実行しているように見える

勉強になりました