はじめに
職場で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
