🎯
GitHub Actions で変更があるときだけ git commit & push する
GitHub Actions で変更があるときだけ git commit & push する方法を 2 種類。
方法 1 : シェルスクリプト完結
通常のシェルスクリプトの if ! git diff --exit-code --quiet
で判定。
.github/workflows/example.yml
steps:
- uses: actions/checkout@v2
- name: 変更があるかもしれないしないかもしれない
run: ./script.sh
- name: commit & push
run: |
git add -N . # 新規ファイルを含める
if ! git diff --exit-code --quiet
then
git config user.name github-actions
git config user.email github-actions@github.com
git add .
git commit -m "Update"
git push
fi
具体例
方法 2 : jobs.<job_id>.steps.if
方法 1 だと複数の step で使用できなかったり、ステップ自体は実行されたことになってしまうため jobs.<job_id>.steps.if
を使います。
git diff --name-only | wc -l
で変更ファイル数をカウントしワークフローコマンド set-output
で次のステップへ渡します。
.github/workflows/example.yml
steps:
- uses: actions/checkout@v2
- name: 変更があるかもしれないしないかもしれない
run: ./script.sh
- name: Count changes
id: changes
run: |
git add -N . # 新規ファイルを含める
echo "::set-output name=count::$(git diff --name-only | wc -l)"
- name: commit & push
run: |
git config user.name github-actions
git config user.email github-actions@github.com
git add .
git commit -m "Update"
git push
if: steps.changes.outputs.count > 0
具体例
jobs.<job_id>.if
もちろん jobs.<job_id>.if
でも使えます。
次のジョブへの渡し方などは上記具体例のリンク先を参照。
Discussion