GitHubActionsのifが全部falseになる問題
明けましておめでとうございます!Mizutani(@sirycity)です。
今日はそんな新年1発目に相応しいGitHub Actions(以下Actions)の話です。どこが?
はじめに結論
とりあえず== 'true'
って付けとけば大抵の場合直るはず。
Actionsについて
GitHubに最初からくっついているCIです。
Actionsのifについて
Actionsにはifってのがあります。一定の条件のときだけ実行するやつです。
たとえばtagをpushしたときにだけリリースって出力するやつはこう。
- name: Released
if: startsWith(github.ref, 'refs/tags/v')
run: |
echo Released!
github.ref
っていう環境変数にどういうcommitか? ってのが入ってるので、その先頭の文字がrefs/tags/v
か?ってのをstartsWithっていう用意されてる関数で検証してます。
こんだけ。簡単!
ついでに変数について
Actionsには変数があります。さっきのstartsWithの所、結構長いしあっちこっちで使うので変数にしておきましょう。こんな感じ。
env:
IS_RELEASED: ${{ startsWith(github.ref, 'refs/tags/v') }}
steps:
- name: Released
if: env.IS_RELEASED
run: |
echo Released!
IS_RELEASED
っていう変数にしときました。よし。これで完璧。
罠
いいえ。完璧ではありません。↑のコード、常にfalseになります。もう1回言います。↑のif式は常にfalseになります。
新年だしもう1回言っておきましょうか。↑は常にfalseになります。
理由と対策
理由ですが、すいません僕の頭では分かりませんでした。このあたりの記事が参考になります。
一方で対策の方は実にシンプルで、if式の末尾に== 'true'
を付けるだけです。こう。
env:
IS_RELEASED: ${{ startsWith(github.ref, 'refs/tags/v') }}
steps:
- name: Released
if: env.IS_RELEASED == 'true'
run: |
echo Released!
完成。たいていのケースではこれでいける…と思います。
さいごに
以上Actionsのちょっとした罠についてでした。CIは手元で検証とかしにくいし(する方法もあるけど)こういう罠には注意ですね。以上!今年もよろしくお願いします。
PREV
2022-12-13
【CSS】めんどくさいRetinaディスプレイの考え方
NEXT
2023-01-13
Todoistは慢性的に遅延する繰り返しタスクを設定できない