build(release): the shipped pipeline state list merged from separate sources (tour + contributed lists) #2040
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!2040
Loading…
Reference in a new issue
No description provided.
Delete branch "pipeline-state-sources"
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?
Every list added so far meant re-merging one binary,
assets/pipeline_states.bin.xz. So two contributors' PRs always conflicted, and the upcoming pipeline tour would have had to overwrite people's lists to regenerate its own. This keeps each source separate in the repository, and the build merges them deterministically.The layout
[a-z0-9-_.], so every file system gives the same order.FORMAT_XZ, CRC64, preset 6 extreme; xz stores no time or name).Where the merge happens
At build time:
nx2/make_game.py(ship_state_list) merges the folder into the game folder'shookshot_pipeline_states_shipped.bin.appimage.shalready copiesassets/, and now stops when the folder holds no list.check_player_build.shrunspipeline_states.py checkwith the image's Python.release_parts.py packagechecks the sources and copies the folder totools/assets/pipeline_states.Tooling (
nx2/pipeline_states.py)add <name> <lists>... --who --gpu --build --settings --routewritescontrib/<name>.bin.xzand its note.tour <lists>... --gpu --build --settings --routereplacestour.bin.xzandtour.md. Nothing else is touched.merge --out <file>writes the merged list, the same onemake_gamewrites.checkverifies each source and the merge:contrib/is a stray file;--out/--check <lists>form still works (the tour script uses it).Migration: nothing lost
The old list grew by prefix-preserving merges, so its history splits it exactly. I checked this: the 1,261 records from
6643085are a prefix of 5e4e211's 4,276, which are a prefix of #2029's 11,527.contrib/hckrman101-first-playcontrib/joey-magnus-linux-dlss-hd-packcontrib/jarynclouatre-most-of-the-gametests/test_pipeline_state_sources.pychecks that the three lists still hold exactly the old file's pipelines, by a SHA-256 of the sorted records.Docs
assets/pipeline_states/README.md(it replacesassets/pipeline_states.md) anddocs/development.mdcover:Checked
tests/test_pipeline_states.py,tests/test_ship_state_list.pyand the newtests/test_pipeline_state_sources.py(8 tests). Also the relatedtests/test_appimage_*,tests/test_make_game_*,tests/test_linux_update.pyandtests/test_pipeline_state_counts.py.tests/run_all.py, so every source is checked and the merge is checked for reproducibility on each PR.tests/run_all.py, and a real AppImage or Windows package build. The release scripts' changed blocks are exercised by the existing tests (the AppImage block is run, andrelease_parts.py packageis run on a small checkout).