279 Commits

Author SHA1 Message Date
Jamie Tanna 4caf57e58d docs: introduce "buckets" and "audience" labels (#47020)
As part of ongoing efforts to understand how the Renovate project's many
backlogs of work come in, as well as providing a better means to
prioritise incoming requests, we can introduce some new label types, and
some cross-cutting labels too.

Co-authored-by: Claude Fable 5.1 <jamie.tanna+claude-code@mend.io>
2026-10-23 09:40:32 +00:00
Sebastian Poxhofer 0423ab2460 build: detect unused dependencies with knip (#47129)
Add knip, run it in lint and CI, and remove the dependencies it reports
as unused.
2026-10-17 09:10:20 +00:00
Michael Kriese d43f4ab663 chore(agents): give the stop hook its own coverage directory (#46586)
Co-authored-by: Claude Opus 5.5 <michael.kriese+claude-code@mend.io>
2026-10-01 06:59:46 +00:00
AJ Jordan ed787f0cc9 docs(help-us-help-you): drop outdated section (#46501)
This section is outdated since #32830.
2026-09-29 11:39:37 +00:00
Michael Kriese 054f262c45 docs: document code conventions and pnpm check as the verification (#46471)
* docs(agents): document code conventions and pnpm check as the verification

Co-Authored-By: Claude Opus 5.5 <michael.kriese+claude-code@mend.io>

* docs: move the code conventions into the best practices guide

Co-Authored-By: Claude Opus 5.5 <michael.kriese+claude-code@mend.io>
Co-Authored-By: Claude Sonnet 5 <michael.kriese+claude-code@mend.io>

---------

Co-authored-by: Claude Opus 5.5 <michael.kriese+claude-code@mend.io>
2026-09-25 12:51:01 +00:00
Michael Kriese ab0c7638ac fix(manager): add supportsNpmrc (#46422)
refactor(manager): add supportsNpmrc

Co-authored-by: Claude Fable 5.1 <michael.kriese+claude-code@mend.io>
2026-09-23 15:28:43 +00:00
Sebastian Poxhofer 4b4d14ec00 feat(manager): pass extracted constraints to updateArtifacts (#45826)
* feat(manager): pass extracted constraints to updateArtifacts

`extractedConstraints` were collected during extraction but only ever read
by `fetch.ts` for the lookup. At artifact time every manager had to derive
the same tool constraints a second time, and when the updated package file
no longer carried the constraint there was nothing to fall back to.

`generateBranchConfig()` now merges the `extractedConstraints` of all
upgrades of a branch onto the branch config, which reaches `updateArtifacts()`
through `patchConfigForArtifactsUpdate()`. `UpdateArtifactsConfig` declares
the field and documents what it contains.

The new `resolveToolConstraint()` helper implements the ladder once:
user `constraints` > an optional artifact-time derivation > the extracted
value. The derivation is ranked above the extracted value on purpose: it
reads the package files as the branch changed them, so poetry (python is an
updatable dependency there), composer, pipenv (`pipenv` can be a dev
package) and pep621 (`requires-python` is an updatable dependency) would
otherwise regress to a stale constraint. pipenv, pep621 uv/pdm, poetry and
composer are migrated to the helper and keep their derivation.

Behaviour change: these managers now use the extract-time constraint as a
last resort instead of running unconstrained, for example on lock file
maintenance where pipenv deletes `Pipfile.lock` before deriving.

`execute-post-upgrade-commands.ts` is unaffected: it reads
`upgrade.constraints` per upgrade, and the extracted values are kept in a
separate field rather than folded into `constraints`, so post-upgrade task
tool constraints still come from user config only.

Not migrated, because their constraints are never extracted, so the
fallback would be dead code: bundler (`ruby`/`bundler`), pixi (`pixi`),
pep621 uv (`required-version`) and npm's node ladder, whose last step
already reads `package.json` engines.

* refactor(manager): resolve tool constraints through resolveToolConstraint()

Every manager now obtains the constraint of a tool it runs through
`resolveToolConstraint()` instead of reading `config.constraints` itself, so
the precedence "user config, then a value derived from the updated files, then
the constraints collected during extraction" applies everywhere. The helper
treats an empty string as not set at every step and accepts the
`PostUpdateConfig` shape, whose `constraints` may be `null`.

Behaviour changes that go beyond the new fallback to extracted constraints:

- `mix` applies its hardcoded erlang default only after the extracted
  constraint, so an erlang version collected at extraction can win over it.
- `kustomize` decides `HELM_EXPERIMENTAL_OCI` from the fully resolved helm
  constraint; `generateHelmEnvs()` takes that value instead of the config.
- `npm` (yarn): an upgrade of yarn without a new value now consults the user
  constraint before deriving one from package.json or the lock file.
- The "Using <tool> constraint from config" debug lines in bundler, composer,
  copier and pip-compile are gone, as the helper is the only reader of the
  config now.

Helpers that read the config synchronously became async: bundler
`getBundlerConstraint()`, copier `getPythonVersionConstraint()` and
`getCopierVersionConstraint()`, pip-compile `get*VersionConstraint()` and
`getToolVersionConstraint()`, gomod `deriveGoToolchainConstraints()` and
`getUpdateImportPathCmds()`, mise `getMiseLockToolConstraints()`. composer
`getPhpConstraint()` is removed.

Each converted manager has a test showing the extracted constraint reaching
the executed tool, and, where a derive callback exists, that the derived value
still wins over it.

* refactor(linters): add prefer-resolve-tool-constraint rule

Reports member reads and destructuring of `constraints` and
`extractedConstraints` from a manager config in `lib/modules/manager/**`, so
that tool constraints are resolved through `resolveToolConstraint()` in
`lib/modules/manager/util.ts` only. Writes and the same properties on package
files, which extraction has to populate, are not reported. The helper itself
and spec files are exempt in `.oxlintrc.json`.

* refactor(manager): inline thin resolveToolConstraint wrappers

Drop copier/utils.ts and the pip-compile getPipToolsVersionConstraint /
getUvVersionConstraint helpers, which only forwarded to
resolveToolConstraint(). Callers now call it directly.

* docs(development): note lock file maintenance in tool constraints section

* refactor(manager): address review on tool constraint resolution

composer only runs extractConstraints() when a user constraint is missing,
via Lazy. UpdateArtifactsConfig no longer re-declares constraints and
extractedConstraints, which ToolConstraintsConfig already provides.
2026-09-14 11:09:07 +00:00
Sebastian Poxhofer b2d3b64c48 refactor(lint): enforce err key for errors in logger metadata (#45759)
* refactor(lint): enforce err key for errors in logger metadata

* refactor(lint): flag error message and stack strings in logger-err-key
2026-09-09 13:55:14 +00:00
renovate[bot] 9d74625d93 build(deps): update dependency prettier to v3.9.6 (main) (#45815)
* build(deps): update dependency prettier to v3.9.6

| datasource | package  | from  | to    |
| ---------- | -------- | ----- | ----- |
| npm        | prettier | 3.8.1 | 3.9.6 |

* chore: prettier fixes

---------

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@mend.io>
2026-09-09 13:50:03 +00:00
Sebastian Poxhofer 0ff377b688 test(linters): forbid file-based snapshot matchers (#45661)
* test(linters): forbid file-based snapshot matchers

* test(linters): drop inline snapshot recommendation

* test(linters): assert on relevant sections instead of full bodies
2026-09-04 10:28:56 +00:00
Jamie Tanna b62fe59594 fix: remove references to "bot" (#39305)
We dropped the "bot" from our terminology long ago, but it looks like
we've got some outdated docs + code that reference it.

We should remove this to keep things consistent.

A `fix`, as we're changing the commit author's name, and log lines.

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Copilot Autofix powered by AI <175728472+Copilot@users.noreply.github.com>
2026-09-02 08:56:20 +00:00
Sebastian Poxhofer a473e73b3e fix(linters): forbid inert counts in v8 coverage-ignore comments (#45287)
Adds a custom oxlint rule renovate/v8-ignore-no-count that flags the
count form '/* v8 ignore next <N> */'. The count is not honored by
vitest's ast-v8-to-istanbul hint parser, which captures only the
keyword (if/else/next/file); 'next' always exempts exactly the next
AST node. Trailing counts therefore suggest a line range that is never
applied and mislead readers.

The rule is autofixable (drops the count, preserving actual behavior)
and has been applied to all existing occurrences.
2026-08-22 11:25:31 +00:00
Jamie Tanna 8108714fc3 docs: validate JSONC and Javascript code blocks (#45063)
* docs: correct `onboardingConfig` example

As we'll be enforcing this as valid Global config in future commits.

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

* docs: correct `module.exports` syntax

As we'll be enforcing this as valid Global config in future commits.

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

* docs: completely skip `doc-fence-check` on code blocks only used for synatx highlighting

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

* docs: skip schema validation on non-config snippets

As we'll be enforcing this as valid Global config in future commits.

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

* chore(tools/doc-fence-check): validate JSONC and Javascript code blocks

To further ensure that our documentation is well-formed, we can validate
that JSONC and Javascript code blocks are well-formed syntactically, and
are valid Renovate configuration.

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

* chore(tools/doc-fence-check): allow opting out of syntax validation

On top of schema validation wanting to be disabled, we should also
support disabling the syntax validation, in the case that we're using
`json` code blocks for syntax highlighting, but they're not necessarily
well-formed JSON.

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

* docs: use `json` syntax highlighting

As `jsonc` doesn't seem to exist in Material for MkDocs.

As it's only for syntax highlighting, we need to opt out of validation.

* tsc

---------

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-08-04 13:18:08 +00:00
Jamie Tanna d396090231 ci: remove auto:pls-merge-main (#44964)
As it doesn't work, as commits from `github-actions[bot]` can't be used
to trigger CI, and we don't want to use a PAT (as it'll then shows as
an author on PRs).
2026-08-02 22:12:59 +00:00
Jamie Tanna 1fe48de57f docs(next-major): update links to Renovate 44 examples (#44945)
* docs(next-major): update links to Renovate 44 examples

After the inadvertent release of Renovate 44, we still need to follow
post-release actions, so we may as well keep these updated.

* docs(next-major): add reference to major version bump in docs
2026-07-29 17:32:43 +00:00
Copilot cc5bcaaf7f ci: add auto:pls-merge-main label workflow to merge main into a PR branch (#44599)
ci: Add `auto:pls-merge-main` workflow to merge main into PR branch

Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
Co-authored-by: Claude Sonnet 5 <jamie.tanna+github-copilot@mend.io>
Co-authored-by: copilot-swe-agent[bot] <198982749+Copilot@users.noreply.github.com>
2026-07-15 13:14:10 +00:00
Sebastian Poxhofer 171a591d84 feat(git): validate commit shas (#43988)
* feat(git): validate length commit shas

* test: adapt test mocks

* chore: update import paths

* feat(git): make the validation more strict and support repositories using sha256

* test: add fakeSha function for deterministic git commit shas in tests
2026-06-15 06:36:57 +00:00
Felipe Santos 1cc57d4152 docs: switch from pdm to uv for docs dependencies (#43917)
* build(docs): switch from pdm to uv for docs dependencies

* Add pdm back to gitignore

* Remove UV_VERSION

* Restore missing uv sync and set --locked
2026-06-11 05:13:21 +00:00
Sebastian Poxhofer b632d27cdd ci(agents): extend AGENTS.md and add Claude hooks (#43470)
* ci: add agent instructions and ClaudeCode hooks

* refactor: rename start-check and use schemas

* fix: remove redundant flow diagram

* refactor: add block utility

* docs: add reference to development documentation

* ci: add pretooluse hook

* test: remove unnecessary schema tests

* ci: add --all flag run fixer and linters in a single command

* ci: switch stop hook to `pnpm check --all`

* refactor: use simple git

* refactor: use zod/v4

* ci: prevent usages of pnpm vitest

* ci: add must read and code example for codeBlock

* fixup! simplegit by allowing user pagers and editors

* ci(agent hooks): run installs on worktree changes

* docs: shorten description

* chore: remove additional new line at the end

* explicitly fail if parsing fails

* fix: rename to kebabcase

* docs: reduce commands highlighted for local dev
2026-06-08 13:56:15 +00:00
Sebastian Poxhofer d23bef9637 refactor(schema-utils): add DeepNullish and use it for conda pypi (#43877)
* refactor(schema-utils): add DeepNullish and use it for conda pypi

* docs: add some docs for zod usage
2026-06-08 13:52:58 +00:00
Jamie Tanna 128f446e08 docs: ensure that config in documentation is error and warning free (#43727)
* docs: skip validation on JSON files that aren't Renovate config

As part of future changes, we'll enable validation on all JSON code
snippets to run Config Validation.

Before we do that, we should opt-out JSON snippets that aren't anything
related to Renovate config.

* docs: don't validate invalid Renovate config

As it's intentionally referencing a manager that doesn't exist.

* docs: don't validate partial Renovate config

As part of future changes, we'll enable validation on all JSON code
snippets to run Config Validation.

There are several code snippets we have that are part of a Renovate JSON,
but it doesn't make sense to convert these to a fully passing config, as
it'd reduce clarity on what we're trying to explain.

* docs: convert `baseBranchPatterns` snippets to code blocks

So we can validate them.

* docs: make sure that `datasourceTemplate` is set

So this passes validation.

* docs: clarify that `force` is global config

As it may not be clear, so we can make it extra clear with a `.js` file,
and note that it's global self-hosted config.

* docs: make sure `packageRules` is an array

* docs: `matchBaseBranches` needs `baseBranchPatterns` to be set

* docs: correct typo for `prBodyColumns`

* docs: mark global config snippets as such

As part of future changes, we'll use this to detect whether it's global
self-hosted configuration.

* docs: make sure `packageRules` wraps its children

* docs: add `allowedHeaders`

* docs: ignore deprecation warnings

As part of future changes, we'll use this to note that we don't care
about the validation warnings.

* docs: make sure `customManagers` wraps its children

* docs: make sure `fleet` wraps its children

* docs: validate JSON snippets are valid Renovate config

To make sure that we're always presenting valid JSON configuration to
our users, we can validate them as part of `check-fenced-code`.

As well as configuration errors we can warn for warnings, but allow code
blocks to opt-out, for instance when there's a known deprecation
affecting the code block.

We need to make sure to set `allowedEnv` for various code snippets that
reference environment variables.

* docs(development): document fenced code block checks

* docs: wrap `configType` and `ignoreConfigWarnings` in `{ ... }`

As otherwise we see build failures i.e.

    WARNING -  Doc file 'modules/platform/gitlab/index.md' contains a link
       '../../../self-hosted-configuration.md#autodiscoverrepoorder', but the doc
       'self-hosted-configuration.md' does not contain an anchor '#autodiscoverrepoorder'.

This needs to be wrapped alongside all other options like `title`.

* fixup! docs: wrap `configType` and `ignoreConfigWarnings` in `{ ... }`
2026-06-02 13:29:48 +00:00
Jamie Tanna 036da654c8 docs(development): npm deprecate old versions (#43675)
* docs(development): `npm deprecate` old versions

* fixup! docs(development): `npm deprecate` old versions
2026-06-01 08:31:26 +00:00
Sebastian Poxhofer bf6bfa8b39 ci(mise): add the PDM toolchain to Mise (#43650)
feat: add the PDM toolchain to Mise
2026-05-28 15:36:23 +00:00
Sebastian Poxhofer fcadf4c531 docs(dev): add code example of regex utility (#43624) 2026-05-27 11:33:29 +00:00
Jamie Tanna cbc655aaef docs(development): pnpm rebuild re2 (#43509)
As I hit it every so often, but can never remember how to solve it.
2026-05-22 07:51:15 +00:00
Jamie Tanna 368cde31a7 docs(development): when do we amend our LTS versions? (#43375)
* docs(development): when do we amend our LTS versions?

* fixup! docs(development): when do we amend our LTS versions?
2026-05-15 17:09:46 +00:00
Jamie Tanna e6d33a5cf1 docs(development): correct breaking change instructions (#43371) 2026-05-15 16:42:53 +00:00
RahulGautamSingh cb96dee10b docs(development): using mock & mockDeep (#43162)
* docs(best-practices): using mock & mockDeep

* Update docs/development/best-practices.md

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

---------

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2026-05-09 06:43:38 +00:00
Sebastian Poxhofer 3237a4c40a chore: move from volta.sh to mise (#40567)
* chore: move from volta.sh to mise

* !fixup chore: move from volta.sh to mise

* Update mise.toml

---------

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2026-04-20 21:50:36 +00:00
Sergei Zharinov 4b98fcd7b9 refactor(lint): Improve pnpm check (#42387)
* refactor(lint): Switch to Oxlint

* refactor(lint): Improve `pnpm check`

* async

* Fix lockfile

* Remove branch-based logic

* Fix parallelism
2026-04-08 07:00:45 +00:00
Sergei Zharinov a67a96eab5 refactor(lint): Switch to Oxlint (#42384)
* refactor(lint): Switch to Oxlint

* Update .oxlintrc.json

* Fix CI

---------

Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
2026-04-07 14:42:23 +00:00
Jamie Tanna 2d239d2cc1 docs: explicitly document depTypes each manager supports (#42142)
* docs: explicitly document `depTypes` each manager supports

A long-standing question we receive is "what `depTypes` can I match
against in my project".

Although the best recommendation we usually have is "check the
`packageFiles with updates" log line (as a very key log line for users),
we can go one step further and try and create a stronger contract.

To do this, I've used Claude Sonnet 4.6 to work through the codebase,
determine areas that a `depType` is set in a manager (statically or
dynamically) and generate a structured, typed, means to document how
they're used.

Through a few iterations of the process, and attempts at human-written
documentation, we've settled on:

- prioritising autogenerated documentation (for humans to read) to note
  what `depTypes` are known, and what they are
- `knownDepTypes`, to describe any known, static, `depType`s and their
  human-readable meaning
  - with the `prettyDepType`, if used
- `supportsDynamicDepTypesNote`, to add a Markdown note to the generated
  documentation

While here, we also:

- make sure to note this in the "adding a new package manager"
  documentation
- remove any hand-written references to `depTypes` in each manager's
  documentation page
- correct the Gleam `depTypes`
- make sure to use the `knownDepTypes`'s `prettyDepType` definition if
  we know it, for a given `depType`

The descriptions have been generated by Claude Sonnet, with some
human-written tweaks where appropriate.

[0]: https://github.com/renovatebot/renovate/discussions/15176

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

* fixup! docs: explicitly document `depTypes` each manager supports

* docs(manager): display `depTypes` documentation if none present

For consistency, and to make it more explicit.

---------

Co-authored-by: Claude Sonnet 4.6 <jamie.tanna+claude-code@mend.io>
2026-03-31 12:08:39 +00:00
saudademjj f2546b84a3 ci: add module label sync tooling (#42012)
* ci: add module label sync tooling

* ci: align module label sync cli

* ci: fix module label sync checks

* refactor: simplify module label sync cli

* fix: relax module label sync cli options type

* Address a couple of nitpicks

Co-authored-by: Jamie Tanna <github@jamietanna.co.uk>

* fixup! Address a couple of nitpicks

---------

Co-authored-by: Jamie Tanna <github@jamietanna.co.uk>
Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
2026-03-25 10:14:40 +00:00
Jamie Tanna 4e3c51328f docs(next-major): remember to close Milestone (#41248)
As we forgot with v43.
2026-02-17 14:31:55 +00:00
Jamie Tanna 192b634121 docs: update documentation for the new docs site publishing (#41091)
As we're now publishing from this repository.
2026-02-11 14:54:46 +00:00
Michael Kriese dcdd1c3bce feat!: require node v24 (#40675) 2026-01-29 11:47:11 +00:00
Jamie Tanna 0b42055fbe fix(json-schema): add a separate schema for Inherit Config (#40683)
In shared preset repositories, some users will use a mix of Inherit
Config and Repo Config options with the existing JSON Schema.

As part of Renovate 43, we're removing the ability for any global
options to be usable in Repo Config, which would also mean that it's now
either a case of "ignoring warnings in my editor" and "using Global
Config JSON Schema", which isn't a great option.

We can instead create a third JSON Schema, one which is focussed on
shared presets that can include Inherit Config options.

This makes it clear that the repo config's JSON Schema should not be
used for anything Inherit Config.
2026-01-26 15:44:54 +00:00
Sergei Zharinov 015ce80baa chore(tools): Add check script (#40185)
* base: pile foundation

* refactor(tools): Split check.ts into modular components

- Separate files for types, coverage, git, tui, execution, test-filter
- Fix signal handler timing (register at module load)
- Export getMatchingShards/getTestPatternsForShards from test-shards.ts
2026-01-23 01:12:10 +00:00
Jamie Tanna f7685921dc docs(major-release): add new JSON schema requirements (#40548)
As per #37994.
2026-01-20 21:13:55 +00:00
Sergei Zharinov fe1573fed9 chore(lint): add oxlint for faster syntax linting (#40236)
feat(lint): add oxlint for faster syntax linting

Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2026-01-13 14:43:43 +00:00
Michael Kriese 050ac8d23b chore: better code coverage (#39518) 2025-11-25 15:01:54 +00:00
Jamie Tanna 1b439b59aa chore(major-release): update post-release steps (#39157) 2025-11-19 19:50:29 +00:00
Jamie Tanna cd757d84fc docs(major-release): document "why", "when", "how" (#38963) 2025-11-06 15:44:18 +00:00
renovate[bot] 2e3da4d48c build(deps): update dependency node to v24 (main) (#38939)
| datasource      | package                     | from     | to       |
| --------------- | --------------------------- | -------- | -------- |
| github-releases | containerbase/node-prebuild | 22.21.1  | 24.11.0  |
| node-version    | node                        | v22.21.1 | v24.11.0 |

This also follows [0] for bumping in all the relevant places.

[0]: https://github.com/renovatebot/renovate/blob/HEAD/docs/development/bump-node-major.md

BREAKING CHANGE: Needs NodeJS v24.11.0 instead of v24.10.0. NodeJS v22 is still supported.
Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2025-11-06 09:08:25 +01:00
Sebastian Poxhofer ec3952aaae docs(dev/adding-package-manager): reference lockfiles field (#37686) 2025-08-25 07:18:28 +00:00
RahulGautamSingh 35910b8c87 feat: add support for second file config (#37033)
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
2025-08-11 09:14:55 +00:00
Patrick Schratz 6c2bd9d197 feat: add forgejo as a standalone platform (#37075)
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
2025-07-21 14:24:07 +00:00
RahulGautamSingh 1c6bcccc59 docs(development): add preset migration rules (#36713) 2025-06-27 05:57:58 +00:00
RahulGautamSingh 1ea20d5285 fix(docs): correct typo in internal links (#35710) 2025-05-04 15:43:55 +00:00
RahulGautamSingh bc7d0595d0 feat(config): managerFilePatterns (#34615)
Co-authored-by: Sebastian Poxhofer <secustor@users.noreply.github.com>
Co-authored-by: HonkingGoose <34918129+HonkingGoose@users.noreply.github.com>
Co-authored-by: Michael Kriese <michael.kriese@visualon.de>
Co-authored-by: Rhys Arkins <rhys@arkins.net>
2025-05-04 08:30:24 +00:00