はじめに
職場でGitHub Actionsを使ってCI構築しているときに、うまくいなかなったことを記事にしてみました。
実験用リポジトリ
https://github.com/kbc18a11/actions-branch
GitHub ActionsでCIを作ってみた
以下のようなyamlをCIとして構築をしてみました。
CIの目的としては、マージ先で変更したa.sh
ファイルを実行することです。
ci.yml
name: CI
on: pull_request_target
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: 出力!!!!
run: sh a.sh
そしてa.sh
の中身は、マージ元とマージ先それぞれ以下になります。
マージ元のa.sh
echo moge
マージ先の:a.sh
echo main
CIを実行
えええええええ、マージ元のコードが実行されてるやんけ!!
なぜマージ元のコードが実行されたのか?
【結論】イベントをpull_request_target
で指定していたから
on: pull_request_target
pull_request_target
はactions/checkout@v3
を実行する際に、マージ先ブランチにチェックアウトされるため、マージ先のコードが実行されました。
【解決方法】イベントをpull_request
に指定する
on: pull_request
イベントをpull_request
に指定するすることで、actions/checkout@v3
を実行する際に、マージ元ブランチにチェックアウトされて、マージ元のコードが実行されるようになります。
最終的に修正したyaml
ci.yml
name: CI
on: pull_request
jobs:
build:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v3
- name: 出力!!!!
run: sh a.sh