GitHub ActionsのWorkflowをデフォルトブランチにマージする前に実行する裏技
はじめに
GitHub Actionsのワークフローを実行するには作成したワークフローのyamlファイルをデフォルトブランチにマージする必要があります。
しかし、チームで開発を行う上で、新規でワークフローを作成する場合は基本的に作業ブランチとして別ブランチ上でワークフローを作成すると思います。
この記事では、mainなどのデフォルトブランチにマージする前に、ワークフローが正しく実行されるかを確認したいときに使える裏技を書きます。
1. GitHub CLIをインストールする
ワークフローの実行にはGitHub CLIを利用します。
2. デフォルトブランチからブランチを切ってワークフローを作成する
まずはデフォルトブランチからブランチを切って、ワークフローを作成します。
この時、ワークフローの on
には workflow_dispatch
を設定し、ワークフローを手動で実行できるようにしておきます。
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 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