Skip to content

elixir-ci: PR のチェック一覧で Dialyzer ジョブ名が未展開の式のまま表示される #150

Description

@toshi0806

問題

PR のチェック一覧に、Dialyzer ジョブが次の表示で並ぶ。

ci / Dialyzer Analysis on OTP ${{ inputs.otp-version-latest }} / Elixir ${{ inputs.elixir-version-latest }}   skipping

${{ }} が評価されず、式がそのまま出ている。

原因

ジョブが skip されたときの GitHub 側の表示挙動であり、workflow の記述ミスではない。elixir-ci.yml の dialyzer ジョブは

  dialyzer:
    if: ${{ inputs.dialyzer-enabled && github.event_name == 'push' }}
    name: Dialyzer Analysis on OTP ${{ inputs.otp-version-latest }} / Elixir ${{ inputs.elixir-version-latest }}

push 限定になっているため、PR では常に skip される。

裏取り

実際に走る push run では 正しく展開される

$ gh run view 31986293240 -R smkwlab/tenbin_dns --json jobs \
    --jq '.jobs[] | "\(.conclusion)\t\(.name)"'
success	ci / Code Quality
success	ci / Test on OTP 27.3.4.4 / Elixir 1.17.3
success	ci / Dialyzer Analysis on OTP 29.0.2 / Elixir 1.20.1     ← 展開されている
success	ci / Test on OTP 29.0.2 / Elixir 1.20.1
success	ci / All checks

一方、PR(smkwlab/elixir_dnstap#42、run 32868402729)では式のまま。同じ run の test ジョブは matrix 参照なので skip されず、Test on OTP 27.3.4.16 / Elixir 1.17.3 と展開されている。つまり差は「inputs 参照だから」ではなく「skip されたか否か」。

影響

表示のみ。実行・判定には影響しない。ただし PR ごとに全 consumer(DNS 系 5 リポ)のチェック一覧に出るため、目に触れる頻度は高い。

対応

急ぐものではないが、直すなら選択肢は 2 つ。

  1. ジョブ名を静的にするname: Dialyzer Analysis とし、処理系の版数はジョブ内のログ(setup-beam の outputs)で示す。skip 時の表示は綺麗になるが、push run のチェック一覧から版数が消える。
  2. 現状維持 — push run では正しく出ており、PR では skip されているジョブなので実害はない、と割り切る。

gate(All checks)ジョブは skip を success として扱わない設計なので、どちらを選んでも判定への影響はない。

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions