Github Actions Pull RequestでもSkipCIするやり方
git push時にGithub Actionsでskip ci
する方法は色々あるけど、Pull Requestに対しては見つからなかった。
ので、トライしてみました。
YAML
name: pull
on:
pull_request:
types: [assigned, opened, synchronize, reopened]
jobs:
skipci:
runs-on: ubuntu-18.04
outputs:
git_message: ${{ steps.save-message.outputs.GIT_MESSAGE }}
steps:
- name: Checkout Repo
uses: actions/checkout@v1
- run: git switch ${{ github.head_ref }}
- id: save-message
run: echo "::set-output name=GIT_MESSAGE::`git log --oneline -n 1`"
test:
runs-on: ubuntu-18.04
needs: skipci
if: contains(needs.skipci.outputs.git_message, '[skip ci]') == false
steps:
- run: echo "TEST"
実際の結果
何をしている?
pull_requestイベントで実行されるワークフローではコミットメッセージが取得できず、メッセージに含まれるskip ci
を検知できませんでした。
なので,「チェックアウトして、最新のメッセージ持ってこよう」というパワープレイです、
jobs.skipci
Gitチェックアウトと最新のコミットメッセージ取得を行い、他のjobでも利用できるようにoutputs
で設定します。
jobs.test
skip ci
がコミットメッセージに含まれているとき、SKIPしたいjobです。jobs.skipci
で保存したgit_message
の中に、[skip ci]
が含まれている場合はjobを実行しないという定義しています。
参考
https://qiita.com/peaceiris/items/28e302996ccf04551434
https://docs.github.com/en/free-pro-team@latest/actions/reference/workflow-syntax-for-github-actions#jobsjob_idoutputs