chore(release): play profiles are committed in assets/profiles/, not a tools.lock archive: tools.py assemble profile removed #572
No reviewers
Labels
No labels
area/accessibility
area/audio
area/input
area/install
area/menu
area/renderer
area/saves
area/upscaling
beanstalk: approved @ 1697603
beanstalk: approved @ 2c5a62e
beanstalk: approved @ 4fd82b7
beanstalk: approved @ 64d6d09
beanstalk: approved @ 6f91fae
beanstalk: approved @ 70a78f9
beanstalk: approved @ 8015c9a
beanstalk: approved @ 8d361dc
beanstalk: approved @ 9d8356e
beanstalk: approved @ abf2227
beanstalk: approved @ d82f202
beanstalk: approved @ e5f1e40
beanstalk: approved @ ee8ab5f
ci: approved
good first issue
gpu/amd
gpu/igpu
gpu/intel
gpu/nvidia
help wanted
kind
bug
kind
chore
kind
docs
kind
feature
kind
performance
kind
question
needs measurements
platform/linux
platform/macos
platform/steam-deck
platform/windows
preview
priority
critical
priority
high
priority
low
regression
status
blocked
status
confirmed
status
duplicate
status
invalid
status
needs-info
status
wontfix
testing wanted
ci: approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
MagicBeanDev/Longshot!572
Loading…
Reference in a new issue
No description provided.
Delete branch "HumanBean/Longshot:build/no-profile-tool"
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
Play profiles are now committed in the repository under
assets/profiles/and used by every build (the renderer's, in #569). The other route, a profile archive in Longshot's package store named by aprofileline intools.lock, was never used (tools.locksays "No play profile yet") and is removed so there is one route, not two.What changed
scripts/tools.pylosesassemble profile(the subcommand,--work,assemble_profile(),PROFILE) and the docstring andREQUIREDcomment text about an optional play profile.install,checkandfetchhad no special handling for aprofileline, so atools.lockwithout one behaves exactly as today.tools.lock: the comment no longer promises a profile line ("No play profile: play profiles are committed in assets/profiles/, not tools here."). Every tool line is byte-identical..forgejo/workflows/build-linux.ymldrops the "Play profile" step, which installedtools.lock'sprofiletool intowork/when there was one (there never was, so the step only ever printed and exited).RELEASING.md(Bump a tool: theassemble profilecommand and its note; One-time setup step 6),docs/releases.md(tools.lock section) anddocs/development.md(Build times, "No hot pieces") now say play profiles are committed inassets/profiles/, not a tool.tests/test_tools_lock.py:test_the_profile(tested the removedassemble_profile) is replaced bytest_no_play_profile_is_a_tool(tools.py has noassemble_profile/PROFILEand no"profile"/assemble profiletext,assemble profileis refused,tools.lockhas noprofileline, and build-linux.yml installs none). Thewrite_lineappend case intest_a_line_is_replaced_in_placeuses a made-upzlibtool instead ofprofile, so it still checks that a new line is appended. ThePROFILEassertion intest_check_requires_every_toolis gone; the "profile is not in REQUIRED" one stays.Left on purpose: a checkout's own
work/files (hot_funcs.txt,hot_order.txt,longshot_pieces.prof) stay the developer route:nx2/make_game.pycopies them andscripts/linux/appimage.shcarries them when they are there. The game-side hot list and profile are parked (#505); when they come back they go inassets/profiles/too.docs/design.md's pipeline diagram ("-O2 with the play profile") describes that developer route and is unchanged. History docs are unchanged.Flags and settings
None.
Measurements
None apply: this changes no player-facing behaviour. It touches a release script, a CI step that never did anything (no
profileline has ever been intools.lock), the docs and a check. The game doesn't run any of it, so it is measured by its game-free checks (AGENTS.md), which CI runs.main:
7ff5256e(2026-11-14)this PR: build/no-profile-tool @
7c786e097ff5256e7c786e09tests/run_all.py, CI)Testing
Tested: nothing was run on this PC: the checks are left to CI.
Not tested: the release workflow end to end. It is unaffected:
tools.py check --requirenever required a profile, and the removed CI step exited early on every run becausetools.lockhad noprofileline.Needs other testers: None
Screenshots
Nothing on screen.
Risk and rollback
Low. Anyone with a local script that runs
tools.py assemble profilenow gets an argparse error. Reverting the commit brings the route back.Reviewer notes
Start with
scripts/tools.pyand the newtest_no_play_profile_is_a_toolintests/test_tools_lock.py. #569 adds the committed profiles and a "step 0" about them in RELEASING.md's "A release candidate", which this PR leaves alone.Issues
See #505
Checklist
For everyone
type(scope): description).main.python -I -B tests/run_all.pyrun and passing (any failure that also fails onmainis named above). (not run here: left to CI)third_party/untouched (a new folder with aPROVENANCE.mdinstead).If applicable
Assisted-by:/Co-Authored-By:trailers.tests/that reads changed source updated in this PR, not weakened.🤖 Generated with Claude Code
Description: a Measurements table (no numbers apply; CI runs the game-free checks), and 'Needs other testers: None' in the template's form.
Description: the Measurements section names main and this PR's commits.
7c786e09aa4b20ef4b6eWIP: chore(release): play profiles are committed in assets/profiles/, not a tools.lock archive: tools.py assemble profile removedto chore(release): play profiles are committed in assets/profiles/, not a tools.lock archive: tools.py assemble profile removedRebased onto main
4e80ea63(after #569 merged), no conflicts. Nothing run here.4b20ef4b6ea15a7a021bRebased onto main
414f56e2(after #569 and #573 merged), no conflicts. Nothing run here.