Repository navigation
ci(release): gate tag/pypi/conda on their own evidence, not the v* tag - #905
Conversation
|
NEEDS CHANGES on 1. The That step sits at 2. That is the canonical #888 scenario. The PR replaces a silent green no-op with a red false alarm on the run that actually completed the release. Why both shipped: every Two more, non-blocking but worth fixing while in there. Confirmed good: One thing nobody can verify without a real deployment, and it is the severe branch: what |
#888) - Every release job shared one guard keyed on "does the v* tag exist", using it as a proxy for "was this version published". Those diverge when a release half-completes: github tags, a later job fails, and every job on the next workflow_run-triggered attempt reads the tag and skips -- the run reports green having published nothing. - version_check now also checks the conda-<version>+0 tag, PyPI's file count for the version (vs the 8 expected), and Anaconda's aggregate count (vs the 10 expected); tag/pypi/conda gate on that instead. The curl calls tolerate a transient index outage (--retry-connrefused, || status=000) rather than failing version_check outright, since "incomplete" is already the safe default for that failure mode. - Those three jobs' if: open with !cancelled() (the idiom cron-vendor.yml/deploy-pages.yml/cron-conda.yml already use) plus an explicit needs.<dep>.result == 'success' || == 'skipped' per direct dependency, so a legitimately-skipped github does not cascade-skip them before their own evidence is even evaluated, while an outright failure or cancellation still blocks them. - conda: anaconda/actions/upload-package has no skip-existing, so each matrix leg also checks Anaconda for its own platform/Python file and skips only its own upload step, with a ::notice, if already there. Every PyPI/Anaconda evidence check feeds Python source to `python3 -` one line per printf argument rather than an indented `-c` argument -- indented -c source only compiles on Python 3.14, and the runner image's default python3 (3.12/3.13) raises IndentationError on it. - Added release_status: runs unconditionally, reconciles each of github/tag/pypi/conda against its own evidence (success, or skipped because that evidence already said done) rather than demanding the same outcome from all four, and reports why a run released nothing or that it did; fails loudly if a target ever skips despite its own evidence saying it is not done. - Updated docs/source/releasing.rst and extended tests/project/test_release_gates.py, including tests that execute release_status's script over a table of result vectors and that run the extracted Python snippets under a pre-3.14 interpreter; passes (34 tests, 23 subtests).
50da63f to
80e1bcd
Compare
|
Both blocking defects fixed on The severe branch is closed, and the design is safe. I raised the question of what
So rejection yields What I verified myself on this head: The two surviving Why a re-review rather than my sign-off. The delta since the reviewed head is 512 insertions across three files — So: re-review dispatched on the two things my check cannot reach — whether the reconciliation branches correctly for every result vector rather than just the self-heal one, and whether the new tests genuinely execute the script and the snippets rather than string-matching them. CI is fully green on this head (ok=62 fail=0 inc=0), which after last round proves nothing on its own. |
|
GOOD TO GO on That last line is the one that mattered. The previous round's defect was a false alarm on success; the mirror-image defect — silence on a real problem — is worse, and a reconciliation rewrite is exactly where it could appear. Zero such vectors. The named cases all branch correctly, including the two that decide it: the self-heal ( The new tests execute; they do not string-match, and they are not vacuous.
Verified good: Four non-blocking items, worth a follow-up rather than another round:
And three corrections to my own brief, all confirmed: there are 3 One thing nobody built: Sphinx was not run on this head, and Ready for you to merge. I am not merging. |
Please follow the guide below
make pylint,make mypy,make isort)make testpasses, and a test case covers the changeWhat is the purpose of your pull request?
fix— corrects a defectfeat— adds a featureperf— changes performance, not behaviourrefactor— changes neither behaviour nor performancetest— tests onlydocs— documentation onlyci— workflows or build toolingchore— anything elseDescription of your pull request and other information
Fixes #888.
tag,pypiandcondanow gate on their own publish evidenceinstead of the shared
v*-tag proxy that made every job skip silently on ahalf-finished release.
condaalso checks per matrix leg before uploading,since Anaconda has no
skip-existing. A newrelease_statusjob alwaysreports why a run released nothing, or that it did, and fails loudly on the
one shape that should now be unreachable.
docs/source/releasing.rstandtests/project/test_release_gates.pyare updated accordingly.