GitHub Actionsでワークフローから他のワークフローのpushイベントがトリガーされない問題の対応方法
GitHub Actions内でpushを実行しているのに、他のワークフローのpushイベントがトリガーされない事象が発生しました。いろいろ調べて対応できたので、メモとして残しておきます。
ワークフローから他のワークフローのpushイベントがトリガーされないケース
まず、ワークフローAでブランチを作成しpush
をします。
name: Create release branch
on: workflow_dispatch
jobs:
branch:
name: Create and push branch
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
- name: create and push release branch
run: |
branch_name=release-$(date +'%Y-%m-%d-%H-%M-%S')
git switch -c ${branch_name}
git push origin ${branch_name}
次に、ワークフローBではpush
イベントをトリガーにしてジョブを実行します。しかし、なぜかpush
をしても、このワークフローBが動きません。
name: Deploy release branch
on:
push:
branches:
- release-*
jobs:
deploy:
name: Deploy release branch
runs-on: ubuntu-latest
timeout-minutes: 10
steps:
- uses: actions/checkout@v4
# ... Do deployment
ワークフローから他のワークフローをトリガーしない原因
GitHub Actionsでは暗黙的にデフォルトでGITHUB_TOKEN
というシークレットが自動で作成されます。(参考: 自動トークン認証 - GitHub Docs)
このGITHUB_TOKEN
を使っている場合は、ワークフローからワークフローをトリガーしないようになっています。
これは、「意図せずワークフローからワークフローがトリガーされて、再起的なワークフローの実行がされてしまう」ということを防ぐためとのことです。(参考:ワークフローのトリガー - GitHub Docs)
ワークフローから他のワークフローをトリガーする方法
これに対応するには、GITHUB_TOKEN
の代わりにパーソナルアクセストークンを指定する必要があります。パーソナルアクセストークンを指定すると次のようになります。
これで、無事にdeploy-release-branch.yml
がトリガーされるようになります。(参考: 個人用アクセス トークンを管理する - GitHub Docs)
name: Create release branch
on: workflow_dispatch
jobs:
branch:
name: Create and push branch
runs-on: ubuntu-latest
timeout-minutes: 5
steps:
- uses: actions/checkout@v4
with:
# 追加: checkout時にパーソナルアクセストークンを指定
token: ${{ secrets.MY_PERSONAL_ACCESS_TOKEN }}
- name: create and push release branch
run: |
branch_name=release-$(date +'%Y-%m-%d-%H-%M-%S')
git switch -c ${branch_name}
git push origin ${branch_name}
上記はcheckout
時のトークンの指定方法なので、他のactions/github-script
やgh
コマンドの場合はそれぞれ次のようにパーソナルアクセストークンを指定する必要があります。
# actions/github-scriptの場合
- uses: actions/github-script@v7
with:
github-token: ${{ secrets.MY_PERSONAL_ACCESS_TOKEN }}
script: |
github.rest.issues.addLabels({
issue_number: context.issue.number,
owner: context.repo.owner,
repo: context.repo.repo,
labels: ['Triage']
})
# ghコマンドの場合
- env:
GH_TOKEN: ${{ secrets.MY_TOKEN }}
ISSUE_URL: ${{ github.event.issue.html_url }}
run: |
gh issue edit $ISSUE_URL --add-label "triage"
※ そもそもpush
イベントのトリガーではなく、ワークフローの流れやファイル内容を見直して、workflow_run
やworkflow_call
などでも対応することは可能です
以上です。こちら参考になれば嬉しいです。