👾

GitHub ActionsのWorkflowをデフォルトブランチにマージする前に実行する裏技

2024/12/30に公開

はじめに

GitHub Actionsのワークフローを実行するには作成したワークフローのyamlファイルをデフォルトブランチにマージする必要があります。

https://docs.github.com/en/actions/managing-workflow-runs-and-deployments/managing-workflow-runs/manually-running-a-workflow#configuring-a-workflow-to-run-manually

しかし、チームで開発を行う上で、新規でワークフローを作成する場合は基本的に作業ブランチとして別ブランチ上でワークフローを作成すると思います。

この記事では、mainなどのデフォルトブランチにマージする前に、ワークフローが正しく実行されるかを確認したいときに使える裏技を書きます。

1. GitHub CLIをインストールする

ワークフローの実行にはGitHub CLIを利用します。
https://github.com/cli/cli#installation

2. デフォルトブランチからブランチを切ってワークフローを作成する

まずはデフォルトブランチからブランチを切って、ワークフローを作成します。
この時、ワークフローの on には workflow_dispatch を設定し、ワークフローを手動で実行できるようにしておきます。

.github/workflows/sample.yaml
name: sample

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo Hello, world!
git switch -c feat/sample-workflow
git add .github/workflows/sample.yaml
git commit -m "create workflow"
git push --set-upstream origin feat/sample-workflow

作成したワークフローファイルをpushし、GitHubのリポジトリを確認してもまだ作成したワークフローは表示されません。

GitHub Actionsの画面
何もワークフローがないですよ的な画面が表示される

この状態でGitHub CLIからワークフローを実行しようとしてももちろん失敗します。

gh workflow run sample.yaml --ref feat/sample-workflow
HTTP 404: Not Found (https://api.github.com/repos/ikoamu/XXX/actions/workflows/sample.yaml)

3. yamlファイルを意図的にシンタックスエラーにする

次に作成したyamlファイルを意図的にシンタックスエラーになるように修正します。
シンタックスエラーが発生するようになったワークフローファイル

そしてこの状態でyamlファイルをコミット・プッシュします。

git add .github/workflows/sample.yaml
git commit -m "意図的にエラーにする"
git push

4. シンタックスエラー状態のワークフローをGitHub CLIから実行してみる

先ほどpushしたファイルをGitHub CLIから実行してみます。

すると...

gh workflow run sample.yaml --ref feat/sample-workflow 
could not create workflow dispatch event: HTTP 422: Workflow does not have 'workflow_dispatch' trigger (https://api.github.com/repos/ikoamu/XXX/actions/workflows/135652545/dispatches)

なんということでしょう!さっきまで 404: Not Found と言われていたワークフローが 422 エラーになりました。

再度GitHubのActionsのページを開いてみると

先ほど失敗したワークフローの履歴が表示されました!?

5. シンタックスエラーを元に戻す

3で変更した箇所を元に戻してpushします。

name: sample

on:
  workflow_dispatch:

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - run: echo Hello, world!
git add .github/workflows/sample.yaml
git commit -m "シンタックスエラーを修正した"
git push

6. 再度GitHub CLIから実行してみる

再度実行するとワークフローが実行されます 🎉 🤔

$ gh workflow run sample.yaml --ref feat/sample-workflow
✓ Created workflow_dispatch event for sample.yaml at feat/sample-workflow

To see runs for this workflow, try: gh run list --workflow=sample.yaml

これで、作業ブランチ上でワークフローの動作確認→ワークフローファイルを修正→GitHub CLIで実行という流れで開発ができます!

おわりに

記事に最初にも記載しましたが、かなり反則技な実行方法なのでいつか修正されるかもしれません。
こんなことをしなくてもデフォルトブランチへのマージ前に実行できるようにしてほしいですね🥹

Discussion