ci(release): the nightly moves forward during merge bursts instead of waiting for main to be quiet #2556
No reviewers
Labels
No labels
accessibility
autorelease: pending
autorelease: tagged
bug
dependencies
documentation
duplicate
enhancement
github_actions
good first issue
help wanted
invalid
question
testing wanted
wontfix
No milestone
No assignees
1 participant
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Hookshot!2556
Loading…
Reference in a new issue
No description provided.
Delete branch "ci/nightly-moves-forward"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Why
The nightly only took a push's files when that push's commit was still main's newest (
scripts/release_upload.sh). Pushes to main build one at a time per workflow, and a waiting run is replaced by a newer push's. So during a burst of merges, every build that finished was already behind main and skipped the upload. The nightly stayed put until main was quiet.Seen today: run 43112700938 (commit
57ed3aa8), step "AppImage to the release":The nightly stayed at
v2.1.0-rc.3-153-g15646d18(both platforms' files from 21:42-21:45 UTC) for over an hour while main kept moving.What
nightlytag holds. This uses GitHub's compare API (compare/<held>...<sha>isahead), so the release job needs no full-history checkout. It no longer has to be main's newest commit.PATCH git/refs/tags/nightlywithforce=false). If the other platform's run has moved the tag past this commit since we looked, GitHub refuses the move, we look again, and this run stops without uploading anything. The tag never goes back. A run of an older commit, or a re-run of an old one, changes nothing..zsync,hookshot-linux.txt) are always from one commit, and so are the Windows files (HookshotBuilder.exe,hookshot-setup.txt, the RecompLauncher zip). Each set is named by its commit: the version in the file name, the tag in the list file. Each platform's updater reads only its own list (Updater.cs,linux_update.py), and the AppImage's zsync update info matches its own.zsync. So while main is moving, one platform's files can be a commit or two behind the other's without anything getting mixed up. The tag is at the newer of the two.diverged), only main's newest commit takes the tag, as before.docs/versioning.mdare updated to match.How verified
bash -n scripts/release_upload.sh;py_compileof the test.tests/test_release_scripts.py: the stand-inghnow knows main's history (for compare), refuses tag moves that are not fast-forwards, can inject a race (the tag moves between a run's look and its move), and handlesgh release view/edit/delete-asset. New tests:force=false)Not tested
comparestatuses are GitHub's documented behavior, simulated by the stand-in.github-sync referenced this pull request2026-11-12 06:22:54 +00:00