Commit Graph

13 Commits

Author SHA1 Message Date
Pieter Willekens 141e136869 feat(manager/mise): support gitlab backend (#44116)
* feat(manager/mise): support gitlab backend

Maps the mise `gitlab` backend (e.g. `gitlab:gitlab-org/cli`) to the gitlab-releases datasource, mirroring the github backend including version_prefix support.

* refactor(manager/mise): use optional instead of Nullish for tool options

TOML has no null type, so MiseToolOptions values are only ever a string or absent. .optional() models that exactly; Nullish only adds value for sources that can emit explicit null.

* fix(manager/mise): use RegExp.escape in gitlab backend

Main switched `createGithubToolConfig` from the `escapeRegExp` util to
`RegExp.escape` and dropped the import, which left the newly added
`createGitlabToolConfig` referencing an undefined symbol after the merge.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>

---------

Co-authored-by: Michael Kriese <michael.kriese@mend.io>
Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
2026-09-11 10:04:37 +00:00
jdx 94f0219613 feat(manager/mise): run mise lock in safe mode without allowedUnsafeExecutions (#44749)
* feat(manager/mise): run mise lock in safe mode without allowedUnsafeExecutions

When `constraints.mise` pins a version that supports mise safe mode
(`MISE_SAFE=1`), run `mise lock` with safe mode enabled instead of
requiring `mise` in `allowedUnsafeExecutions`. Safe mode is a hard
boundary against project config executing code (templates exec/read_file,
_.source, hooks, tasks, asdf scripts, plugin installs are all refused),
so it — not the allowlist — protects the host.

The existing allowlisted path is unchanged: allowlisted repos run
`mise lock` exactly as before, without forcing safe mode, so configs
that legitimately execute code during locking keep working.

Safe mode also removes the need to pre-install node/npm/golang/ruby as
resolver tools, since npm version listing uses mise's built-in registry
HTTP client and go runs with GOTOOLCHAIN=local.

Refs: jdx/mise#11146 (safe mode), jdx/mise#11145 (lock --bump)

* fix: address oxlint and pin safe-mode min version to 2026.7.12

- logger.warn requires a static message with interpolated values in the
  metadata object (oxlint rule); move the version into metadata
- set MISE_SAFE_MODE_MIN_VERSION to 2026.7.12, the expected first release
  containing safe mode (merged after v2026.7.11)

* feat(manager/mise): use mise lock --bump for lock file maintenance

lockFileMaintenance means "update to the latest versions", but plain
`mise lock` only refreshes metadata for already-locked versions. Use
`mise lock --bump` so fuzzy selectors (e.g. node = "22") advance to the
latest matching version. `--bump` requires the same minimum mise version
as safe mode, so it is gated on the mise constraint and falls back to a
plain refresh otherwise.

Generalizes the version-gate helper (miseConstraintGuarantees) shared by
safe mode and --bump.

* refactor(manager/mise): detect mise version at runtime instead of via constraints

Determine safe-mode / --bump support by running `mise version` (which
does not load or execute project config) rather than requiring a pinned
`constraints.mise`. This works off whatever mise is actually installed,
so no extra configuration is needed.

The probe is skipped on the allowlisted, non-maintenance path, where the
version cannot change the outcome — keeping that hot path unchanged.

* feat(manager/mise): skip mise trust in safe mode

Safe mode now makes an untrusted config fully inert and no longer
requires trust to load it (jdx/mise#11151), so on the safe-mode path
`mise trust` is unnecessary and is skipped — `mise lock` runs with
`MISE_SAFE=1` alone. The allowlisted path is unchanged and still runs
`mise trust`.

* feat(manager/mise): confirm safe mode min version against v2026.7.12 release

MISE_SAFE=1 safe mode and `mise lock --bump` first shipped in mise
v2026.7.12 (released 2026-07-23), confirming the assumed
MISE_SAFE_MODE_MIN_VERSION. Resolve the pending-release TODO and align
the test version fixture with the real release date.

Validated end-to-end against the real v2026.7.12 binary: `mise version`
output matches the parser, `MISE_SAFE=1 mise lock` refreshes an untrusted
config without trust, `mise lock --bump` advances fuzzy selectors, and
project [env] is ignored under safe mode.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>

* test(manager/mise): cover mise version probe failure path

Add a test for the detectMiseVersion catch branch (exec throwing), so the
non-allowlisted path falls back to conservative behavior. Restores 100%
patch coverage for the mise manager.

* Update lib/modules/manager/mise/readme.md

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>

* Update lib/modules/manager/mise/readme.md

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>

* docs(mise): fix safe mode section link

---------

Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2026-07-27 06:26:22 +00:00
Gregor Zeitlinger 0338dd74ba fix(mise): require allowlisting for lock updates (#43606)
* fix(mise): trust Renovate repo checkout during lock file updates

* docs(mise): document trusted config paths for lock updates

* refactor(mise): sanitize config files for lock updates

* test(mise): cover sanitized lock update flow

* docs(mise): describe sanitized lock update flow

* test(mise): cover sanitize failure paths

* fix(mise): clarify mirror read coverage

* fix(mise): allowlist mirrored settings

* test(mise): fix schema and integration specs

* fix(mise): trust only sanitized mirror workspace

* test(mise): fix mirrored cwd type narrowing

* test(mise): focus coverage on sanitized mirror flow

* test(mise): cover recursive settings schema

* fix(mise): ignore misreported lcov branch

* test(mise): remove redundant integration gate

* test(mise): drop local integration spec

* fix(mise): gate lock updates as unsafe execution

* fix(mise): restore settings schema typing

* fix(mise): generalize unsafe execution to mise

Rename allowedUnsafeExecutions value miseLock -> mise since any mise
command reading repo config can execute arbitrary code, not just
mise lock. Drop unused smol-toml dependency left over from the
abandoned config-sanitize approach.

Addresses PR review feedback.

* fix(mise): drop unused settings schema parsing

Nothing reads MiseFile.settings — the lock-update flow gates on
allowedUnsafeExecutions and relies on CI=true auto-trust, not config
sanitization. Remove the dead schema + tests per review.

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>

* fix(mise): trust repo config via trusted paths

* fix(mise): explicitly trust config before lock

---------

Signed-off-by: Gregor Zeitlinger <gregor.zeitlinger@grafana.com>
2026-06-03 16:17:46 +00:00
Jacob Asper da3e77cb9d feat(mise): extract task tools (#43721)
* feat(mise): extract task tools

* docs: update mise documentation to include task scoped tools
2026-06-02 13:34:54 +00:00
Gregor Zeitlinger a2b96944f9 feat(mise): add lock file support (#42591)
* feat(mise): add lock file support

- Add lockfile.ts with getLockFileName() for deriving lock file paths
- Add artifacts.ts with updateArtifacts() and updateLockedDependency()
- Add MiseLockFile Zod schema for parsing lock files
- Update extract.ts to be async and extract lockedVersion from lock files
- Export supportsLockFileMaintenance, lockFileNames, updateArtifacts, updateLockedDependency

* refactor(mise): remove redundant comments

Remove comments that simply restate what the code already clearly
communicates. Keep valuable comments that explain non-obvious behavior
(e.g., why temporary errors are rethrown) and move helpful examples
into JSDoc comments.

* fix(mise): improve lock file version lookup and add tests

- Fix lock file key lookup for non-registry tools (aqua:, ubi:, etc.)
  Registry tools use short names (node), non-registry use full names
  (aqua:cli/cli). New getLockedVersion() tries both patterns.

- Add injection prevention test for shell quoting
- Add update-failed test for error handling
- Add comprehensive tests for getLockedVersion()
- Add null check for depName in updateLockedDependency
- Add JSDoc to updateArtifacts and extractPackageFile
- Add lock file support documentation to README
- Remove code duplication by consolidating into lockfile.ts

* fix(mise): pass --local flag and MISE_ENV for env/local config files

When updating mise.local.toml, `mise lock` updates mise.lock, not
mise.local.lock. Add --local flag to target the correct lock file.

For env-specific configs (mise.test.toml), set MISE_ENV=test so mise
reads and locks the correct configuration.

Extracted getConfigType() from getLockFileName() to share the parsing
logic between lock file name derivation and command flag generation.

Builds on #42099 by altendky.

* test(mise): cover tool absent from lock file

* refactor(mise): remove dead branches in extractPackageFile

tools is required by MiseFile schema so if(tools) is always true.
depName is always set by createDependency so if(dep.depName) is always true.

Add test for tool absent from lock file to cover the lockedVersion
assignment branch.

* fix(mise): address review feedback on lock file support

* fix(mise): remove unsupported tool constraint

* fix(mise): add containerbase tool definition

* fix(mise): add typed exec constraint support

* fix(config): restore requireConfig typing

* test(mise): await registry extraction cases

* Update lib/modules/manager/mise/artifacts.ts

Co-authored-by: Michael Kriese <michael.kriese@gmx.de>

* fix: revert unrelated types cleanup

* fix: drop missing VersioningName import

* fix(mise): use npm versioning string after import removal

* test(mise): set binarySource=global in artifacts spec

GlobalConfig.get now returns defaults; without explicit binarySource the
test fell into containerbase dynamic install and tried to resolve the
mise version via the github-releases datasource, causing missing HTTP
mock errors. Force binarySource=global so the spec only exercises the
mocked exec path.

---------

Co-authored-by: Kyle Altendorf <sda@fstab.net>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
2026-05-19 15:23:23 +00:00
Jamie Tanna a462e4ec3b refactor(docs): don't use an end for autogenerated docs (#43242)
* refactor(docs): don't use an `end` for autogenerated docs

As part of #42910, we wanted to avoid needing a "begin" and "end" to
each of our autogenerated docs replacements.

While looking into it, we're not actually using the "end" for anything,
so we can instead refactor this to be a single-line replacement.

To simplify the code and docs, we can remove this. At the point we need
this again, we can re-add the functionality.

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>

* fixup! Merge remote-tracking branch 'origin/HEAD' into chore/no-replaceStop

---------

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>
2026-05-13 15:49:00 +00:00
Jamie Tanna 2bd478fff4 feat(mise): automagically support all tools through Mise Registry (#42783)
* feat(mise): automagically support all tools through Mise Registry

As noted in #42250, we should try and auto-support tools from Mise where
possible.

Similar to other areas of the codebase, we should use the "static data"
pattern, and periodically sync the `mise registry --json` output with
`lib/data/mise-registry.json`, and then auto-detect the tools that we
support through the known backends the tools support.

This takes lower precedence than existing in-code tool definitions, so
we can still provide an "override" if we can support lookups or version
extraction more appropriately.

Because we now have many more tools we (mostly) support out-of-the-box,
we need to provide an improved documentation page, and:

- only link to tools we have an explicit tools URL for
- note where a backend may not be supported

To automate the updating of this data, we:

- make sure we have `mise` in GitHub Actions, before we run
- don't pin the `mise` version to make sure that we're always seeing the
  latest supported tools
- make sure the commits generated are now `feat(...)`, as they introduce
  functionality changes (in the case new tool(s) are supported)

This improves support from ~170 tool short names to just over 1000.

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>

* refactor: use Typescript

As we can now, we should.

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>

* refactor(tools/static-data): use Zod schemas for parsing

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>

* refactor(mise): use Zod for types

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>

* chore(mise): prefer the GitHub backend over other sources

As we generally prefer it as a project, we should automagically use that
when looking at a mise registry entry.

With help from GPT-4.1 to write the `sortBackend` function.

Co-authored-by: gpt-4.1 <jamie.tanna+github-copilot@mend.io>

* test: ignore else coverage

* docs(mise): preference of `github` backend

* docs(mise): auto-link autogenerated tools

* perf(mise): sort registry only once

* refactor(mise): transform when parsing

Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>

* refactor: use `execa`

* perf(mise): read the Mise registry once

* perf(mise): pre-transform

---------

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>
Co-authored-by: gpt-4.1 <jamie.tanna+github-copilot@mend.io>
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2026-04-28 08:56:09 +00:00
Gregory Oschwald 4b56523d14 feat(mise): add support for github backend (#40706)
* feat(mise): add support for github backend

* test(mise): remove redundant github backend test

* refactor(mise): flatten nested conditionals in github backend

* refactor(mise): only set extractVersion for custom version_prefix

* refactor(mise): use escapeRegExp and simplify extractVersion spread
2026-02-13 21:58:21 +00:00
Róbert Papp 24ae07037c docs(mise): Fix invalid configuration example (#40792) 2026-01-29 16:20:20 +00:00
Sharon Yogev ace27f8675 fix(manager/mise): expand file patterns to match mise's config search (#40094)
* fix(manager/mise): expand file patterns to match mise's config search

Updates mise manager file patterns to align with the official mise configuration file search patterns. The patterns now include:
- Additional config locations (.config/mise/, .config/mise.toml)
- Legacy rtx.toml files
- Environment-specific configs (e.g., mise.production.toml)
- Local configs (e.g., mise.local.toml)

This ensures Renovate detects all mise configuration files that mise itself recognizes.

* CR

* Use brace expansions in the patterns

* Fix stupid typo
2026-01-23 13:14:10 +00:00
Risu 147fcded9c feat(manager): support mise backends (#33113)
Co-authored-by: Rhys Arkins <rhys@arkins.net>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
2025-05-25 06:20:46 +00:00
Risu bd181d5a8e fix(mise): add config filenames (#30283) 2024-07-21 12:43:17 +00:00
James Brookes 4a304b8e6d feat(manager): add mise package manager (#29950) 2024-07-08 14:27:31 +00:00