feat: support mise as a first-class install path - #714
Merged
Conversation
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Contributor
Greptile SummaryThis PR adds mise as a documented, first-class installation path and suppresses redundant startup update notices for mise-managed binaries.
Confidence Score: 5/5The PR appears safe to merge with no concrete blocking or independently actionable non-blocking issues identified. The mise notice suppression is isolated to detected mise installs, the caller remains tolerant of notice-resolution failures, and release archives are attested using the same artifact glob used for upload. Important Files Changed
Reviews (1): Last reviewed commit: "docs: document the mise install path" | Re-trigger Greptile |
Hunk now ships as an omarchy default tool, installed via `omarchy-mise-install aqua:modem-dev/hunk hunk`. That wrapper runs `mise use -g` before exec'ing the binary, so mise-managed sessions are already on the newest release by the time Hunk starts. Previously those installs fell through to the "npm" install source and were told to run `npm i -g hunkdiff` -- wrong for how they installed, and redundant with an upgrade that just happened. Detect mise from adjacent `mise/installs` path segments (the one signal that survives `mise x`, which sets none of mise's shell env vars) and suppress the notice via a named self-updating-source policy rather than swapping in a mise command. The suppression deliberately sits after the skill-refresh notice, so mise-managed sessions still receive a one-time refresh notice.
mise verifies aqua-installed tools by default (`aqua.github_attestations`, `aqua.cosign`, and `aqua.minisign` all default to true), but Hunk publishes no verification material at all, so every mise/aqua install is unverified. Attest the archives with `actions/attest-build-provenance` before upload. The subject glob deliberately mirrors the upload glob rather than matching `*.tar.gz`, so the invariant is "nothing leaves that directory unattested" even if the asset set changes later. This is the producing half. A follow-up PR to aqua-registry adds the `github_artifact_attestations:` block, and must wait for a real attested release so the signer workflow identity is read off a live attestation instead of hand-written.
`mise use -g hunk` has worked since community contributors added Hunk to the mise and aqua registries, but nothing in the repo said so -- and Hunk now reaches users primarily through that path as an omarchy default tool. Scope the "Node.js 18+" requirement to the npm install while doing so; it never applied to the Homebrew, Nix, or mise paths, which ship a self-contained binary. Record the release-verification command too. mise bakes an aqua registry snapshot into each of its releases and caches registry sources for a week, so a naive post-publish check can pass or fail for reasons unrelated to our release; `MISE_AQUA_BAKED_REGISTRY=false` is what makes it meaningful.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Hunk now ships as a default tool in Omarchy, installed with
omarchy-mise-install aqua:modem-dev/hunk hunk. That makes mise a first-class distribution path for us, and this PR makes Hunk aware of it.Worth noting:
mise use -g hunkalready worked before this PR. Community contributors added Hunk to both the mise registry and aqua-registry without our involvement. "supporting mise" just means noticing when we break those entries, and publishing descriptive and verification fields.What's here
1. Suppress the startup update notice for mise installs (
src/core/updateNotice.ts)The omarchy wrapper runs
mise use -gbefore exec'ing the binary, so a mise session is already on the newest release by the time Hunk starts. Those installs previously fell through to thenpminstall source and were told to runnpm i -g hunkdiff— wrong for how they installed, and redundant with an upgrade that had just happened.Detection uses adjacent
mise+installspath segments. mise's env vars (MISE_SHELL,__MISE_DIFF) were rejected: they're set bymise activateshell integration, not bymise x, which is exactly how the omarchy wrapper launches us. Suppression is a namedSELF_UPDATING_INSTALL_SOURCESpolicy checked before the dist-tags fetch, so mise installs skip the network entirely.2. Attest release archives (
.github/workflows/release-prebuilt-npm.yml)mise verifies aqua-installed tools by default —
aqua.github_attestations,aqua.cosign, andaqua.minisignall default totrue— but we publish no verification material at all, so every mise/aqua install of Hunk is currently unverified.actions/attest-build-provenancenow runs before upload. The subject glob mirrors the upload glob rather than matching*.tar.gz, so the invariant is "nothing leaves that directory unattested" even if the asset set changes later.3. Document the mise path (
README.md,AGENTS.md, website)Also scopes the "Node.js 18+" requirement to the npm install, which never applied to the Homebrew, Nix, or mise paths.
The release-verification command is
MISE_AQUA_BAKED_REGISTRY=false mise latest hunk. The flag matters: mise bakes an aqua registry snapshot into each of its own releases and caches registry sources for a week, so a naive check can pass or fail for reasons unrelated to our release.Verification
bun test src/core— 547 pass, 8 skip. The three failures are pre-existing and environment-only: they assert npm-flavored instructions without stubbingresolveExecutablePath, so they readprocess.execPathand resolvenixon a Nix-store Bun. Verified identical at the base commit, and green in CI, where Bun sits at~/.bun/bin/bunmise use -g hunkfetchedhunkdiff-darwin-arm64.tar.gzand ranhunk --version→0.18.0, no Node involvedMISE_AQUA_BAKED_REGISTRY=falseconfirmed to actually bypass the baked snapshotresolveStartupSkillRefreshNotice, so mise users still receive the one-time skill-refresh noticev4.2.2→4d101475d8b20a2381f78447822ac1eab6504dd8(lightweight tag, ref SHA is the commit SHA)The attestation path itself can only be proven by a real tagged release — the job is gated
if: github.event_name == 'push', soworkflow_dispatchnever exercises it.Follow-ups, deliberately not in this PR
Windows support in aqua-registry. Investigated and proven on a real Windows 11 x64 box with
aquadirectly (aqua-registry closes reports that only reproduce through mise). Result: GO, and no.exetemplating is needed — aqua'scompleteWindowsExtToFileSrcappends.exewhenfiles[].srchas no extension, so our existingsrcalready resolves tohunkdiff-windows-x64/hunk.exe. Onlysupported_envsis missing.The entry does need a version split, not a one-line change: Windows assets only start at v0.12.0, and the naive diff fails on v0.11.1 with
the asset isn't found: hunkdiff-windows-x64.tar.gz. Today the current entry silently installs nothing on Windows and exits 0, which is the mise fallthrough. Bundledskills/were confirmed to survive extraction.The aqua-registry verification block. Blocked on item 2 shipping — the
signer_workflowvalue should be read off a live attestation viagh attestation verify --format json, not hand-written.