GitHub Actions内でpushを実行しているのに、他のワークフローのpushイベントがトリガーされない事象が発生しました。いろいろ調べて対応できたので、メモ書き程度に記載してみました。
ワークフローから他のワークフローのpushイベントがトリガーされないケース
まず、ワークフローAでブランチを作成しpush
をします。
# .github/workflows/create-release-branch.yml 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: token: ${{ secrets.MY_GITHUB_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}
次に、ワークフローBではpush
イベントをトリガーにしてジョブを実行します。しかし、なぜかpush
をしても、このワークフローBが動きません。
# .github/workflows/deploy-release-branch.yml 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)
# .github/workflows/create-release-branch.yml 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
などでも対応することは可能です
以上です。こちら参考になれば嬉しいです。