🔖

github actionsで使えるコンテキスト情報について

に公開

はじめに

githubのbase/headがどっちがどっちかわからない。
github.head_ref が使えたり使えなかったりするのがよくわからない。
そもそもrefも何なんだかわからない。

整理する

まずref

refはreferenceで参照の意味。
refs/heads/masterのような形式ではじめて意味を持つ。
(個人的な感想として、github actionsでgithub.refという変数があるからややこしく感じる。まるでrefで何が定義される値があるかのように感じる。)

次にhead

これは「現在の位置」を表す。
「ブランチの先頭」という勘違いをしてきたが、そうではない。
ブランチと言うとは分岐した流れを示すことを想像するが、実際は単なる一つのコミットを指す参照に過ぎない。
その参照であるブランチを持たないcommitをcheckoutした時に「detached head」となる。

github actionsでコンテキスト情報

素晴らしい情報。

ここに一つだけ情報を追加しておきたい。
github.event.before を使うことでpush前のbaseブランチのコミットハッシュが取れる。
これを使うとPRと同様にpush単位、PR単位、で差分を比較評価できる。
例えばPR前後、push前後で特定のファイルが変わったかどうかなどの評価ができる。

Variable Push Event Pull Request Event
$GITHUB_REF refs/heads/{BRANCH_NAME} refs/pull/{ISSUE_NUMBER}/merge
${{ github.ref }} refs/heads/{BRANCH_NAME} refs/pull/{ISSUE_NUMBER}/merge
${{ github.ref_name }} {BRANCH_NAME} {ISSUE_NUMBER}/merge
${{ github.head_ref }} - {HEAD_BRANCH_NAME}
${{ github.base_ref }} - {BASE_BRANCH_NAME}
${{ github.event.before }} push前のbaseブランチのコミットハッシュ -

すべてのコンテキスト情報

直感的にわかるような変数ではない。
要するにここを読んでやりたいことをやる必要がある。
と理解した。

Discussion