Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
84 changes: 84 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,5 +1,89 @@
# Changelog

## [2025.12.13](https://github.com/jdx/mise/compare/v2025.12.12..v2025.12.13) - 2025-12-19

### πŸš€ Features

- **(ruby)** set PKG_CONFIG_PATH for native gem extensions by @jdx in [#7457](https://github.com/jdx/mise/pull/7457)
- **(tera)** add haiku() function for random name generation by @jdx in [#7399](https://github.com/jdx/mise/pull/7399)
- **(vfox)** pass tool options to EnvKeys hook by @jdx in [#7447](https://github.com/jdx/mise/pull/7447)
- implement independent versioning for subcrates by @jdx in [#7402](https://github.com/jdx/mise/pull/7402)

### πŸ› Bug Fixes

- **(ci)** improve GHA cache efficiency and fix registry-ci bug by @jdx in [#7404](https://github.com/jdx/mise/pull/7404)
- **(ci)** use !cancelled() instead of always() for registry-ci by @jdx in [#7435](https://github.com/jdx/mise/pull/7435)
- **(e2e)** use explicit asdf backend for zprint in plugin_install test by @jdx in [#7440](https://github.com/jdx/mise/pull/7440)
- **(github)** use GITHUB_TOKEN for attestation verification by @jdx in [#7446](https://github.com/jdx/mise/pull/7446)
- **(schema)** add shell_alias definition by @anp in [#7441](https://github.com/jdx/mise/pull/7441)
- **(test)** update backend_arg test to use clojure instead of poetry by @jdx in [#7436](https://github.com/jdx/mise/pull/7436)
- use vfox backend for poetry and fix related tests by @jdx in [#7445](https://github.com/jdx/mise/pull/7445)

### πŸ“š Documentation

- add link to COPR package page for Fedora/RHEL by @jdx in [bc8ac73](https://github.com/jdx/mise/commit/bc8ac732e3bdecfd12affd7b8c54cdebcdb87da1)
- improve installation documentation by @jdx in [#7403](https://github.com/jdx/mise/pull/7403)
- add comprehensive glossary by @jdx in [#7401](https://github.com/jdx/mise/pull/7401)
- use `mise run` uniformly in its examples by @muzimuzhi in [#7444](https://github.com/jdx/mise/pull/7444)

### πŸ§ͺ Testing

- rename duplicate 'ci' job names for clarity by @jdx in [#7398](https://github.com/jdx/mise/pull/7398)
- add token pool integration for rate limit distribution by @jdx in [#7397](https://github.com/jdx/mise/pull/7397)

### πŸ“¦οΈ Dependency Updates

- replace dependency @tsconfig/node18 with @tsconfig/node20 by @renovate[bot] in [#7450](https://github.com/jdx/mise/pull/7450)
- pin rui314/setup-mold action to 725a879 by @renovate[bot] in [#7449](https://github.com/jdx/mise/pull/7449)

### πŸ“¦ Registry

- add github backend for swiftformat by @jdx in [#7396](https://github.com/jdx/mise/pull/7396)
- use pipx backend for azure-cli by @jdx in [#7406](https://github.com/jdx/mise/pull/7406)
- use pipx backend for dvc by @jdx in [#7413](https://github.com/jdx/mise/pull/7413)
- add github backend for zprint by @jdx in [#7410](https://github.com/jdx/mise/pull/7410)
- use gem backend for cocoapods by @jdx in [#7411](https://github.com/jdx/mise/pull/7411)
- use pipx backend for gallery-dl by @jdx in [#7409](https://github.com/jdx/mise/pull/7409)
- add aqua backends for HashiCorp tools by @jdx in [#7408](https://github.com/jdx/mise/pull/7408)
- use npm backend for danger-js by @jdx in [#7407](https://github.com/jdx/mise/pull/7407)
- use pipx backend for pipenv by @jdx in [#7415](https://github.com/jdx/mise/pull/7415)
- use pipx backend for poetry by @jdx in [#7416](https://github.com/jdx/mise/pull/7416)
- add github backend for xcodegen ([github:yonaskolb/XcodeGen](https://github.com/yonaskolb/XcodeGen)) by @jdx in [#7417](https://github.com/jdx/mise/pull/7417)
- use npm backend for heroku by @jdx in [#7418](https://github.com/jdx/mise/pull/7418)
- add aqua backend for setup-envtest by @jdx in [#7421](https://github.com/jdx/mise/pull/7421)
- add github backend for xcresultparser ([github:a7ex/xcresultparser](https://github.com/a7ex/xcresultparser)) by @jdx in [#7422](https://github.com/jdx/mise/pull/7422)
- add aqua backend for tomcat by @jdx in [#7423](https://github.com/jdx/mise/pull/7423)
- use npm backend for serverless by @jdx in [#7424](https://github.com/jdx/mise/pull/7424)
- add github backend for daytona ([github:daytonaio/daytona](https://github.com/daytonaio/daytona)) by @jdx in [#7412](https://github.com/jdx/mise/pull/7412)
- add github backend for flyway ([github:flyway/flyway](https://github.com/flyway/flyway)) by @jdx in [#7414](https://github.com/jdx/mise/pull/7414)
- add github backend for schemacrawler ([github:schemacrawler/SchemaCrawler](https://github.com/schemacrawler/SchemaCrawler)) by @jdx in [#7419](https://github.com/jdx/mise/pull/7419)
- add github backend for codeql by @jdx in [#7420](https://github.com/jdx/mise/pull/7420)
- use pipx backend for mitmproxy by @jdx in [#7425](https://github.com/jdx/mise/pull/7425)
- use pipx backend for sshuttle by @jdx in [#7426](https://github.com/jdx/mise/pull/7426)
- add github backend for quarkus by @jdx in [#7428](https://github.com/jdx/mise/pull/7428)
- add github backend for smithy by @jdx in [#7430](https://github.com/jdx/mise/pull/7430)
- add github backend for xchtmlreport ([github:XCTestHTMLReport/XCTestHTMLReport](https://github.com/XCTestHTMLReport/XCTestHTMLReport)) by @jdx in [#7431](https://github.com/jdx/mise/pull/7431)
- add github backend for grails by @jdx in [#7429](https://github.com/jdx/mise/pull/7429)
- use npm backend for esy by @jdx in [#7434](https://github.com/jdx/mise/pull/7434)
- add github backend for micronaut by @jdx in [#7433](https://github.com/jdx/mise/pull/7433)
- add github backend for dome by @jdx in [#7432](https://github.com/jdx/mise/pull/7432)
- use vfox backend for poetry by @jdx in [#7438](https://github.com/jdx/mise/pull/7438)
- add vfox backend for pipenv by @jdx in [#7439](https://github.com/jdx/mise/pull/7439)
- use github backend for xchtmlreport by @jdx in [#7442](https://github.com/jdx/mise/pull/7442)
- use npm backend for purty by @jdx in [#7443](https://github.com/jdx/mise/pull/7443)

### Chore

- **(docker)** add Node LTS to mise Docker image by @jdx in [#7405](https://github.com/jdx/mise/pull/7405)
- rename mise-tools to mise-versions by @jdx in [ab3e1b8](https://github.com/jdx/mise/commit/ab3e1b8e64c2aa881c43af7636d6b492c6001e6f)
- s/mise task/mise tasks/g in docs and tests by @muzimuzhi in [#7400](https://github.com/jdx/mise/pull/7400)
- update singular/plural forms for word "task" by @muzimuzhi in [#7448](https://github.com/jdx/mise/pull/7448)

### New Contributors

- @muzimuzhi made their first contribution in [#7448](https://github.com/jdx/mise/pull/7448)
- @anp made their first contribution in [#7441](https://github.com/jdx/mise/pull/7441)

## [2025.12.12](https://github.com/jdx/mise/compare/v2025.12.11..v2025.12.12) - 2025-12-18

### πŸš€ Features
Expand Down
6 changes: 3 additions & 3 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ members = ["crates/vfox", "crates/aqua-registry"]

[package]
name = "mise"
version = "2025.12.12"
version = "2025.12.13"
edition = "2024"
description = "The front-end to your dev env"
authors = ["Jeff Dickey (@jdx)"]
Expand Down
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,7 +55,7 @@ See [Getting started](https://mise.jdx.dev/getting-started.html) for more option
```sh-session
$ curl https://mise.run | sh
$ ~/.local/bin/mise --version
2025.12.12 macos-arm64 (a1b2d3e 2025-12-18)
2025.12.13 macos-arm64 (a1b2d3e 2025-12-19)
```

Hook mise into your shell (pick the right one for your shell):
Expand Down
2 changes: 1 addition & 1 deletion completions/_mise
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ _mise() {
return 1
fi

local spec_file="${TMPDIR:-/tmp}/usage__usage_spec_mise_2025_12_12.spec"
local spec_file="${TMPDIR:-/tmp}/usage__usage_spec_mise_2025_12_13.spec"
if [[ ! -f "$spec_file" ]]; then
mise usage > "$spec_file"
fi
Expand Down
2 changes: 1 addition & 1 deletion completions/mise.bash
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ _mise() {

local cur prev words cword was_split comp_args
_comp_initialize -n : -- "$@" || return
local spec_file="${TMPDIR:-/tmp}/usage__usage_spec_mise_2025_12_12.spec"
local spec_file="${TMPDIR:-/tmp}/usage__usage_spec_mise_2025_12_13.spec"
if [[ ! -f "$spec_file" ]]; then
mise usage > "$spec_file"
fi
Expand Down
2 changes: 1 addition & 1 deletion completions/mise.fish
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ if ! type -p usage &> /dev/null
return 1
end
set -l tmpdir (if set -q TMPDIR; echo $TMPDIR; else; echo /tmp; end)
set -l spec_file "$tmpdir/usage__usage_spec_mise_2025_12_12.spec"
set -l spec_file "$tmpdir/usage__usage_spec_mise_2025_12_13.spec"
if not test -f "$spec_file"
mise usage | string collect > "$spec_file"
end
Expand Down
2 changes: 1 addition & 1 deletion crates/aqua-registry/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "aqua-registry"
version = "2025.9.11"
version = "2025.10.0"
edition = "2024"
description = "Aqua registry backend for mise"
authors = ["Jeff Dickey (@jdx)"]
Expand Down

This file was deleted.

This file was deleted.

This file was deleted.

2 changes: 1 addition & 1 deletion crates/vfox/Cargo.toml
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
[package]
name = "vfox"
version = "2025.9.11"
version = "2025.10.0"
edition = "2024"
license = "MIT"
description = "Interface to vfox plugins"
Expand Down
76 changes: 76 additions & 0 deletions crates/vfox/embedded-plugins/vfox-pipenv/hooks/available.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
local http = require("http")
local json = require("json")

--- Compare two semantic version strings
--- @param v1 string
--- @param v2 string
--- @return boolean true if v1 > v2
local function compare_versions(v1, v2)
local function parse(v)
local parts = {}
-- Handle pre-release versions like 2020.4.1b2, 2020.4.1.dev1
local main = v:match("^([%d%.]+)")
if main then
for num in main:gmatch("(%d+)") do
table.insert(parts, tonumber(num))
end
end
-- Pre-release versions should sort before release versions
if v:match("[abrc]%d*$") or v:match("%.dev%d*$") then
table.insert(parts, -1)
else
table.insert(parts, 0)
end
return parts
end

local p1, p2 = parse(v1), parse(v2)
for i = 1, math.max(#p1, #p2) do
local n1, n2 = p1[i] or 0, p2[i] or 0
if n1 ~= n2 then
return n1 > n2
end
end
return false
end

--- Get the available version list from PyPI.
--- @param ctx table Empty table, no data provided. Always {}.
--- @return table Version list
function PLUGIN:Available(ctx)
local resp, err = http.get({
url = "https://pypi.org/pypi/pipenv/json"
})

if err ~= nil or resp.status_code ~= 200 then
error("Failed to fetch pipenv versions from PyPI: " .. (err or ("HTTP " .. resp.status_code)))
end

local data = json.decode(resp.body)
if not data or not data.releases then
error("Invalid response from PyPI")
end

local result = {}
for version, release_info in pairs(data.releases) do
-- Skip versions with no files (yanked or broken releases)
if release_info and #release_info > 0 then
local note = ""
-- Mark pre-release versions
if version:match("[abrc]%d*$") or version:match("%.dev%d*$") then
note = "pre-release"
end
table.insert(result, {
version = version,
note = note,
})
end
end

-- Sort versions (newest first)
table.sort(result, function(a, b)
return compare_versions(a.version, b.version)
end)

return result
end
79 changes: 79 additions & 0 deletions crates/vfox/embedded-plugins/vfox-pipenv/hooks/env_keys.lua
Original file line number Diff line number Diff line change
@@ -0,0 +1,79 @@
--- Each SDK may have different environment variable configurations.
--- This allows plugins to define custom environment variables (including PATH settings)
--- @param ctx table Context information
--- @field ctx.path string SDK installation directory
function PLUGIN:EnvKeys(ctx)
local version_path = ctx.path
local result = {}

-- Add wrapper_bin to PATH for pipenv command
if RUNTIME.osType == "windows" then
table.insert(result, {
key = "PATH",
value = version_path .. "\\wrapper_bin"
})
else
table.insert(result, {
key = "PATH",
value = version_path .. "/wrapper_bin"
})
end

-- Check for Pipfile in current directory to auto-activate virtualenv
local cwd = os.getenv("PWD")
if not cwd then
-- Fallback: try to get cwd via shell command
local handle = io.popen("pwd 2>/dev/null")
if handle then
cwd = handle:read("*a"):gsub("%s+$", "")
handle:close()
end
end

if cwd and cwd ~= "" then
local pipfile_path = cwd .. "/Pipfile"
local f = io.open(pipfile_path, "r")
if f then
f:close()

-- Pipfile exists, try to get the virtualenv path
local pipenv_cmd = version_path
if RUNTIME.osType == "windows" then
pipenv_cmd = pipenv_cmd .. "\\wrapper_bin\\pipenv"
else
pipenv_cmd = pipenv_cmd .. "/wrapper_bin/pipenv"
end

local venv_handle = io.popen("PIPENV_PIPFILE=\"" .. pipfile_path .. "\" \"" .. pipenv_cmd .. "\" --venv 2>/dev/null")
if venv_handle then
local venv_path = venv_handle:read("*a"):gsub("%s+$", "")
venv_handle:close()

if venv_path and venv_path ~= "" then
-- Verify the venv exists
local venv_bin = venv_path .. "/bin"
local test_file = io.open(venv_bin .. "/python", "r")
if test_file then
test_file:close()

-- Add virtualenv activation
table.insert(result, {
key = "VIRTUAL_ENV",
value = venv_path
})
table.insert(result, {
key = "PIPENV_ACTIVE",
value = "1"
})
table.insert(result, {
key = "PATH",
value = venv_bin
})
end
end
end
end
end

return result
end
Loading
Loading