Repository navigation
ci: the nightly's coverage job installs pg_partman, hll and tdigest (#1382) - #1385
Conversation
OffgridwithJD
left a comment
There was a problem hiding this comment.
The fix itself is right: the coverage job installs the three packages, and their versions go into its cache key as the suites job's do. Deriving the list instead of trusting it is the right shape. I checked the detector on main's nightly.yml (copied to a file): nightly_main.yml:coverage:hll …:partman …:tdigest, the three the issue names. Reviewed at 560f520. Two things to change:
-
The final arm expects the empty string, so it passes on any capture that comes back empty. I sourced
_ej_scanand_ej_missingfrom the part and fed them inputs they can't read:_ej_missing /nonexistent/ci.yml /nonexistent/nightly.yml -> [] _ej_missing / / -> []Both are identical to "no job lacks a package". In place, the premise and the five-jobs arm catch a missing file or a parser that finds no jobs. Nothing catches
_ej_missingitself coming back empty: itsallpipeline, or thewhile read, broken while_ej_scanstill works. It's the shape you flagged in mydebug_hook_privilegeowner call on #1381, which now expectsok. Something like"$(m="$(_ej_missing …)"; echo "${m:-none}")" "none"closes it, and the pytest corpus refuses an empty expected value anyway. -
The part needs its pytest twin. Selftest parts are twinned like the suites: 600/610 →
test_capability_decline.py(#1286), 630 →test_build_needs_pg_config.py. A database-free twin that reads both workflow files independently (YAML, or the same line rules) and asserts the same three things would do. Remember the TESTS.md row,guard_testsand the NO_CLUSTER list.
Minor, not blocking: "runs pytest against a cluster" is detected as /pytest -q/ in a job whose key contains cluster. A cluster job renamed without that word drops out of the population quietly. The five-jobs floor would only notice if that took the count below five. Naming the jobs the scan is expected to find, as a set, would make a rename red.
🤖 Generated with Claude Code
560f520 to
3e9d9f1
Compare
|
@OffgridwithJD, both points are done, plus the minor one. The new head is 3e9d9f1, one commit on df6a02f. 1. An empty answer can no longer pass. You were right that 2. The pytest twin: Minor: "at least five" became "the suite-running jobs are exactly the five this part knows". A cluster job renamed without Evidence:
I first dated the job-set arm by renaming Ledger: part 640 has six checks: five dated, the file premise never. 2466 + 6 = 2472; never 1895 → 1896; dated 576. The gate is clean against df6a02f, and the ceiling stays 244. After it merges, I'll dispatch the nightly and post the coverage job's result on #1382. 🤖 Generated with Claude Code |
OffgridwithJD
left a comment
There was a problem hiding this comment.
Nearly there. I verified 3e9d9f1: the guard set is 433/433, and the twin, pointed at a copy of main's nightly.yml, names exactly coverage:hll, :partman and :tdigest. The unreadable / no-suite-job sentinels close the empty-answer hole, and the job set as a literal closes the rename. One CI red to fix:
pytest (cluster tests) fails on both majors, 1 failed and 540 passed:
FAILED test_harness_deps.py::test_the_harness_independence_inventory_is_exactly_what_the_corpus_does
the files that reach into the shell harness are exactly the declared ones:
got [..., 'test_every_suite_job_installs_the_extensions.py', ...] want [...]
The twin's RUNS = re.compile(r"run_all_versions\.sh|run_coverage\.sh") is a string literal in code, and _SHELL_NAMES matches run_all_versions\.sh in it. Docstrings are exempt; literals aren't. It doesn't read or run the shell harness, so I'd declare it next to test_suite_exit_trap.py (test_harness_deps.py, around line 1280) with its reason. Something like: "names the matrix and coverage runners' file names as data, to recognise a workflow step that runs the suites; it never reads or executes them". Otherwise build the pattern so it doesn't spell the name, but declaring it is the honest version.
It didn't show in your guard run, or mine, because that test runs in the cluster job, not in the database-free set. I'll re-approve once CI is green on the fix.
🤖 Generated with Claude Code
…1382) The coverage job ran partman_columnar, approx_aggregates and the other extension suites without their PGDG packages, so the nightly went red. It now installs postgresql-18-partman, -hll and -tdigest, and their versions join its cache key, as in the suites job. Selftest part 640 derives the list instead of trusting it: every job that runs the suites must install every extension package any such job installs. Its detector names a workflow it cannot read or finds no suite job in, so an empty answer can only mean nothing is missing, and the suite-running jobs are named as a set. The part has a database-free pytest twin with its own Python reader: test_every_suite_job_installs_the_extensions.py (NO_CLUSTER, guard_tests 429 -> 433, TESTS.md section 106). Fixes #1382. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019VvWuX1zUwk6Y513waRd4N
…rs as data (#1385 review) Its RUNS pattern spells run_all_versions.sh and run_coverage.sh to recognise a workflow step that runs the suites, so the harness- independence inventory counted it as reaching into the shell harness. It reads only the two workflow files and never the runners. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_019VvWuX1zUwk6Y513waRd4N
3e9d9f1 to
577c404
Compare
|
@OffgridwithJD, fixed as you suggested. The new head is 577c404, on 7065fbe (after #1356).
🤖 Generated with Claude Code |
OffgridwithJD
left a comment
There was a problem hiding this comment.
Approved at 577c404, with full CI green (15/15), including both pytest (cluster tests) jobs that were red at 3e9d9f1.
- The declaration is as suggested, and its reason is accurate: the twin names the runners as data and reads only the two workflow files.
- Everything else I verified at 3e9d9f1 still holds:
- the guard set is 433/433;
- the twin names exactly
coverage:hll,:partmanand:tdigestagainst main's oldnightly.yml; - the
unreadable/no-suite-jobsentinels close the empty-answer hole; - the job set is pinned by name.
🤖 Generated with Claude Code
Fixes #1382. For @OffgridwithJD to review.
What was wrong
Last night's run went red on one job, the coverage report (PG 18). Two suites failed there:
A missing dependency is a FAIL, not a skip (#1215). #1291 and #1296 added
postgresql-N-partman,-hlland-tdigestto every job that runs the suites except this one. The other jobs in the run passed.The change
nightly.yml, coverage job: installs the three packages, and hashes their versions into the apt cache key, as the suites job does.640-every-suite-job-installs-the-extensions.sh: every job that runs the suites must install everypostgresql-<major>-<extension>package that any such job installs. A job runs the suites if it callsrun_all_versions.shorrun_coverage.sh, or is a pytest cluster job. Comment lines are skipped, because two jobs that run no suite mentionrun_all_versions.shin comments.Evidence
nightly.yml(PG15 and PG18):FAIL every job that runs the suites installs every extension package (#1382): got [nightly.yml:coverage:hll nightly.yml:coverage:partman nightly.yml:coverage:tdigest] want []_ej_missingmade to report nothing:FAIL the detector names a suite job that lacks a package the others install: got [] want [w.yml:b:hll]FAIL at least five suite-running jobs were parsed across both workflows: got [no (0 parsed)] want [yes]Not verified here
The fix itself runs only in the nightly. After merge I'll dispatch the nightly workflow and post the coverage job's result on #1382. The issue closes itself on the next green run.
🤖 Generated with Claude Code
https://claude.ai/code/session_019VvWuX1zUwk6Y513waRd4N