■ はじめに
https://dk521123.hatenablog.com/entry/2024/01/28/004128
の続き。 仕事で、Github の プルリクエストが発行された際に Linter を起動してほしいってオーダーを受けたので on: pull_request 周辺について調べてみた
目次
【1】プルリク契機のイベント 1)補足:pull_request_target に関する詳細 【2】構文 1)types 【3】判定 1)プルリクかどうかを判定するには 2)Draft プルリクかどうかを判定するには 【4】サンプル 例1:プルリク時にSQL linter を実行
【1】プルリク契機のイベント
# | Events | Explanations | Comments |
---|---|---|---|
1 | pull_request | プルリクのアクティビティが発生した時 | |
2 | pull_request_comment | プルリクのコメントが作成/編集/削除された時 | |
3 | pull_request_review | プルリクのレビューが送信/編集/無視された時 | |
4 | pull_request_review_comment | プルリクのレビューコメントが変更された時 | |
5 | pull_request_target | プルリクのアクティビティが発生した時 | 「1)pull_request_target に関する詳細」参照 |
1)補足:pull_request_target に関する詳細
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#pull_request_target
* pull request のベースのコンテキストで実行 => 以下を避けられる + リポジトリを変更 + ワークフローで使うシークレットを盗む + pull request の head から安全ではないコードが実行される * ワークフローでは、pull request に対するラベルやコメントなどを フォークから行うことができる
pull_request vs pull_request_target
pull_request | pull_request_target | Comments |
---|---|---|
フォークしたリポジトリにも書き込み権限・Secretsを渡さない | フォークしたリポジトリにも書き込み権限・Secretsを渡す | フォーク 元で設定している secrets にアクセスできないとGITHUB_TOKEN / SLACK_TOKENを参照できない |
使用上の注意
* pull request からコードをビルドまたは実行する必要がある場合は、 このイベントを使わない
【2】構文
on: pull_request: types: - opened - reopened - synchronize branches: # プルリクエストのマージ対象がmainの場合実施 - 'main' # ブランチ除外 #branches-ignore: # - 'mona/octocat' paths: # pull request に SQLファイル (.sql) への変更が含まれているときに実行 - '**.sql' # paths-ignore: # - 'tests/**.sql'
https://docs.github.com/ja/actions/using-workflows/events-that-trigger-workflows#running-your-pull_request-workflow-based-on-the-head-or-base-branch-of-a-pull-request
https://docs.github.com/ja/actions/using-workflows/triggering-a-workflow#using-filters-to-target-specific-branches-for-pull-request-events
1)types
* デフォルトは、『types: [ opened, synchronize, reopened ]』
主なTypes
types | Explanations |
---|---|
opened | プルリク(Draft pull-requestを含む)が発行時 |
reopened | プルリク(Draft pull-requestを含む)が再Open時 |
synchronize | プルリクにコミットが追加された時 |
ready_for_review | プルリクが Draft から Open になった時 |
【3】判定
* Reusable Github workflow を使う際に、 プルリクかどうかを判定する必要があったのでメモ。
1)プルリクかどうかを判定するには
github.event_name == 'pull_request'
2)Draft プルリクかどうかを判定するには
github.event.pull_request.draft == true
【4】サンプル
例1:プルリク時にSQL linter を実行
Github Actions ~ SQL Linter ~
https://dk521123.hatenablog.com/entry/2024/03/04/180308
name: DemoForPullRequest on: pull_request_target: types: - opened - reopened - synchronize paths: - '**.sql' jobs: sample-job: runs-on: ubuntu-latest steps: - name: Run checkout uses: actions/checkout@v4 - name: Setup Python uses: actions/setup-python@v4 with: python-version: '3.10' - name: install SQLFluff run: 'pip install sqlfluff' - name: format run: | for file in 'sqls/*.sql' do sqlfluff lint $file --dialect snowflake --format github-annotation done
参考文献
https://qiita.com/Soh1121/items/b2bc51afc933c910806c
https://til.toshimaru.net/2021-12-12
https://madogiwa0124.hatenablog.com/entry/2022/05/29/110148
https://pankona.github.io/blog/2021/03/29/github-actions-pull-request-target/
関連記事
Github Actions ~ 基礎知識編 ~
https://dk521123.hatenablog.com/entry/2021/11/04/142835
Github Actions ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2022/06/16/151443
Github Actions ~ 基本編 ~
https://dk521123.hatenablog.com/entry/2023/12/22/195715
Github Actions ~ あれこれ編 ~
https://dk521123.hatenablog.com/entry/2023/12/21/155224
Github Actions ~ 差分ファイルを抽出する ~
https://dk521123.hatenablog.com/entry/2024/08/11/123351
Github Actions ~ GITHUB_ENV ~
https://dk521123.hatenablog.com/entry/2023/12/29/000840
Github Actions ~ GITHUB_OUTPUT ~
https://dk521123.hatenablog.com/entry/2024/01/30/002943
Github Actions ~ ワークフロー制御 ~
https://dk521123.hatenablog.com/entry/2024/01/28/004128
Github Actions ~ SQL Linter ~
https://dk521123.hatenablog.com/entry/2024/03/04/180308
SQL Linter ~ SQLFluff ~
https://dk521123.hatenablog.com/entry/2024/02/28/225002
reviewdog ~ 入門編 ~
https://dk521123.hatenablog.com/entry/2024/04/13/232832
Git ~ 基本編 / 基本コマンド ~
https://dk521123.hatenablog.com/entry/2020/10/02/000000