Skip to content

feat(release): ship zipped binaries so rokit and mise can install lpm - #32

Merged
ryancundiff merged 1 commit into
masterfrom
feat/zipped-release-assets
Aug 3, 2026
Merged

feat(release): ship zipped binaries so rokit and mise can install lpm#32
ryancundiff merged 1 commit into
masterfrom
feat/zipped-release-assets

Conversation

@ryancundiff

Copy link
Copy Markdown
Contributor

rokit and mise install a tool from a release archive, not a loose binary, so neither could install lpm at all. Releases now also upload lpm-{os}-{arch}.zip holding a bare lpm[.exe] at its root, and self update reads that instead.

The bare binary keeps being uploaded for now, and that is the whole reason this can ship in one release: every lpm already out there derives lpm-{os}-{arch}[.exe] and matches it exactly, so dropping it would strand those installs on a self update that can never find its asset again. They can reach this version, and from this version on only the zip is read. The bare asset can stop being published once nobody is left on a version that needs it -- nothing current reads it.

Unpacking goes through tools::archive, the same code that unpacks every other tool's release, so lpm now reads its own the way it reads everyone else's. Two things it does not inherit: the binary is looked up by name rather than taken from the archive root, so a nested layout still updates, and a non-archive asset is refused instead of being written through as the executable -- a truncated download or an error page served under the zip's name would otherwise brick the install.

Closes #28

rokit and mise install a tool from a release archive, not a loose
binary, so neither could install lpm at all. Releases now also upload
`lpm-{os}-{arch}.zip` holding a bare `lpm[.exe]` at its root, and
`self update` reads that instead.

The bare binary keeps being uploaded for now, and that is the whole
reason this can ship in one release: every lpm already out there derives
`lpm-{os}-{arch}[.exe]` and matches it exactly, so dropping it would
strand those installs on a `self update` that can never find its asset
again. They can reach this version, and from this version on only the
zip is read. The bare asset can stop being published once nobody is left
on a version that needs it -- nothing current reads it.

Unpacking goes through `tools::archive`, the same code that unpacks
every other tool's release, so lpm now reads its own the way it reads
everyone else's. Two things it does not inherit: the binary is looked up
by name rather than taken from the archive root, so a nested layout
still updates, and a non-archive asset is refused instead of being
written through as the executable -- a truncated download or an error
page served under the zip's name would otherwise brick the install.
@ryancundiff
ryancundiff merged commit 323c97b into master Aug 3, 2026
5 checks passed
@ryancundiff
ryancundiff deleted the feat/zipped-release-assets branch August 3, 2026 08:20
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Tooling manager like mise and rokit can't install LPM

1 participant