JavaScriptに関するお知らせ

SINCE2019
>
GitHubActionsのifが全部falseになる問題

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になります

理由と対策

理由ですが、すいません僕の頭では分かりませんでした。このあたりの記事が参考になります。

GitHub Actions で真偽値判定の注意点

一方で対策の方は実にシンプルで、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は慢性的に遅延する繰り返しタスクを設定できない