Github Actions で三項演算子の式に文字列を置きたい場合
例えば、以下のようにブランチ名の応じてプルリクエストのタイトルを変更したい場合があるとします。
staging ブランチの場合は、次に main ブランチにマージしたいので「Merge staging into main」というタイトルにして、それ以外なら「Merge develop into staging」にしたいとします。
しかし、このままでは ”develop: command not found” エラーになって処理が停止してしまいます。(stagingブランチではない場合)
1 2 3 4 5 6 7 8 |
- name: Check if PullRequest exists id: check_pullrequest run: | pr_title=${{ (github.ref == 'refs/heads/staging' && 'Merge staging into main') || 'Merge develop into staging' }} base_branch=${{ (github.ref == 'refs/heads/staging' && 'main') || 'staging' }} echo "::set-output name=count::$(gh pr list -S ${pr_title}' in:title' -B $base_branch | wc -l)" echo "::set-output name=pr_title::$pr_title" echo "::set-output name=base_branch::$base_branch" |
原因
エラーにあるように develop コマンドがないと言われていますので、実はシンプルに以下のようにすると通ります。
1 |
'Merge' |
つまり、 “pr_tiltle=Merge develop into staging” となっていることで、 “Merge” 以降が別の引数だと認識されてしまっているわけです。
解決策
とてもシンプルですが、以下のようにエスケープすることでエラーを回避することができます。
1 |
'Merge staging into main' -> 'Merge\ staging\ into\ main' |
しかし、実はこれだけでは不十分で、”echo “::set-output name=pr_title::$pr_title”” している “${{ steps.check_pullrequest.outputs.pr_title }}” を参照してみると、
これもまたエラーになります。
1 2 3 4 |
- name: Create release PullRequest id: create_pr run: | gh pr create -B ${{ steps.check_pullrequest.outputs.base_branch }} -t ${{ steps.check_pullrequst.outputs.pr_title }} -b "" |
エラー内容を見れば分かるのですが、これもまた別々の引数として認識されているのでダブルクオーテーションで括ってやる必要があります。
1 |
'\"Merge\ staging\ into\ main\"' |
まとめ
今回は Github Actions で CI を回したあと自動でプルリクエストを作成し、三項演算子でブランチ名によってプルリクエストのタイトルを変えてみました。
登場場面は少ないかもしれませんが誰かの役に立てば幸いです。
Github Actions でブランチに合わせてプルリクエストを生成するという仕組みは以下を参考にさせていただいたのでぜひご確認ください。
GitHub Actionsでブランチに合わせてリリース用PRを自動生成する: https://zenn.dev/kshida/articles/auto-generate-release-pr-with-github-actions