nightly: end an already-published recovered build as a no-op

Merged
TE
22d ago
+117-20

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-ok allows an equal highest build and prints already_published=true|false last. Without the flag, behavior doesn't change.
  • The failure issue jobs need no change. The no-op leaves tag_status empty (the marker step skips), so report-nightly-failure doesn't fire. close-nightly-failure-issue doesn't fire either; the run that published the build owns the issue.
  • publish-nightly-identity-legacy is 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


View with [code]smith Autofix with [code]smith
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-build gains --already-published-ok, which accepts an equal highest build and prints already_published=true|false; behavior without the flag is unchanged.
  • The no-op leaves tag_status empty so failure reporting and issue-closing steps do not fire.