workflowはトリガーされたbranchの内容が使われる
「常にdefault branchの内容が実行される」のではなく、
トリガーされたコミットが属しているブランチに存在する内容が使われる
例
①fix-hoge branchをpushしてworkflow Aを実行
Aが失敗した!Aを修正しよう
②fix-A branchで修正して、mainへmerge
③fix-hogeを再実行
Aは①の時点と同じなので同様に失敗する
つまり、mainのA(修正済み)が実行されるのではなく、fix-hogeのA(修正前)が実行される
---
④fix-hogeにて、mainをrebeaseなりして再実行するとAの内容が更新されるのでうまくいく
gpt-5.icon
例外・ややこしいトリガー
pull_request
イベント対象:PR ヘッド(PR ブランチ)のコミット
使われる定義:PR ブランチの workflow(そのコミットに含まれるファイル)
push
イベント対象:push したコミット(該当ブランチ/タグ)
使われる定義:そのコミットに含まれる workflow
workflow_dispatch(手動実行)
実行時に選んだ ref(ブランチ/タグ) の最新コミットに含まれる workflow が使われます。
pull_request_target(特別)
対象:PR イベントだが、ベースリポジトリのデフォルトブランチ(通常 main)の workflow 定義で実行される。
目的:フォーク PR に対しても ベースの安全な定義で動かすこと(シークレット利用可)。
ただし権限が強くなるためセキュリティ設計が必須。PR のコードを無検証で checkout + 実行しない等の防御が必要。
要するに、通常は「イベントが起きたコミットの workflow」、例外的に pull_request_target は「ベース(main)の workflow」。