Skip to content

Migrate task runner from Makefile to mise#578

Open
mhspektr wants to merge 2 commits into
usestrix:mainfrom
mhspektr:feature/use_mise_en_place
Open

Migrate task runner from Makefile to mise#578
mhspektr wants to merge 2 commits into
usestrix:mainfrom
mhspektr:feature/use_mise_en_place

Conversation

@mhspektr

@mhspektr mhspektr commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Summary

Adopt mise-en-place as the single tool for both toolchain provisioning (Python, uv, Node, pre-commit, the Mintlify docs CLI) and task running, replacing the Makefile and the manual setup steps. Contributors now run mise install to get a pinned toolchain and mise <task> for everything the Makefile used to do.

Changes

  • mise.toml — pins tools (python 3.12, uv, node lts, pre-commit, npm:mintlify) and defines tasks: setup-dev, dev-install, prod-install, format, lint, type-check, security, check-all, pre-commit, clean, dev, and docs.
  • Makefile — removed; all targets migrated to mise tasks.
  • .github/workflows/build-release.yml — replaces actions/setup-python + astral-sh/setup-uv with jdx/mise-action (install: true, cache: true) so CI uses the same pinned toolchain as local dev.
  • DocsCONTRIBUTING.md, docs/contributing.mdx, docs/quickstart.mdx, docs/README.md, and README.md updated to use mise for setup, checks, docs preview, and install (mise use -g "github:usestrix/strix" / pipx:strix-agent).

Why

  • Single source of truth for tool versions across contributors and CI — no more drift between local Python/uv and the workflow.
  • One command (mise install) provisions everything; one verb (mise <task>) runs everything.
  • CI and local development share the exact same task definitions.

Notes for reviewers

  • First-time use in the repo requires mise trust before mise install (called out in the docs).
  • Docker is still installed separately — mise manages CLIs/runtimes, not the Docker daemon.
  • No application/runtime code changed; this is tooling, CI, and docs only. There is no test suite — quality gates remain lint, type-check, and security via mise check-all.

How to verify

mise trust
mise install      # provisions Python, uv, Node, pre-commit, mintlify
mise setup-dev    # uv sync + pre-commit install
mise check-all    # format + lint + type-check + security
mise docs         # preview the docs site locally

Remove the Makefile and move all tasks into mise.toml (setup-dev, check-all,
dev, format/lint/type-check/security, pre-commit, clean, docs). Update the
release workflow to use jdx/mise-action and refresh contributor/install docs
to use mise commands.
@greptile-apps

greptile-apps Bot commented Jun 19, 2026

Copy link
Copy Markdown
Contributor

Greptile Summary

This PR replaces the Makefile and manual toolchain setup with mise-en-place, introducing mise.toml as the single source of truth for tool versions and task definitions, and updating CI, docs, and contributor guides accordingly. No application or runtime code is changed.

  • mise.toml: Pins Python 3.12, uv, Node (lts), pre-commit, and mintlify; defines all tasks previously in the Makefile (setup-dev, check-all, format, lint, type-check, security, clean, dev, docs).
  • CI (.github/workflows/build-release.yml): Swaps actions/setup-python + astral-sh/setup-uv for jdx/mise-action with install: true and cache: true; the build step (uv sync --frozen + pyinstaller) is unchanged.
  • Docs + contributing guides: All make <task> references updated to mise <task>; mise trust prerequisite correctly documented; two new mise-based install methods added to the quickstart.

Confidence Score: 5/5

Safe to merge — no application code changed, and the CI build path (mise-action → uv sync --frozen → pyinstaller) is straightforward and functionally equivalent to what it replaced.

The change is purely tooling and documentation. The CI workflow correctly delegates to mise-action, the build step is unchanged, and all Makefile targets have direct equivalents in mise.toml. The check-all and dev tasks use nested mise subprocess calls where depends would be more idiomatic, but both approaches produce the same outcome.

mise.toml — the check-all and dev task definitions use a non-idiomatic recursive mise invocation pattern worth cleaning up, but it does not affect correctness.

Important Files Changed

Filename Overview
mise.toml New file: defines pinned toolchain and all project tasks. Tasks are correct and functionally equivalent to the removed Makefile; minor style inconsistency where check-all and dev call mise <task> recursively instead of using depends like setup-dev does.
.github/workflows/build-release.yml Replaces actions/setup-python + astral-sh/setup-uv with jdx/mise-action (install + cache); the build step's uv sync --frozen and uv run pyinstaller remain unchanged and will use the mise-managed uv/python.
Makefile Deleted; all targets migrated to mise tasks in mise.toml.
CONTRIBUTING.md Updated to reflect mise-based setup flow; make references replaced with mise; mise trust prerequisite correctly noted.
README.md Adds mise use -g "github:usestrix/strix" as an alternative install method alongside the existing curl installer.
docs/contributing.mdx Updated contributing steps to use mise; uv run pre-commit install correctly simplified to pre-commit install (pre-commit is now mise-managed).
docs/quickstart.mdx Adds two mise-based install tabs (pipx:strix-agent and github:usestrix/strix) alongside the existing curl method.
docs/README.md Simplifies local docs preview from manual npm i -g mintlify to mise install && mise docs.
Prompt To Fix All With AI
Fix the following 2 code review issues. Work through them one at a time, proposing concise fixes.

---

### Issue 1 of 2
mise.toml:41-49
The `check-all` and `dev` tasks invoke `mise <task>` as a subprocess from within a task `run` array, whereas `setup-dev` uses the idiomatic `depends` key. Calling `mise` recursively works but bypasses mise's dependency graph (no parallelism, no deduplication) and silently relies on `mise` being on `PATH` inside every task shell. Using `depends` is the declared mechanism for task chaining in mise and is already used by `setup-dev`.

```suggestion
[tasks.check-all]
description = "Run all code quality checks (format, lint, type-check, security)"
depends = ["format", "lint", "type-check", "security"]
run = "echo '✅ All code quality checks passed!'"
```

### Issue 2 of 2
mise.toml:65-72
Same pattern: `dev` calls sub-tasks via nested `mise` instead of `depends`. Prefer `depends` for consistency with `setup-dev` and to let mise manage the execution graph.

```suggestion
[tasks.dev]
description = "Quick dev loop: format, lint, type-check"
depends = ["format", "lint", "type-check"]
run = "echo '✅ Development cycle complete!'"
```

Reviews (2): Last reviewed commit: "Update mise.toml" | Re-trigger Greptile

Comment thread mise.toml
Comment on lines +1 to +6
[tools]
"npm:mintlify" = "latest"
node = "lts"
pre-commit = "latest"
python = "3.12"
uv = "latest"

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Using latest for uv, pre-commit, and npm:mintlify, plus lts for Node, undermines the core value proposition of mise as a reproducible toolchain. Two contributors running mise install days apart may get different tool versions, causing silent drift between environments — exactly the problem mise is meant to solve. Pin these to specific versions (e.g., uv = "0.7.x", node = "22.x", pre-commit = "4.x") and commit the mise.lock or equivalent.

Suggested change
[tools]
"npm:mintlify" = "latest"
node = "lts"
pre-commit = "latest"
python = "3.12"
uv = "latest"
[tools]
"npm:mintlify" = "4"
node = "22"
pre-commit = "4"
python = "3.12"
uv = "0.7"
Prompt To Fix With AI
This is a comment left during a code review.
Path: mise.toml
Line: 1-6

Comment:
Using `latest` for `uv`, `pre-commit`, and `npm:mintlify`, plus `lts` for Node, undermines the core value proposition of mise as a reproducible toolchain. Two contributors running `mise install` days apart may get different tool versions, causing silent drift between environments — exactly the problem mise is meant to solve. Pin these to specific versions (e.g., `uv = "0.7.x"`, `node = "22.x"`, `pre-commit = "4.x"`) and commit the `mise.lock` or equivalent.

```suggestion
[tools]
"npm:mintlify" = "4"
node = "22"
pre-commit = "4"
python = "3.12"
uv = "0.7"
```

How can I resolve this? If you propose a fix, please make it concise.

Note: If this suggestion doesn't match your team's coding style, reply to this and let me know. I'll remember it for next time!

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pinned versions are preferable, but I couldn't find any versions in the current project, so I thought it safer to leave it up to the maintainers.

Comment thread mise.toml Outdated
Co-authored-by: greptile-apps[bot] <165735046+greptile-apps[bot]@users.noreply.github.com>
@mhspektr

Copy link
Copy Markdown
Contributor Author

Please note that several of the current code clean/linter steps are broken. This is not something I have introduced :)

@bearsyankees

Copy link
Copy Markdown
Collaborator

@greptile

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.

2 participants