Repository navigation
ci(unit-tests): assign every test module a tier and run each tier where it belongs (#1958) - #1971
Conversation
…re it belongs (#1958) - tests/_tiers.py: module_tier() gives every test module one test tier, ALL or LATEST, from a module-level __tier__ constant read by AST, or else from the rule: LATEST when its run does not vary by interpreter - Mark each real sweep LATEST and each hand-picked round trip ALL, and record a reasoned marker on each borderline module - unit-tests.yml, experimental.yml: legs off latest ignore every LATEST module, from latest_tier_paths() at run time; integration off latest and pypcap-parity run fixture_tier_paths('ALL'); the *roundtrip* globs are gone. latest keeps ALL + LATEST, the pins stay in project-tests - Tier guard, the #1732 and #1954 pins and _dependency_gates.py check the partition, the marker and the workflows' agreement with the rule - workflows.rst: a Test Tiers section replaces the glob's description Refs #1958
|
GOOD TO GO at One question for you, on ruling B. The four |
|
Coverage: 90.07% (unit tier, Python 3.15,
Per-file detail: the |
|
I merged without giving decision. What's your recommendation? |
|
My recommendation is to split them:
If you agree, it is a four-marker follow-up. |
|
agreed. |
make pylint,make mypy,make isort)make testpasses, and a test case covers the changeWhat is the purpose of your pull request?
ci— workflows or build toolingDescription of your pull request and other information
Phase 1 of #1958, implementing rulings A and B.
tests/_tiers.pygives everytests/**/test_*.pymodule one tier,ALLorLATEST.__tier__, read by AST, wins. A bad value, a second assignment, or one that is not at top level fails.LATESTif its run does not vary by interpreter. This is ci(unit-tests): run platform-independent project pins once per push (#1954) #1956's rule, generalised to all oftests/.LATEST; hand-picked round trips are markedALL. Every marker carries a#: Test tier (#1958): <reason>comment.*roundtrip*globs are gone.latest_tier_paths().integrationoff latest and bothpypcap-paritylegs runfixture_tier_paths('ALL'), so parity no longer runs the sweeps against ci(python): the GraalPy experimental leg reaches 26% of the suite before its 25-minute cap #1732.latestleg runs both tiers under coverage, the pins stay inproject-tests, andgateandunittest-orderingkeep their selections._dependency_gates.pycheck:workflows.rstgains a "Test Tiers" section.Every collected test id lands in exactly one tier, with none lost or duplicated. The tier lists are identical under 3.8, 3.10, 3.12 and 3.14.
Refs #1958