できない.dev

pull_request_target

別名: pull_request_target イベント

GitHub Actions のトリガーの一つ。
pull_request と違い base リポジトリの既定ブランチの文脈で動くため、fork からの PR でも Secrets や書き込み権限を使える。
その代わり PR 側のコードを実行してはいけない。

公開:

定義

pull_request_targetGitHub Actions のワークフローを PR の作成・更新で起動するイベントの一つである。
同じ目的の pull_request がマージコミットの文脈で動くのに対し、pull_request_target は base リポジトリの既定ブランチの文脈で動く。公式ドキュメント(新しいタブで開く)は、このため Secrets と書き込み可能なトークンにアクセスできると説明している。

詳細

fork からの PR で pull_request を使うと Secrets は渡されず、GITHUB_TOKEN も読み取り専用になる。
ラベル付けやコメント投稿のように書き込みが要る処理をしたいときに pull_request_target を選ぶ。
ただし特権付きで動く以上、PR 側の(信頼できない)コードをチェックアウトして実行すると、Secrets の窃取やキャッシュ汚染につながる。
GitHub は不要なら使わないこと、使う場合は PR のコードをチェックアウトしないこと、テストのように PR のコードを動かす処理は pull_request に分けて、結果の後処理だけを workflow_run で受けることを推奨している。

よくある誤解

  • pull_request の上位互換: 実行されるワークフロー定義も既定ブランチのものなので、PR で書き換えた YAML は反映されない。
  • actions/checkout で PR の ref を指定すれば安全に使える: 特権のまま PR のコードを走らせることになり、まさに避けるべき使い方である。

関連

Fork からの PR で Secrets が使えない の背景にある仕様で、ワークフローが起動しない の切り分けでも on: のイベント名として登場する。

この記事は役立ちましたか?