1
0
Fork 0
mirror of https://github.com/jdx/mise.git synced 2026-05-13 05:00:47 +00:00
dev tools, env vars, task runner
  • Rust 77.8%
  • Shell 17.5%
  • TypeScript 2.8%
  • Lua 0.7%
  • PowerShell 0.6%
  • Other 0.3%
Find a file
jdx 510921fdc8
fix(ci): pass UTF-8 locale through to e2e tests (#9823)
## Summary

- Add `LANG` and `LC_ALL` (defaulting to `C.UTF-8`) to the env
passthrough in [e2e/run_test:90-91](e2e/run_test:90).

## Why

Follow-up to [#9820](https://github.com/jdx/mise/pull/9820), which set
`LANG=C.UTF-8` / `LC_ALL=C.UTF-8` in the e2e Docker image — but
`backend/test_gem_slow` kept failing because `within_isolated_env()`
uses `env -i` to clear the environment before each test, and the locale
wasn't on the pass-through list. The Dockerfile defaults were stripped
before the test process ever started.

Symptom: ruby 4.0.4 source build fails at the `rdoc` step with
`(ArgumentError) invalid byte sequence in US-ASCII` when rdoc's C parser
hits non-ASCII bytes in `object.c`.

Reproduced inside `ghcr.io/jdx/mise:e2e` on bamboo (Ubuntu 24.04 host):
- `env -i ... mise install ruby@4.0.4` → fails identically to CI
- `env -i ... LANG=C.UTF-8 LC_ALL=C.UTF-8 mise install ruby@4.0.4` →
succeeds

## Test plan

- [ ] Re-run failed `e2e-3` on release PR
[#9780](https://github.com/jdx/mise/pull/9780) and confirm
`backend/test_gem_slow` passes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

<!-- CURSOR_SUMMARY -->
---

> [!NOTE]
> **Low Risk**
> Low risk: only adjusts environment variables for e2e test execution,
with no production code or data-path changes.
> 
> **Overview**
> E2E test runner now preserves locale settings when running tests in a
fully cleared environment (`env -i`) by explicitly passing through
`LANG` (defaulting to `C.UTF-8`) and `LC_ALL`.
> 
> This prevents locale-dependent failures (e.g., tooling assuming
US-ASCII) during source builds inside CI and the e2e Docker image.
> 
> <sup>Reviewed by [Cursor Bugbot](https://cursor.com/bugbot) for commit
b7d7f06ad7. Bugbot is set up for automated
code reviews on this repo. Configure
[here](https://www.cursor.com/dashboard/bugbot).</sup>
<!-- /CURSOR_SUMMARY -->

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
2026-05-12 17:40:07 -05:00
.cargo chore: Merge vfox.rs into jdx/mise monorepo (#5590) 2025-07-12 06:54:20 -05:00
.claude chore: update singular/plural forms for word "task" (#7448) 2025-12-19 05:27:35 +00:00
.config various CLI improvements (#1190) 2023-12-14 22:51:17 -06:00
.cursor chore: remove devcontainer and docker development setup (#8421) 2026-03-02 12:39:57 +00:00
.github chore(ci): assert mise run render produces no diff (#9803) 2026-05-12 18:39:26 +00:00
.idea feat: improve task info support with experimental_monorepo_root (#6881) 2025-11-03 13:59:39 -08:00
cloudflare/workers chore(docs): switch canonical domain to mise.en.dev (#9411) 2026-04-26 14:51:50 -05:00
completions chore: release 2026.5.6 (#9764) 2026-05-11 06:09:29 -05:00
crates fix(vfox): resolve GitHub token lazily inside Lua plugins (#9816) 2026-05-12 18:21:41 +00:00
docs fix(vfox): resolve GitHub token lazily inside Lua plugins (#9816) 2026-05-12 18:21:41 +00:00
e2e fix(ci): pass UTF-8 locale through to e2e tests (#9823) 2026-05-12 17:40:07 -05:00
e2e-win fix(github): use default shell for credential command (#9664) 2026-05-11 12:38:44 -05:00
man/man1 feat(cli): add minimum release age flag to lock and ls-remote (#9269) 2026-05-10 13:15:52 -05:00
packaging fix(ci): set UTF-8 locale in e2e Docker image (#9820) 2026-05-12 16:35:18 -05:00
registry registry: update pi (#9792) 2026-05-12 17:24:13 -05:00
schema refactor(schema): reuse env directive property schemas (#9651) 2026-05-11 12:38:15 -05:00
scripts perf(aqua): bake rkyv aqua package blobs (#9535) 2026-05-10 06:49:32 -05:00
share/fish/vendor_conf.d rtx -> mise 2024-01-02 16:29:35 -06:00
src perf(task): cache per-file content hashes for source_freshness_hash_contents (#9819) 2026-05-12 14:49:16 -05:00
test feat(deps): add depends field for user-specified tool dependencies (#8776) 2026-04-04 16:43:25 +00:00
vendor/aqua-registry perf(aqua): bake rkyv aqua package blobs (#9535) 2026-05-10 06:49:32 -05:00
xtasks chore(ci): assert mise run render produces no diff (#9803) 2026-05-12 18:39:26 +00:00
.cliffignore chore: reset CHANGELOG 2024-11-23 10:44:56 -06:00
.dockerignore docker: build source from repo (#1122) 2023-12-07 23:28:46 -06:00
.editorconfig chore: improve shfmt linter (#5181) 2025-05-25 16:19:11 +00:00
.gitattributes perf(aqua): bake rkyv aqua package blobs (#9535) 2026-05-10 06:49:32 -05:00
.gitignore fix(tasks): implement smart flag routing for task arguments (#6861) 2025-11-02 09:45:59 -06:00
.markdown-link-check.json refactor: simplified stdout/stderr mocking in tests (#1163) 2023-12-13 21:22:43 +00:00
.markdownlint.json fix(fig): resolve __dirname error in ES module (#7021) 2025-11-20 01:37:20 +00:00
.markdownlintignore chore: consolidate all linters into hk.pkl (#8498) 2026-03-07 15:39:38 +00:00
.prettierignore chore(ci): restore lint as Linux build cache writer (#9305) 2026-04-22 13:40:52 -05:00
.prettierrc.toml fix: Improve fig spec with better generators (#3762) 2025-01-10 23:17:05 +00:00
.release-skip-e2e chore: release 2025.7.26 (#5776) 2025-07-24 02:49:33 -05:00
.shellcheckrc chore: disable "useless cat" shellcheck 2025-09-16 11:07:24 -05:00
.taplo.toml refactor(registry): split registry.toml into one file per tool (#7820) 2026-01-25 18:59:34 +00:00
.yamllint.yml ci: added super-linter (#1096) 2023-12-06 15:24:20 -06:00
age.pub chore: age encrypt minisign key 2024-12-23 05:38:27 -08:00
AGENTS.md chore: invert CLAUDE.md/AGENTS.md so AGENTS.md is canonical (#9560) 2026-05-03 07:22:38 -05:00
build.rs perf(aqua): use phf for baked registry lookups (#9763) 2026-05-11 19:58:01 +00:00
bun.lock chore(deps): lock file maintenance (#9773) 2026-05-11 06:29:56 +00:00
Cargo.lock fix(upgrade): remove completed progress jobs to prevent duplicate output (#9779) 2026-05-11 16:38:28 +00:00
Cargo.toml perf(registry): use phf for mise registry lookups (#9769) 2026-05-11 10:17:15 -05:00
CHANGELOG.md chore: release 2026.5.6 (#9764) 2026-05-11 06:09:29 -05:00
CLAUDE.md chore: invert CLAUDE.md/AGENTS.md so AGENTS.md is canonical (#9560) 2026-05-03 07:22:38 -05:00
cliff.toml chore(release): show registry section last in changelog (#7156) 2025-11-29 20:31:35 -06:00
communique.toml docs: update intro messaging (#9418) 2026-04-26 20:49:11 -05:00
CONTRIBUTING.md chore(docs): switch canonical domain to mise.en.dev (#9411) 2026-04-26 14:51:50 -05:00
Cross.toml Revert "fix(build): upgrade cross images to :main for C++17 support (#7958)" 2026-02-02 03:43:46 +00:00
default.nix chore: release 2026.5.6 (#9764) 2026-05-11 06:09:29 -05:00
deny.toml chore(deps): bump msrv for aws smithy updates (#9295) 2026-04-22 09:04:20 -05:00
Dockerfile rtx -> mise 2024-01-02 16:29:35 -06:00
eslint.config.mjs chore(deps): migrate eslint config to flat format for v10 compat (#9222) 2026-04-18 01:30:11 +00:00
flake.lock fix: update flake.lock and add fix for rust-bindgen to default.nix (#8874) 2026-04-04 08:31:12 -05:00
flake.nix chore: remove coverage (#3278) 2024-11-29 06:11:33 +00:00
hk.pkl perf(aqua): bake rkyv aqua package blobs (#9535) 2026-05-10 06:49:32 -05:00
LICENSE docs: Update LICENSE 2024-12-31 12:12:14 -06:00
llms.txt docs: update intro messaging (#9418) 2026-04-26 20:49:11 -05:00
minisign.key.age chore: age encrypt minisign key 2024-12-23 05:38:27 -08:00
minisign.pub feat: mise g bootstrap (#3792) 2024-12-22 19:43:34 +00:00
mise.code-workspace docs: create comprehensive architecture documentation suite and enhance development guides (#5572) 2025-07-11 09:23:01 -05:00
mise.lock chore: release 2026.5.6 (#9764) 2026-05-11 06:09:29 -05:00
mise.toml fix(lockfile): respect existing platforms during auto-lock (#9621) 2026-05-05 11:39:06 -05:00
mise.usage.kdl feat(cli): add minimum release age flag to lock and ls-remote (#9269) 2026-05-10 13:15:52 -05:00
package.json chore(deps): update dependency vitepress-plugin-tabs to ^0.9.0 (#9518) 2026-05-01 09:02:00 +00:00
pitchfork.toml chore: pitchfork 2024-12-14 16:43:52 +00:00
README.md chore: release 2026.5.6 (#9764) 2026-05-11 06:09:29 -05:00
SECURITY.md chore(docs): switch canonical domain to mise.en.dev (#9411) 2026-04-26 14:51:50 -05:00
settings.toml fix(vfox): resolve GitHub token lazily inside Lua plugins (#9816) 2026-05-12 18:21:41 +00:00
snapcraft.yaml chore: release 2026.5.6 (#9764) 2026-05-11 06:09:29 -05:00
tasks.md security(ci): run test-tool inside Docker container (#9055) 2026-04-11 13:34:44 -05:00
tasks.toml test(e2e): run tests in parallel (#9563) 2026-05-03 10:03:07 -05:00
tsconfig.json chore(deps): replace dependency @tsconfig/node22 with @tsconfig/node24 (#7618) 2026-01-16 19:57:20 -06:00
zipsign.pub zipsign (#985) 2023-11-09 17:25:38 +00:00

mise
mise-en-place

Crates.io GitHub GitHub Workflow Status Discord

Dev tools, env vars, and tasks in one CLI

Getting StartedDocumentationDev ToolsEnvironmentsTasks


Tip

My latest project, aube just hit stable! It's the fastest Node.js package manager with strong security defaults and is compatible with npm/pnpm/yarn lockfiles!

What is it?

mise prepares your development environment before each command runs. It keeps project tools, environment variables, and tasks in one mise.toml file so new shells, checkouts, and CI jobs all start from the same setup.

  • Install and switch between dev tools like node, python, cmake, terraform, and hundreds more.
  • Load environment variables per project directory, including values from .env files and other sources.
  • Define and run tasks for building, testing, linting, and deploying projects.

Demo

The following demo shows how to install and use mise to manage multiple versions of node on the same system. Note that calling which node gives us a real path to node, not a shim.

It also shows that you can use mise to install and many other tools such as jq, terraform, or go.

demo

See demo transcript.

Quickstart

Install mise

See Getting started for more options.

$ curl https://mise.run | sh
$ ~/.local/bin/mise --version
              _                                        __
   ____ ___  (_)_______        ___  ____        ____  / /___ _________
  / __ `__ \/ / ___/ _ \______/ _ \/ __ \______/ __ \/ / __ `/ ___/ _ \
 / / / / / / (__  )  __/_____/  __/ / / /_____/ /_/ / / /_/ / /__/  __/
/_/ /_/ /_/_/____/\___/      \___/_/ /_/     / .___/_/\__,_/\___/\___/
                                            /_/                 by @jdx
2026.5.6 macos-arm64 (2026-05-11)

Hook mise into your shell (pick the right one for your shell):

# note this assumes mise is located at ~/.local/bin/mise
# which is what https://mise.run does by default
echo 'eval "$(~/.local/bin/mise activate bash)"' >> ~/.bashrc
echo 'eval "$(~/.local/bin/mise activate zsh)"' >> ~/.zshrc
echo '~/.local/bin/mise activate fish | source' >> ~/.config/fish/config.fish
echo '~/.local/bin/mise activate pwsh | Out-String | Invoke-Expression' >> ~/.config/powershell/Microsoft.PowerShell_profile.ps1

Execute commands with specific tools

$ mise exec node@26 -- node -v
mise node@26.x.x ✓ installed
v26.x.x

Install tools

$ mise use --global node@26 go@1
$ node -v
v26.x.x
$ go version
go version go1.x.x macos/arm64

See dev tools for more examples.

Manage environment variables

# mise.toml
[env]
SOME_VAR = "foo"
$ mise set SOME_VAR=bar
$ echo $SOME_VAR
bar

Note that mise can also load .env files.

Run tasks

# mise.toml
[tasks.build]
description = "build the project"
run = "echo building..."
$ mise run build
building...

See tasks for more information.

Example mise project

Here is a combined example to give you an idea of how you can use mise to manage your a project's tools, environment, and tasks.

# mise.toml
[tools]
terraform = "1"
aws-cli = "2"

[env]
TF_WORKSPACE = "development"
AWS_REGION = "us-west-2"
AWS_PROFILE = "dev"

[tasks.plan]
description = "Run terraform plan with configured workspace"
run = """
terraform init
terraform workspace select $TF_WORKSPACE
terraform plan
"""

[tasks.validate]
description = "Validate AWS credentials and terraform config"
run = """
aws sts get-caller-identity
terraform validate
"""

[tasks.deploy]
description = "Deploy infrastructure after validation"
depends = ["validate", "plan"]
run = "terraform apply -auto-approve"

Run it with:

mise install # install tools specified in mise.toml
mise run deploy

Find more examples in the mise cookbook.

Full Documentation

See mise.en.dev

GitHub Issues & Discussions

Due to the volume of issue submissions mise received, using GitHub Issues became unsustainable for the project. Instead, mise uses GitHub Discussions which provide a more community-centric platform for communication and require less management on the part of the maintainers.

Please note the following discussion categories, which match how issues are often used:

Special Thanks

Namespace
Thanks to Namespace for providing CI services for mise.

Contributors

Contributors