Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Mohammad Miadh Angkad <176301910+mmangkad@users.noreply.github.com>
This commit is contained in:
co-authored by
Claude Opus 4.8
Mohammad Miadh Angkad
parent
dad0120c57
commit
dbb51c46ac
@@ -4,13 +4,18 @@ Pre-commit hook: validate CI registry calls under test/registered/.
|
||||
|
||||
1. Every test file must contain a CI registry call (register_cuda_ci,
|
||||
register_amd_ci, etc.).
|
||||
2. A CUDA test must not register a `{stage}-test-{runner_config}`-shaped suite
|
||||
via the legacy single-string `suite=`: that form is not dispatchable via
|
||||
/rerun-test. Use the modern `stage=`/`runner_config=` form instead -- it
|
||||
resolves to the identical suite (CIRegistry.effective_suite is
|
||||
f"{stage}-test-{runner_config}"), so same stage and same runner, just
|
||||
/rerun-test-able. Legacy `suite=` stays valid for nightly/stress/weekly +
|
||||
AMD/CPU/NPU suites whose names don't follow that shape.
|
||||
2. A CUDA test must register its PR-test suite via the modern
|
||||
`stage=`/`runner_config=` form. The legacy single-string `suite=` is reserved
|
||||
for the nightly/stress/weekly families (and for AMD/CPU/NPU suites); any other
|
||||
CUDA `suite=` resolves to a name no PR-test workflow invokes, so the test
|
||||
silently never runs. Two shapes are rejected:
|
||||
a. `{stage}-test-{runner_config}` -- the modern name stuffed back into the
|
||||
legacy form. Reported with the exact stage/runner split to use.
|
||||
b. an older `{stage}-{runner_config}` PR-test name (e.g. the pre-migration
|
||||
`base-b-kernel-unit-1-gpu-large`) -- no longer matches any workflow
|
||||
suite at all.
|
||||
The modern form resolves to the identical suite (CIRegistry.effective_suite
|
||||
is f"{stage}-test-{runner_config}") and is /rerun-test-able.
|
||||
|
||||
Reuses ut_parse_one_file() from ci_register.py (AST-based parsing)
|
||||
to match the same logic used by run_suite.py's collect_tests().
|
||||
@@ -27,6 +32,12 @@ import sys
|
||||
# shape is always expressible (and should be expressed) the modern way.
|
||||
_MODERN_SHAPE = re.compile(r"^(.+)-test-(.+)$")
|
||||
|
||||
# The only suite families a CUDA registry may keep on the legacy single-string
|
||||
# `suite=` form. Everything else is a PR-test/base stage that must use the
|
||||
# modern stage=/runner_config= form (otherwise its effective_suite matches no
|
||||
# suite the PR-test workflows invoke, and the test silently never runs).
|
||||
_LEGACY_CUDA_PREFIXES = ("nightly", "stress", "weekly")
|
||||
|
||||
|
||||
def main() -> int:
|
||||
# Import ci_register directly to avoid pulling in all of sglang
|
||||
@@ -48,7 +59,8 @@ def main() -> int:
|
||||
return 0
|
||||
|
||||
missing = []
|
||||
legacy_shape = [] # (file, suite, stage, runner_config)
|
||||
legacy_shape = [] # (file, suite, stage, runner_config) -- has a -test- split
|
||||
non_dispatchable = [] # (file, suite) -- legacy CUDA suite no workflow invokes
|
||||
for f in files:
|
||||
try:
|
||||
registries, _has_main_entry = ci_register.ut_parse_one_file(f)
|
||||
@@ -67,9 +79,15 @@ def main() -> int:
|
||||
and r.runner_config is None
|
||||
):
|
||||
continue
|
||||
# nightly/stress/weekly are the only CUDA suites allowed to stay on
|
||||
# the legacy single-string form.
|
||||
if r.suite.split("-", 1)[0] in _LEGACY_CUDA_PREFIXES:
|
||||
continue
|
||||
m = _MODERN_SHAPE.match(r.suite)
|
||||
if m:
|
||||
legacy_shape.append((f, r.suite, m.group(1), m.group(2)))
|
||||
else:
|
||||
non_dispatchable.append((f, r.suite))
|
||||
|
||||
exit_code = 0
|
||||
if missing:
|
||||
@@ -94,6 +112,21 @@ def main() -> int:
|
||||
)
|
||||
print()
|
||||
exit_code = 1
|
||||
if non_dispatchable:
|
||||
print(
|
||||
'ERROR: CUDA test(s) register a legacy `suite="..."` that is neither a '
|
||||
"nightly/stress/weekly suite nor the modern `stage=`/`runner_config=` "
|
||||
"form. This name matches no suite the PR-test workflows invoke, so the "
|
||||
"test silently never runs. Switch to the modern form:\n"
|
||||
)
|
||||
for f, suite in non_dispatchable:
|
||||
print(
|
||||
f" {f}\n"
|
||||
f' suite="{suite}"'
|
||||
f' -> stage="...", runner_config="..."'
|
||||
)
|
||||
print()
|
||||
exit_code = 1
|
||||
|
||||
return exit_code
|
||||
|
||||
|
||||
Reference in New Issue
Block a user