[GitHub Actions] デフォルトブランチ上にないworkflow_dispatchトリガーのWorkflowをGitHub CLIを使えば実行できるのか確認してみた
こんにちは、CX事業本部 IoT事業部の若槻です。
GitHub Actionsのworkflow_dispatch EventのTriggerを使うと、Workflowをコンソールから手動で実行することができます。
今回は、GitHub Actionsでデフォルトブランチ上にないworkflow_dispatchトリガーのWorkflowをGitHub CLIを使えば実行できるのかを確認してみました。
デフォルトブランチ上に無ければ実行ボタンが出てこない!?
デフォルトブランチに既にworkflow_dispatchトリガーのWorkflowが作成されており、またデフォルトでないブランチ(Featureブランチ)でWorkflowの修正をしようとしているとします。
デフォルトブランチ(main
)のWorkflow fileはこんな感じ。workflow_dispatchイベントがトリガーとなっています。
on: workflow_dispatch jobs: echo_ref: runs-on: ubuntu-latest steps: - run: | echo $GITHUB_REF echo hoge
デフォルトでないブランチ(eature/update-echo-string
)のWorkflow fileはこんな感じ。こちらも同じくworkflow_dispatchイベントがトリガーとなっています。
on: workflow_dispatch jobs: echo_ref: runs-on: ubuntu-latest steps: - run: | echo $GITHUB_REF echo fuga
workflow_dispatchトリガーのWorkflowが作成されていれば、GitHub Actionsのコンソールに表示されるボタンを使ってWorkflowを手動実行することができます。
またデフォルト以外のブランチ上のWorkflowも選択して実行可能です。
実行すると、デフォルトでないブランチ上のWorkflowが実行できています。
しかしデフォルトブランチからWorkflow fileが削除されている(または作成されていない)場合、デフォルト以外のブランチにworkflow_dispatchトリガーのWorkflowが作成されていたとしても、GitHub ActionsのコンソールではWorkflowが一覧に表示されず、ボタンによる手動実行ができないようになっています。
しかし、作成や修正中のWorkflowのデバッグのためにデフォルトブランチに未作成のWorkflowを手動実行したい場面はあるはずです。
デフォルトブランチ上に無いWorkflowをCLIで実行してみる(できなかった)
GitHub CLIを使って、デフォルトブランチ上に無いWorkflowの手動実行を試してみます。GitHub CLIにはgh workflowというWorkflowを操作できるコマンド郡が用意されています。
まずgh workflow listコマンドを使用してWorkflowの一覧に出てくるかどうか確認します。
$ OWNER=<OWNER> $ REPOSITORY=<REPOSITORY> $ gh workflow list -R ${OWNER}/${REPOSITORY} no workflows found
出てきませんね!
次に、gh workflow runコマンドを使用してWorkflowの実行を試してみます。
$ WORKFLOW_NAME=.github/workflows/echo.yml $ REF=feature/update-echo-string $ gh workflow run ${WORKFLOW_NAME} -R ${OWNER}/${REPOSITORY} -r ${REF} could not find any workflows named .github/workflows/echo.yml
実行できませんね!
余談
こちらにデフォルトブランチではworkflow_dispatchイベントは実行できませんと思いっきり書いてあるんですけどね。
To trigger the workflow_dispatch event, your workflow must be in the default branch.
コンソールから出来ないのはもちろん、CLIなどによるAPIからも出来ないという当たり前の話でした。
そしてここからは話半分に聞いてほしいのですが…手元に1つだけ、デフォルトブランチ上にWorkflowが無くてもCLIでならなぜか手動実行できてしまうRepositoryがあります。(先程試したものとは別ものです)
このRepositoryは、デフォルトでないブランチにのみWorkflow fileがある状態です。
Workflow fileの内容です。
GitHub Actionsのコンソールには、ボタンは表示されていませんが、Workflow一覧には表示されています。
そしてgh workflow list
コマンドで一覧に表示できますし、gh workflow run
コマンドで実行まで出来てしまいます。
$ OWNER=cm-rwakatsuki $ REPOSITORY=flutter_sample_app $ gh workflow list -R ${OWNER}/${REPOSITORY} .github/workflows/echo.yml active 27285327 $ WORKFLOW_NAME=.github/workflows/echo.yml $ REF=cm-rwakatsuki-patch-1 $ gh workflow run ${WORKFLOW_NAME} -R ${OWNER}/${REPOSITORY} -r ${REF} ✓ Created workflow_dispatch event for echo.yml at cm-rwakatsuki-patch-1 To see runs for this workflow, try: gh run list --workflow=echo.yml
コンソールの実行履歴にもちゃんと履歴が残っています。
最初これを見た時に「実はCLIでならデフォルトブランチに無くても出来るのでは?!」と希望を持ったのですが、他のRepositoryで再現は出来なかったため、まあドキュメント通りですねということになりました。
何か見落としがあるのかも知れませんが、このRepositoryでだけ出来てしまうのは本当に謎です。
以上