workflow_dispatch トリガーの検証方法

とある OSSworkflow_dispatch トリガーを持つ GitHub Actions の実装をした Pull Request を出すことがあった。 workflow_dispatch はワークフローを手動でトリガーできるようにするとっても便利なやつ。

docs.github.com

自分は workflow_dispatch はデフォルトブランチで反映できていないと実行できないと認識していて、公式ドキュメントにもそう書いてある。

Note: This event will only trigger a workflow run if the workflow file is on the default branch.

Pull Request で新しく workflow_dispatch のアクションを追加定義した場合、当然デフォルトブランチにマージする前に動作を確認したい。Push 度に実行されても問題ないジョブならそれでいいのだけど、ファイルをアップロードしたり作成したりする場合はそうもいかないので、任意のタイミングで実行したい。

困ったな〜と思って色々調べてみるとどうもデフォルトブランチ以外でも実行できるらしい。とても単純な話で GitHub がそのワークフローを認識できていれば GitHub API (CLI) から実行可能だった。

やりかた

まず、 GitHub がワークフローを認識できるようにするために一度 on: push にした状態で Push する。*1

name: workflow dispatch test

on:
  workflow_dispatch:
  push:
    branches:
      - your-current-feature-branch-name

そうすると当然 GitHub Actions が動き出す。動き出すことが重要で、一度ワークフローが動くことによってワークフローが認識される。(つまり ID が付与された状態になる。)

認識されているかどうかは、GitHub CLI を使って確認することができる。YAMLname に定義したワークフローが表示されていればOK。

$ gh run list --workflow=your-workflow.yaml

あとはお好きなタイミングで実行ができる。ドキュメントにも ref が Body Parameters として定義されていて、ブランチ名やタグが指定できる様子。

$ gh workflow run "workflow dispatch test" --ref your-current-feature-branch-name

*1:一度認識できればon: pushな状態は不要なのですぐ消してしまおう