Skip to content

CI のチェックの結論を失敗と数える集合が lib/gh_checks.py と merged_lib/checks.py で別々にあり、取り消しと stale の扱いが食い違う #1774

Open

Description

@takemi-ohama

何を見つけたか

CI のチェックの結論を「失敗」と数える集合が 3 か所にあり、中身が違う。

場所 集合 取り消し(cancelled) stale
plugins/ndf/scripts/lib/gh_checks.py:13 の FAILED_CONCLUSIONS failure・timed_out・action_required・startup_failure 含まない 含まない
plugins/ndf/skills/cross-review/scripts/review_lib/ci.py:30 の CI_FAILED_CONCLUSIONS failure・timed_out・action_required・startup_failure(前者の写し) 含まない 含まない
plugins/ndf/scripts/merged_lib/reading.py:18 の FAIL_CONCLUSIONS FAILURE・CANCELLED・TIMED_OUT・ACTION_REQUIRED・STARTUP_FAILURE・STALE Runner が付いた取り消しは失敗、Runner が付かなかった取り消しは基盤待ち(_conclusion_state と read_checks) 含む

gh_checks.FAILED_CONCLUSIONS は gh_pr_info.py(gh-pr-info の failed_checks)が使い、gh_parts.py が再エクスポートする。review_lib/ci.py の写しは cross-review の merge-fix が使う。merged_lib/reading.py の集合は merge-when-green と probe(release は merge-when-green 経由)が使う。同じ PR の取り消されたチェックが、片方では失敗、もう片方では失敗でないと読める。

test-run.py は集合を使わず、gh_checks.checks_outcome(plugins/ndf/scripts/lib/gh_checks.py:137)で「成功でない最初の結論」を返す。取り消しと stale もそのまま非成功として返る。

どこで見つけたか

#1645 の設計(確定仕様 docs/specifications/ndf-ci-wait-superseded-failures-and-infra-wait.md )。設計は新しさの規則を lib/gh_checks.py の 1 か所に寄せたが、結論の集合は寄せていない。

なぜこの変更の範囲外なのか

#1645 の要求は「TIMED_OUT・STARTUP_FAILURE・ACTION_REQUIRED・STALE の扱いの変更」を含まないと定めている。集合を 1 つにすると、gh-pr-info と cross-review の取り消しと stale の数え方が変わり、受け入れ条件の外の振る舞いが動く。根拠: Value 6(MVV 版 2)

直さないと何が起きるか

  • 同じチェックを読む Skill どうしで、失敗の件数が食い違う(gh-pr-info の failed_checks と cross-review は取り消しを数えず、merge-when-green は Runner の付いた取り消しを数える)
  • 結論の扱いを直すたびに 3 か所を揃える必要があり、片方だけ直る

受け入れ条件

  • 結論を失敗と数える集合が plugins/ndf/scripts/lib/gh_checks.py の 1 か所にあり、review_lib/ci.py と merged_lib/reading.py はそれを使う
  • 取り消し(cancelled。Runner が付いたものと付かなかったもの)と stale を、1 つにした集合でどちらの扱いへ揃えるかを決めて書いてある。揃えると gh-pr-info の failed_checks と cross-review の merge-fix、または merge-when-green の数え方が変わるため、どれが変わるかも書く

由来

issue #1645(#1768 を取り込んだ設計)

関連: #1645 (閉じている)、#1787 (merge-when-green の基盤待ち 75 の読み方)

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: ndf-skillNDF の Skill 本体bugSomething isn't workingpriority: medium保守性・設計一貫性など、計画的に対応する

    Type

    No type

    Projects

    No projects

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions