* feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * feat(datasource): add GraalVM version datasource with support for JDK and JRE releases * add coverage * fix * fix * fix * code cov * code cov * code cov * refactor(datasource): integrate GraalVM into java-version datasource Merges graalvm-version datasource into java-version as a unified multi-vendor Java distribution datasource. Implements vendor-based modular architecture with routing layer for Adoptium (Eclipse Temurin) and Oracle GraalVM. Architecture: - Vendor-specific handlers (adoptium.ts, graalvm.ts) with routing in index.ts - Vendor-aware system detection with different arch/os mappings per vendor - Custom registry support for GraalVM's mise-java API - Adoptium remains the default registry for backwards compatibility Package names: - New explicit: adoptium-jdk, adoptium-jre, oracle-graalvm-jdk, oracle-graalvm-jre - Legacy (map to Adoptium): java, java-jdk, java-jre Changes: - Created adoptium.ts and graalvm.ts vendor handlers - Enhanced common.ts with vendor detection and vendor-specific system mappings - Updated index.ts with routing layer and custom registry support - Merged test suites with comprehensive coverage for both vendors - Updated mise manager integration to use JavaVersionDatasource - Removed graalvm-version datasource directory All 65 datasource tests and 93 mise manager tests passing. * fix * test(datasource): add coverage for non-HttpError paths in java-version * fix(datasource): remove dead code and add coverage for java-version Remove unreachable HttpError handling from _getReleases catch block since both getAdoptiumReleases and getGraalvmReleases handle HttpError internally. Add test for the graalvmRegistryUrl fallback when registryUrl is undefined. * fix(datasource): address review comments for GraalVM datasource - Remove unused 'datasource-graalvm-version' cache namespace - Convert MiseJavaRelease interface to Zod schema and derive type from it - Use http.getJson() with the Zod schema in getGraalvmReleases instead of getJsonUnchecked, letting the schema handle invalid/empty responses - Update getGraalvmReleases test mock to use getJson * docs: remove unused datasource-graalvm-version from cacheTtlOverride docs * fix(datasource): preserve Adoptium config typing * fix(datasource): harden GraalVM release parsing * fix(datasource): address GraalVM review feedback * test: cover GraalVM mise package mapping * test(datasource): cover default GraalVM registry fallback * test(datasource): cover legacy registry resolution * test(datasource): type legacy datasource mocks * fix(datasource): harden GraalVM defaults and responses * refactor(datasource): use function-only registry accessors * test(datasource): cover registry accessor functions * test: restore coverage exclusions * chore: retrigger CI checks
Renovate can update mise configuration files.
Supported configuration files
Renovate supports all standard mise configuration file patterns:
mise.toml,.mise.tomlmise/config.toml,.mise/config.toml.config/mise.toml,.config/mise/config.toml,.config/mise/mise.toml.rtx.toml(legacy)- Environment-specific variants (e.g.,
mise.production.toml,.mise.dev.toml) - Local variants (e.g.,
mise.local.toml,.mise.local.toml)
Supported tool locations
Renovate supports top level tools and tasks.*.tools keys.
Lock file support
Renovate supports mise lock files (mise.lock).
When a lock file is present:
-
Dependencies will have their
lockedVersionextracted from the lock file -
Renovate can update lock files when dependencies change
-
Fuzzy selectors such as
latest,lts,25,25.1, andtemurin-25are resolved against their locked version and updated inmise.lockonly -
latestremains unbounded; partial selectors remain restricted to their major/minor range;ltsis supported for the core Node.js and Java tools -
Concrete versions such as
25.0.3retain Renovate's normal source-file update behavior -
To keep concrete versions pinned, set
updatePinnedDependenciestofalsein themisemanager configuration{ "mise": { "updatePinnedDependencies": false } } -
Lock file maintenance is supported via the
lockFileMaintenanceoption. When themiseversion Renovate runs supports it (see safe mode for how the version is detected), maintenance runsmise lock --bump, which advances fuzzy selectors (e.g.node = "22") to the latest matching version rather than only refreshing existing locked versions.
Renovate recognizes environment-specific lock files:
mise.lock- default lock filemise.local.lock- local configuration lock file, typically ignored alongsidemise.local.tomlmise.{env}.lock- environment-specific lock files (e.g.,mise.production.lock)mise.{env}.local.lock- environment-specific local lock files, typically ignored alongsidemise.{env}.local.toml
For more information about mise lock files, see the mise lock file documentation.
Trust model for lock file updates
Running mise lock can execute repository-defined behavior, so Renovate treats mise lockfile refreshes as an unsafe execution.
Self-hosted administrators must explicitly allow this path by including mise in the global allowedUnsafeExecutions setting.
Because mise lock can execute repository-defined scripts, Renovate treats lockfile refreshes as an unsafe execution and attempts to run mise in safe mode.
If mise does not support safe mode or version detection fails, Renovate blocks all mise operations.
Allowing Unsafe Executions
Self-hosted administrators can permit these operations by adding "mise" to the global allowedUnsafeExecutions configuration.
Once allowed, Renovate runs mise trust before mise lock when a mise.lock file is present. This exposes the trust step in execution logs and defers trust rules to mise.
In particular:
- an existing
mise.lockis required - self-hosted administrators decide whether this unsafe execution is acceptable for their environment
Renovate only updates primary versions
Renovate's mise manager is designed to automatically update the first (primary) version listed for each tool in the mise.toml file.
Secondary or fallback versions require manual updates.
Example
Given a mise.toml entry like:
[tools]
erlang = ["23.3", "22.0"]
Renovate will update "23.3" (the primary version) but will not touch "22.0" (the fallback version).
The same applies when the array items are inline tables:
[tools]
rust = [
{ version = "1.98.1", components = "clippy,rustfmt" },
{ version = "nightly-2026-07-12", profile = "minimal" },
]
Renovate will update "1.98.1" and read backend options such as version_prefix or tag_regex from that first item only.
Why can Renovate only update primary versions?
To maintain consistency and reliability, Renovate opts to only manage the first listed version.
- Fallback versions can often be older versions of a tool that are known to work and are there as a backup.
This follows the same workflow that Renovate's asdf manager uses.
Short names support
Renovate uses the mise registry to resolve tool short names to their appropriate datasource.
Where possible, Renovate will automagically support tools from the mise registry (via mise registry --json).
This means that any tool in the mise registry that has a supported backend (e.g. aqua, github, cargo) should be automatically supported by Renovate.
Adding new tool support
If a tool you need is not yet in the mise registry, add it upstream to mise. Once Renovate syncs its registry data, the tool will be supported automatically, as long as it is in a backend that Renovate supports.
For tools that need a custom datasource mapping (e.g. core tools like node, python), you can create a PR to extend Renovate's mise manager directly.
If you want to add support for other tools' short names to mise, you can create a PR to extend Renovate's asdf manager, which indirectly helps Renovate's mise manager as well.
Even if the tool does not use the asdf backend in the registry, the short names added to the asdf manager will still be used in the mise manager.
This may no longer be necessary now we automagically add support via the tools that the mise registry advertises.
Backends support
Renovate's mise manager supports the following backends:
Limitations
Renovate's mise manager does not support the following tool syntax:
-
asdfandvfoxplugins e.g.asdf:mise-plugins/asdf-yarnorvfox:version-fox/vfox-elixirShort names with backends likeasdf:yarnorvfox:elixirare supported if the short names (yarn,elixir) are supported. -
aquapackages withhttppackage type. However if the short name usingaquabackend is supported by Renovate, it will be updated. e.g.aqua:helm/helmis not supported, buthelmoraqua:helmis supported. -
aquapackages withversion_filter. We don't read the aqua registry itself, so we can't support this feature. If some packages usingversion_filterlikeaqua:biomejs/biomeare not updated or updated incorrectly, setextractVersionin the Renovate config manually like below.{ "packageRules": [ { "matchDepNames": ["aqua:biomejs/biome"], "extractVersion": "cli/(?<version>.+)" } ] } -
Some of
ubibackend tools withtag_regexoption. Thetag_regexoption is used asextractVersion, but the regex engines are not the same between mise and Renovate. If the version is not updated or updated incorrectly, overrideextractVersionmanually in the Renovate config. -
Some of
githubbackend tools withversion_prefixoption. Theversion_prefixoption is converted toextractVersionby escaping special regex characters. If the version is not updated or updated incorrectly, overrideextractVersionmanually in the Renovate config. -
Renovate will prefer the
github:backend over other backends, if using the tool definition from the mise registry