Skip to content

ci(python): move the KTLO legs into jobs nothing gating waits on (#1738) - #1746

Merged
JarryShaw merged 1 commit into
mainfrom
ci/1738-ktlo-own-jobs
Oct 14, 2026
Merged

JarryShaw merged 1 commit into
mainfrom
ci/1738-ktlo-own-jobs

Conversation

@JarryShaw

Copy link
Copy Markdown
Owner

Please follow the guide below

What is the purpose of your pull request?

Tick the commit type your subject line carries.

  • fix — corrects a defect
  • feat — adds a feature
  • perf — changes performance, not behaviour
  • refactor — changes neither behaviour nor performance
  • test — tests only
  • docs — documentation only
  • ci — workflows or build tooling
  • release — bumps the version or rolls up a distribution
  • chore — anything else

Closes #1738. This implements the owner's option A.

  • The move: the KTLO legs of test, integration and pypcap-parity move to test-ktlo, integration-ktlo and pypcap-parity-ktlo. Neither required-checks nor unittest-ordering needs them, so a lost runner or a job-cap hit on a KTLO leg can no longer fail Required checks passed.
  • Same steps: each KTLO job runs its twin's steps by YAML alias, so step-level continue-on-error, warning annotations and KTLO summary are unchanged. Job-level continue-on-error: true is a backstop.
  • Check names unchanged: all 20 rendered names are identical, and ruleset 23497679 requires none of them.
  • No longer runs: on runs 38647800950, 38647748309 and 38622843605, the KTLO legs finished 5–13 minutes before the gating legs.
  • Tooling follows: python_versions.py emits the KTLO matrices, ci_timing.py follows the aliased steps, and update_python_versions.py treats a leg moving between twins as a rename. The docs are updated too.
  • Tests: test_ktlo_jobs_gate_nothing_1738.py, plus updated 1633/1660/1672/1732 tests.
  • Known gap, tracked separately: once 3.11 reaches end-of-life, pypcap-parity has no supported leg.

- Owner's option A: the KTLO legs of `test`, `integration` and
  `pypcap-parity` are now `test-ktlo`, `integration-ktlo` and
  `pypcap-parity-ktlo` in unit-tests.yml. Neither `required-checks` nor
  `unittest-ordering` needs them, so a lost runner or the job cap on a KTLO
  leg no longer fails `Required checks passed`.
- Each KTLO job runs its twin's steps by YAML alias, so the step-level
  `continue-on-error`, warning-level annotations and `KTLO summary` are
  unchanged; job-level `continue-on-error: true` is the backstop.
- Check names are unchanged (`Python 3.x (KTLO)` and so on).
- util/python_versions.py writes the three KTLO matrices; the gating
  matrices hold the supported tier only.
- util/ci_timing.py resolves aliased steps and picks the most specific job
  name template; util/update_python_versions.py reports a leg moving
  between twins as a rename and counts the new jobs' legs.
- workflows.rst and releasing.rst describe it; citations renumbered.

Tests: test_ktlo_jobs_gate_nothing_1738.py pins the structure; the 1633,
1660, 1672, 1732, apt-cache and queue tests follow the move.

Closes #1738
@JarryShaw JarryShaw added the ci Pull requests that change CI or workflow configuration (ci: subject prefix) label Oct 14, 2026
@JarryShaw

Copy link
Copy Markdown
Owner Author

Verdict: GOOD TO GO at 094d57e20. A Sonnet cross-review re-derived every claim (author: Opus).

  • Nothing gating waits on KTLO: every one of the 13 workflows was parsed with PyYAML, and no job needs: a KTLO job. All four workflow_call callers pass gate-only: true, which skips the KTLO jobs.
  • Names: all 20 rendered check names are identical on both trees. Each of the 9 KTLO legs appears exactly once.
  • Duration: re-measured on three main runs, the KTLO legs finish 5–13 minutes before the gating legs.
  • Mutants: four mutants were all caught. They were a gating job needing test-ktlo, project-tests needing it, a dropped job-level continue-on-error, and a renamed KTLO check.
  • Tests: new and changed tests fail on main and pass here. actionlint reports nothing new.
  • My own re-run in the PR's tree: 1738, unit_tests_queue, 1660, 1672 and ci_timing all pass.
  • Follow-ups, non-blocking: pypcap-parity goes empty once 3.11 reaches end-of-life, which I am filing now. engine-tests still runs a KTLO cell inside the gating job. Two YAML constructs, a bare steps: alias and an empty include, are first exercised by this PR's own CI.

@JarryShaw JarryShaw added the review: good-to-go Cross-review at the current head says ready; CI state is separate label Oct 14, 2026
@github-actions

Copy link
Copy Markdown
Contributor

Coverage: 89.69% (unit tier, Python 3.15, 094d57e20, Unit Tests run success)

Package Statements Missed Branches Partial Cover
pcapkit (top level) 104 3 20 3 95.16%
pcapkit/const 18860 954 2368 868 91.06%
pcapkit/corekit 2457 69 780 35 96.54%
pcapkit/dumpkit 276 3 100 3 98.40%
pcapkit/foundation 2906 164 1016 34 93.57%
pcapkit/interface 138 7 52 5 93.68%
pcapkit/protocols 17174 225 4588 190 98.07%
pcapkit/toolkit 864 182 298 9 76.33%
pcapkit/utilities 518 2 158 4 99.11%
pcapkit/vendor 4415 2293 1010 160 44.57%

Per-file detail: the coverage-html artifact of this run.

@JarryShaw
JarryShaw merged commit ae80f11 into main Oct 14, 2026
55 of 56 checks passed
@JarryShaw
JarryShaw deleted the ci/1738-ktlo-own-jobs branch October 14, 2026 23:39
@JarryShaw JarryShaw removed the review: good-to-go Cross-review at the current head says ready; CI state is separate label Oct 14, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

ci Pull requests that change CI or workflow configuration (ci: subject prefix)

Projects

Status: Done

Development

Successfully merging this pull request may close these issues.

ci(unit-tests): a KTLO or experimental leg that fails at job level, such as a lost runner, still fails Required checks passed

1 participant