とある OSS に workflow_dispatch
トリガーを持つ GitHub Actions の実装をした Pull Request を出すことがあった。 workflow_dispatch
はワークフローを手動でトリガーできるようにするとっても便利なやつ。
自分は 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 を使って確認することができる。YAMLの name
に定義したワークフローが表示されていれば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な状態は不要なのですぐ消してしまおう