nipeblog

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-scriptghコマンドの場合はそれぞれ次のようにパーソナルアクセストークンを指定する必要があります。

# 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_runworkflow_callなどでも対応することは可能です

以上です。こちら参考になれば嬉しいです。