[GitHub Actions] デフォルトブランチ上にないworkflow_dispatchトリガーのWorkflowをGitHub CLIを使えば実行できるのか確認してみた

結論:できませんでした。
2022.06.01

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

こんにちは、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イベントがトリガーとなっています。

main/.github/workflows/echo.yml

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イベントがトリガーとなっています。

feature/update-echo-string/.github/workflows/echo.yml

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でだけ出来てしまうのは本当に謎です。

以上