Skip to content

build(mise): lock tool versions and provide ripgrep - #96

Merged
lsimons merged 1 commit into
mainfrom
build/mise-lockfile-and-ripgrep
Aug 17, 2026
Merged

build(mise): lock tool versions and provide ripgrep#96
lsimons merged 1 commit into
mainfrom
build/mise-lockfile-and-ripgrep

Conversation

@lsimons

@lsimons lsimons commented Aug 17, 2026

Copy link
Copy Markdown
Member

Found by a /setup pass over the repo's scaffolding. Everything else it
checks was already in good shape; these were the two real gaps.

Lock the tool versions

[tools] pinned only to a minor range (python = "3.14", uv = "0.12",
bun = "1.3", vale = "3"), so mise install — locally and in CI through
jdx/mise-action — resolved whatever was newest at the time. There was no
mise.lock.

  • lockfile = true, and mise.lock committed, generated for
    linux-x64,macos-arm64,windows-x64 (25 platform entries, covering the
    task-scoped tools actionlint and shellcheck too).
  • minimum_release_age = "7d" moves the supply-chain cooldown out of
    personal global config and into the repo, so CI and other contributors
    get it as well.

Provide ripgrep

mdd search shells out to rg, and six tests in tests/search/ and
tests/commands/test_search.py exercise it end to end — but nothing
provided it. CI apt-installed it; a local checkout got whatever was on
PATH. When that is a stale mise shim with no version set, the tests fail
opaquely: rg returns empty output and the assertions fail with no hint
that the tool is the problem. Reproduced locally before this change and
confirmed unrelated to the lockfile work.

ripgrep = "14" in [tools] makes mise install provide it, pinned and
checksummed like everything else. Dropped from the apt line in ci.yml so
there is a single source of the version.

Verification

  • mise run ci green: 2543 passed, coverage 88.34% against the 85% floor.
    Before the ripgrep change, the same gate on this machine had 6 failures.
  • zizmor --collect=all --strict-collection .github/ — no findings.
  • mise run actions-lint — clean.

The CI change is the one thing only a real Actions run can confirm: rg now
has to resolve through mise's shims rather than apt. Worth a look at the
Test step before merging.

Co-Authored-By: lsimons-bot bot@leosimons.com

`[tools]` pinned only to a minor range, so `mise install` — locally and
in CI through `jdx/mise-action` — resolved whatever was newest at the
time. Enable `lockfile = true` and commit `mise.lock`, generated for
linux-x64, macos-arm64 and windows-x64, so every checkout installs the
same exact versions with checksums. `minimum_release_age = "7d"` moves
the supply-chain cooldown from personal global config into the repo,
where CI and other contributors get it too.

Add ripgrep to `[tools]` while doing so. `mdd search` shells out to it
and six search tests exercise it, but nothing provided it: CI apt-
installed it and a local checkout got whatever was on PATH, which fails
opaquely (empty output, failing assertions) when that is a stale shim.
CI no longer apt-installs it, since mise.lock is now the single source
of the version.

Assisted-by: Claude:claude-opus-5

Co-Authored-By: lsimons-bot <bot@leosimons.com>
@lsimons
lsimons merged commit aeec6ff into main Aug 17, 2026
6 checks passed
@lsimons
lsimons deleted the build/mise-lockfile-and-ripgrep branch August 17, 2026 07:35
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.

1 participant