nightly: end an already-published recovered build as a no-op
nightly-next push run 38689026338 went red in publish-nightly although nothing was wrong. It and its continuation run 38689412336 both took recovered build 3865928435701. The continuation published it at 06:02Z, so at 06:56Z the push run's recheck printed build 3865928435701 is not above 3865928435701 in https://files-next.cmux.com/nightly-next/next/appcast-arm64.xml and exited 1.
Now, when no feed is above the recovered build and some feed already offers that exact build, the recheck posts a notice ("build X is already published; nothing to do") and sets already_published=true. Every later publish-nightly step skips, and so does republish-nightly-deltas, which gets a new already_published job output. A build below any feed still fails, as before.
scripts/ci/nightly_version.py check-build --already-published-okallows an equal highest build and printsalready_published=true|falselast. Without the flag, behavior doesn't change.- The failure issue jobs need no change. The no-op leaves
tag_statusempty (the marker step skips), soreport-nightly-failuredoesn't fire.close-nightly-failure-issuedoesn't fire either; the run that published the build owns the issue. publish-nightly-identity-legacyis untouched.
Testing
python3 -m unittest tests.test_nightly_next_recovery runs the real recheck step against local feed copies and evaluates the real job ifs.
- Red at f1f47f64880ad (test only): 3 failures: already-published is a no-op, later steps are gated, no delta republish.
- Green at 35b23983b39a2: 32 tests OK.
Also green: python3 tests/test_nightly_version.py (9/9), and ~/.local/bin/actionlint .github/workflows/nightly.yml. The other tests that read nightly.yml pass, except test_ci_change_areas.py, test_ci_select_package_tests.py and test_ci_self_hosted_guard.sh. Those fail on unrelated paths (Packages/Shared change areas, a temp calls file, runner labels in other workflows). I didn't run the workflow live.
Changelog
none
🤖 Generated with Claude Code
Need help on this PR? Tag @codesmith-bot with what you need.
Summary by cubic
Fixes the nightly publish recheck treating an already-published recovered build as a failure, which turned the push run red even though the build was published by a continuation run. The recheck now detects that case, ends as a no-op with success, and skips all later publish steps and delta republishing. A build below any feed still fails as before.
nightly_version.py check-buildgains--already-published-ok, which accepts an equal highest build and printsalready_published=true|false; behavior without the flag is unchanged.- The no-op leaves
tag_statusempty so failure reporting and issue-closing steps do not fire.