三項演算子のように特定の条件の場合は特定のオプションを付ける、それ以外の場合はつけないといった分岐をちょっとだけ入れたいみたいなケースがあった
そのときのメモ
実例
ブログへの記事投稿用のCLIツールをActions経由で使いたい
(記事内ではわかりやすいようにpublish
コマンドとしている)
記事投稿用のCLIツールは--draft
オプションをつけて実行すると下書きを投稿、つけないと公開状態で投稿するという仕様になっている
Actions上で実行する場合
- pull_requestイベントの場合は
--draft
オプションを付け下書きで投稿 - マージされたら(mainブランチへのpushの場合)
--draft
をつけず、公開状態で投稿
というような感じのフローを実現したい
下書きのオプションを付けるかどうかしか変わらないのできれば1行で済ませたいなという感じ
実際の設定
実例のため、個別の環境の話が入ってきてしまうがより細かく挙動を挙げると
pull_request
イベントで、**.md
ファイルに変更があった場合、投稿コマンドを実行(下書き)- mainブランチへの変更で
**.md
ファイルに変更がある場合は投稿コマンドを実行(公開)
となる
一部抜粋すると次のようになる
- .github/workflows/publish.yml
name: publish on: pull_request: paths: - contents/**.md push: branches: - main paths: - contents/**.md jobs: publish: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3.3.0 - run: | publish ${{ github.event_name == 'pull_request' && '--draft' || '' }}
ExpressionsをStep実行中に使う
run
の中で演算子を組み合わせてサクッと書ける
run: | publish ${{ github.event_name == 'pull_request' && '--draft' || '' }}
注意点としては、何もしない場合は空文字を返すようにしているが、空文字は最後に持ってこないとうまく動かない
次のような例だとpush
イベントだったとしても--draft
がついてしまう
run: | publish ${{ github.event_name == 'push' && '' || '--draft' }}
これは、&&
の後の空文字が真偽判定で偽と評価されてしまうことで後ろの--draft
まで評価されるので--draft
が返ってしまうという挙動のよう
うっかりやらかしそうなパターン
ともあれこれでやりたいことは実現できた
こういうケースはそれなりにあると思うので覚えておくと便利