Commit Graph

2314 Commits

Author SHA1 Message Date
RahulGautamSingh 23272951d6 feat(manager/gradle): support rich version constraints in the Groovy/Kotlin DSL (#46498)
* refactor(manager/gradle): add helper for matching `group:artifact` strings

As part of follow-up changes, we'll extract dependencies whose version
is declared separately from their coordinates, so we need a way to
validate a bare `group:artifact` notation. `isDependencyString` can't
be used, as it requires a version to be present.

This isn't currently used.

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

* feat(manager/gradle): support rich version constraints in the Groovy/Kotlin DSL

As noted in discussion #45481, Renovate doesn't extract dependencies
whose version comes from a Gradle rich version constraint[0], so a
`strictly` pin never receives updates - not even for a security fix:

```groovy
dependencies {
    implementation('org.slf4j:slf4j-api') {
        version {
            strictly '[1.7, 1.8['
        }
    }
}
```

The version catalog extractor already handles rich versions, so the
missing piece is the `version { ... }` block in the Groovy and Kotlin
DSLs.

Renovate can only rewrite a single version literal per dependency, so
we pick one constraint to update and record which one in
`managerData.versionConstraint`:

- `strictly` -> bump `strictly`
- `strictly` (single version) + `prefer` -> bump `strictly`, as `prefer`
  is inert when there's nothing to choose between
- `require`, optionally with `prefer` -> bump `require`, as `prefer` is
  only a hint and may not be what gets resolved
- `prefer` alone -> bump `prefer`
- `require` + `strictly` -> skip as `multiple-constraint-dep`, as Gradle
  applies `require()` before `strictly()`, so bumping only `strictly`
  would leave the `require` literal behind as stale text
- `strictly` range + `prefer` -> skip as `multiple-constraint-dep`, as
  `prefer` has to keep pointing inside the range and we can't move both
- anything with `reject`/`rejectAll` -> skip as `unsupported-version`,
  matching what the version catalog extractor already does

As `strictly` and `prefer` pin a version on purpose, updating them by
default would be surprising, so those deps are extracted with
`enabled: false` - meaning they only receive updates for vulnerability
alerts, which force through. Users who want regular updates can opt in
with a package rule matching `managerData.versionConstraint`, similar to
how `manager/gomod` handles `depType: indirect`. A `require` constraint
means the same thing as a plain version declaration, so it is updated
like any other dependency.

This doesn't unify behaviour with version catalogs, which extract a
single `require`/`prefer`/`strictly` and update it without disabling it.
Aligning them would take away updates users get today, so that's left as
a separate decision.

The `!!` shorthand (i.e. `foo:bar:1.7.25!!`) is untouched - it already
extracts as an opaque version string. Rich versions declared in the
Groovy/Kotlin `versionCatalogs { }` builder, as opposed to TOML, are
still dropped silently.

[0]: https://docs.gradle.org/current/userguide/dependency_versions.html#sec:rich-version-constraints

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

* fix(vulnerabilities): raise fixes for deps their manager disables by default

* test(workers/fetch): set packageName on disabled-dep fixtures

* test(manager/gradle): assert enabled is not set

---------

Co-authored-by: Jamie Tanna <jamie.tanna@mend.io>
Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
2026-10-05 13:24:06 +00:00
RahulGautamSingh 215433f311 fix(vulnerabilities): raise fixes for deps their manager disables by default (#46761) 2026-10-05 12:46:38 +00:00
renovate[bot] 2d9b01bb40 docs: update references to renovatebot/github-action to v46.3.7 (main) (#46749)
docs: update references to renovatebot/github-action to v46.3.7

| datasource  | package                   | from    | to      |
| ----------- | ------------------------- | ------- | ------- |
| github-tags | renovatebot/github-action | v46.3.6 | v46.3.7 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-05 03:23:08 +00:00
renovate[bot] 0e323220ec docs: update references to renovate/renovate (main) (#46745)
docs: update references to renovate/renovate

| datasource | package           | from      | to       |
| ---------- | ----------------- | --------- | -------- |
| docker     | renovate/renovate | 44.115.13 | 44.133.0 |
| docker     | renovate/renovate | 44.115    | 44.133   |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-05 01:23:55 +00:00
renovate[bot] f6b64f8fbc docs: update references to renovatebot/github-action to v46.3.6 (main) (#46744)
docs: update references to renovatebot/github-action to v46.3.6

| datasource  | package                   | from    | to      |
| ----------- | ------------------------- | ------- | ------- |
| github-tags | renovatebot/github-action | v46.3.5 | v46.3.6 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-10-05 00:24:20 +00:00
y.takahashi ff0e5eed24 feat(npm): support devEngines.runtime and devEngines.packageManager (#43369)
* feat(npm): extract devEngines.runtime and devEngines.packageManager

Adds extraction for the npm devEngines field
(https://docs.npmjs.com/cli/v11/configuring-npm/package-json#devengines)
covering both single-object and array forms. Uses dot-notated depTypes
("devEngines.runtime", "devEngines.packageManager") consistent with
"pnpm.overrides", and reuses the existing engines/packageManager
datasource resolution. Items without a version are skipped.

Refs #38067.

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

* feat(npm): update devEngines.runtime and devEngines.packageManager versions

Adds an update path for the new devEngines depTypes. Handles both the
single-object form and the array form (the array element is identified
via managerData.devEnginesIndex set at extraction time). Uses the same
anchored search-and-verify approach as the existing replaceAsString
(indexOf("devEngines") + dequal check), so unrelated occurrences of the
same version string elsewhere in the file are not touched.

Refs #38067.

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

* fix(npm): skip lockedVersion and apply @yarnpkg/cli for devEngines deps

Extends the locked-versions post-extract step to cover the new
devEngines depTypes:

- devEngines.runtime and devEngines.packageManager are added to the
  npm-lock skip list (mirrors the engines/packageManager/volta handling
  added in #38598)
- devEngines.packageManager with depName "yarn" gets the @yarnpkg/cli
  packageName fallback when the project is on Yarn 2+, matching the
  existing behavior for engines / packageManager

Refs #38067.

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

* fix(npm): harden devEngines handling against malformed input

- Register devEngines.runtime and devEngines.packageManager in
  knownDepTypes (matches the existing pnpm.overrides pattern)
- Guard against null/non-object array elements in devEngines.* during
  extraction so malformed JSON does not throw
- Use JSON.stringify when interpolating versions into the source search
  string, so any future versions containing JSON-escaped characters are
  matched correctly
- Add an extraction test for a mixed array containing a null item, a
  valid entry, and a version-less entry

Refs #38067.

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

* fix(npm): set hasPackageManager when devEngines.packageManager is an array

The previous hasPackageManager check used isNonEmptyObject which returns
false for arrays. Now that the array form of devEngines.packageManager
is actually extractable and updatable, the corepack post-update step
needs to be triggered for those users as well. Introduces a shared
hasDevEnginesPackageManager helper and uses it from both
extractPackageJson and extractPackageFile.

Refs #38067.

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

* fix(npm): require at least one non-empty array item for hasPackageManager

Align the array branch of hasDevEnginesPackageManager with the
single-object branch by requiring at least one non-empty object item.
Previously, an array containing only null/empty entries would set
hasPackageManager to true and trigger corepack post-update even though
no usable item exists. Add coverage for the empty-array and
only-invalid-items cases.

Refs #38067.

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

* test(npm): document hasPackageManager semantics for stray-key array items

Make the chosen semantic explicit: an array element with arbitrary keys
but no `name` (e.g. `[{ foo: 'bar' }]`) still sets hasPackageManager to
true, mirroring the pre-existing single-object behavior. The extract
step independently filters out items lacking `name`/`version`.

Refs #38067.

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

* test(npm): cover dequal rejection in devEngines array update

Adds a test where two devEngines.packageManager array items share the
same version string. The first source-level match belongs to the wrong
index, so the dequal verification rejects it and the loop continues to
the correct occurrence. This exercises the false branch of the dequal
check in updateDevEnginesDependency.

Refs #38067.

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

* docs(node): list devEngines.runtime as a supported field for Node.js

The npm manager now updates the version inside devEngines.runtime in
package.json, so include it in the file-support list alongside engines
and volta.

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

* Apply the comment changes suggested in the code review

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

* test(npm): cover devEngines update error path instead of ignoring it

Remove the v8 ignore on the updateDevEnginesDependency catch and add a
test that reaches it with invalid JSON, matching how the main
updateDependency catch is covered.

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

* fix(npm): drop unnecessary spread fallback in devEngines managerData

Object spread ignores null/undefined, so the `?? {}` fallback is
redundant. Removing it satisfies the oxlint no-unnecessary-spread-fallback
rule that now runs in CI.

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

* refactor(npm): type devEnginesIndex on NpmManagerData

Declare devEnginesIndex on NpmManagerData so the value no longer needs a
`as number | undefined` cast when reading it back during update.

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

* docs(node): document package manager version fields

List packageManager and devEngines.packageManager separately from the Node.js runtime file support entries.

Co-authored-by: Codex <noreply@openai.com>

* feat(npm): support Bun and Deno devEngines runtimes

* fix(npm): preserve Corepack hashes in devEngines

* test(npm): use partial helper for devEngines fixture

Co-authored-by: Codex <noreply@openai.com>

* fix(npm): warn on invalid devEngines update state

Co-authored-by: Codex <noreply@openai.com>

* fix(npm): include devEngines in extracted tool constraints

Co-authored-by: Codex <noreply@openai.com>

* fix(npm): prefer devEngines over volta for package manager versions

Co-authored-by: Codex <noreply@openai.com>

* fix(npm): update Yarn binaries for devEngines package manager upgrades

Co-authored-by: Codex <noreply@openai.com>

* fix(npm): recognize devEngines package managers for Yarn catalogs

Co-authored-by: Codex <noreply@openai.com>

* fix(npm): exclude devEngines from Yarn locked versions

Co-authored-by: Codex <noreply@openai.com>

* refactor(npm): reuse Bun extraction for devEngines runtime

Co-authored-by: Codex <noreply@openai.com>

* test(npm): cover Yarn devEngines manifest preservation and grouped updates

Co-authored-by: Codex <noreply@openai.com>

* refactor(npm): pass packageJsonResult directly to hasDevEnginesPackageManager

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

* test(npm): simplify malformed devEngines fixture

Co-authored-by: Codex <noreply@openai.com>

---------

Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Co-authored-by: Michael Kriese <michael.kriese@gmx.de>
Co-authored-by: Codex <noreply@openai.com>
2026-10-01 11:25:52 +00:00
Jamie Tanna af055eba22 feat(config): allow self-hosted admins to bypass allowedHeaders (#45654)
In a similar way to how `allowedEnv` works, we should allow a
self-hosted admin to specify whichever headers they wish in their
`hostRules` - whether in their global config, a `repositories[]` entry,
or a preset a `repositories[]` entry extends.

Previously, this would require a self-hosted admin to add any header
they wished to set to `allowedHeaders`, which would also allow any of
their users' repositories to set that same header.

We can align this behaviour with `allowedEnv`, which makes sure that
the admin's own `headers` are always applied regardless of
`allowedHeaders`, while a repository's own `hostRules` - and those of
any preset it extends - remain constrained by it as before.

We make sure to use an explicit `[]` to make it clear when there are no
headers to allow, opposed to using something less clear like
`undefined`.

We do not currently allow an `extends` (without a `repositories[]`
entry) to bypass, and they'll be followed-up with in #45670.

Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
2026-09-29 10:37:15 +00:00
Luca Bruno c5d1b432d1 feat(datasource/crate): rename allowCustomCrateGitRegistries and relax sparse registries cloning (#45632)
* chore(options): rename allowCustomCrateGitRegistries entry

* feat(datasource/crate): relax sparse registries cloning
2026-09-29 07:52:10 +00:00
renovate[bot] 16e415fee8 docs: update references to renovatebot/github-action to v46.3.5 (main) (#46510)
docs: update references to renovatebot/github-action to v46.3.5

| datasource  | package                   | from    | to      |
| ----------- | ------------------------- | ------- | ------- |
| github-tags | renovatebot/github-action | v46.3.4 | v46.3.5 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-28 03:28:43 +00:00
renovate[bot] 47b471169b docs: update references to renovate/renovate (main) (#46508)
docs: update references to renovate/renovate

| datasource | package           | from     | to        |
| ---------- | ----------------- | -------- | --------- |
| docker     | renovate/renovate | 44.104.2 | 44.115.13 |
| docker     | renovate/renovate | 44.104   | 44.115    |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-28 01:31:20 +00:00
renovate[bot] 6068f15434 docs: update references to prom/prometheus to v3.15.0 (main) (#46507)
docs: update references to prom/prometheus to v3.15.0

| datasource | package         | from    | to      |
| ---------- | --------------- | ------- | ------- |
| docker     | prom/prometheus | v3.14.0 | v3.15.0 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-28 01:24:37 +00:00
renovate[bot] 78458cf25a docs: update references to renovatebot/github-action to v46.3.4 (main) (#46505)
docs: update references to renovatebot/github-action to v46.3.4

| datasource  | package                   | from    | to      |
| ----------- | ------------------------- | ------- | ------- |
| github-tags | renovatebot/github-action | v46.3.1 | v46.3.4 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-28 01:20:46 +00:00
Sebastian Poxhofer 18eb38c2bd feat(config): add matchIsBreaking package rule option (#46449)
Exposes the isBreaking flag that lookup already computes per upgrade as a
native packageRules matcher, so it can be combined with matchJsonata
selectors from extended presets instead of being inlined into them.
2026-09-24 20:09:29 +00:00
Sebastian Poxhofer df021966a5 feat(jsonata): add $matchRegexOrGlob custom function (#46448)
Exposes Renovate's string pattern matching (globs, regex, negation) to
matchJsonata expressions, so a single expression can OR conditions on
different fields such as packageName and registryUrls.
2026-09-24 20:03:35 +00:00
Jamie Tanna f55b60a18b docs: add dark mode support for the call-to-action banner (#46423)
To make sure this is more readable in our dark mode theme, we can add a
dark variant, which is automagically shown.

As it's an `<object>` not an `<img>`, we need to add a specific CSS
rule, as we can't use Material for MkDocs' `img#only-light` or
`img#only-dark`.

This also requires that we set `color-scheme: and `background-color:
transparent` to ensure that it blends into the background, otherwise we
see white edges in dark mode.

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-23 15:24:25 +00:00
Jamie Tanna 854083c0ea docs: move call-to-action lower (#46410)
As my original placement wasn't ideal.
2026-09-23 08:38:35 +00:00
Jamie Tanna fd2c455be8 docs: align colour scheme with Mend colours (#46316)
To make sure that we're more consistent in our colour branding with
Mend Renovate's colour scheme, we can override our theme to use the
correct blues.

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-22 12:06:37 +00:00
Darren Dooley 1762e24624 chore(docs): fix broken image rendering (#45893)
* docs: fix images rendered as code inside figure blocks

The docs build forces tab_length 2, so content indented by two spaces
inside a <figure markdown> block is parsed as an indented code block.
Six images were printed as literal markdown instead of being rendered.

De-indent the six figure blocks and add a test that fails if indented
content reappears inside one.

* chore: add markdownlint rule for indented figure content

Replace the vitest check with a markdownlint custom rule. It runs with
pnpm markdown-lint, reports file and line like any other markdown
violation, and uses the micromark tokens so a <figure markdown> block
inside a fenced code sample is not flagged.

* Revert "chore: add markdownlint rule for indented figure content"

This reverts commit b853804501.

* chore: remove test
2026-09-21 09:01:54 +00:00
renovate[bot] a54a640e4b docs: update references to renovatebot/github-action to v46.3.1 (main) (#46356)
docs: update references to renovatebot/github-action to v46.3.1

| datasource  | package                   | from    | to      |
| ----------- | ------------------------- | ------- | ------- |
| github-tags | renovatebot/github-action | v46.2.5 | v46.3.1 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-21 03:23:09 +00:00
renovate[bot] e39277000e docs: update references to renovate/renovate to v44.104.2 (main) (#46355)
docs: update references to renovate/renovate to v44.104.2

| datasource | package           | from     | to       |
| ---------- | ----------------- | -------- | -------- |
| docker     | renovate/renovate | 44.104.1 | 44.104.2 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-21 03:23:06 +00:00
renovate[bot] 6de693abc6 docs: update references to renovate/renovate (main) (#46354)
docs: update references to renovate/renovate

| datasource | package           | from    | to       |
| ---------- | ----------------- | ------- | -------- |
| docker     | renovate/renovate | 44.83.1 | 44.104.1 |
| docker     | renovate/renovate | 44.83   | 44.104   |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-21 02:25:41 +00:00
renovate[bot] e3881d9fb9 docs: update references to otel/opentelemetry-collector-contrib to v0.161.0 (main) (#46353)
docs: update references to otel/opentelemetry-collector-contrib to v0.161.0

| datasource | package                              | from    | to      |
| ---------- | ------------------------------------ | ------- | ------- |
| docker     | otel/opentelemetry-collector-contrib | 0.160.0 | 0.161.0 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-21 02:23:32 +00:00
renovate[bot] 6e60136066 docs: update references to jaegertracing/jaeger to v2.21.0 (main) (#46352)
docs: update references to jaegertracing/jaeger to v2.21.0

| datasource | package              | from   | to     |
| ---------- | -------------------- | ------ | ------ |
| docker     | jaegertracing/jaeger | 2.20.0 | 2.21.0 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-21 01:25:41 +00:00
Jamie Tanna 8dc06640a7 feat(workers/repository): allow users to bypass registryUrl when unknown-registry (#46323)
As part of follow-up changes in #45706, we want the `apk` / `apt`
parsing in the `dockerfile` manager to attempt to determine which
distribution - and therefore registry - to look up dependencies for.

When there is an image that we don't know how to resolve, we want to
treat them as a `skipReason: unknown-registry`.

However, this doesn't provide any way for the user to say "I know which
registry you should look up updates for".

To handle this, we can treat `unknown-registry` differently, allowing it
to un-skip itself when there are any `registryUrls`s defined.

This allows for general usage, where if Renovate doesn't know how to
interact with a given registry, but a user does, then the user can
override the registry with a `packageRules` entry.

We continue skipping a dependency when `unknown-registry` is set
alongside a dependency's `registryUrl`.

We add this un-skipping logic into `applyPackageRules()`, but need to
make sure that we also gate it inside `lookup()`, so a dependency that's
passed through `applyPackageRules()` is re-checked to ensure that the
check is enforced.

Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
2026-09-18 15:59:57 +00:00
Jamie Tanna 4d2b992f16 docs(self-hosted-configuration): autogenerate inheritConfig options (#46320)
As noted in #45839, we're currently out-of-sync with the current list,
so should get this automagically updated.

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-18 12:41:46 +00:00
Jamie Tanna cc6f4145dd docs: update call-to-action banner (#46303)
With help from Claude to correctly render it as an SVG (that can have
URLs that are clickable) and render it so it's more responsive.

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-17 20:25:08 +00:00
Sebastian Poxhofer 4215f35059 feat(config): add minimumReleaseAgeBuffer option (#45577)
* feat(config): add minimumReleaseAgeBuffer option

Adds a new config option which extends the time Renovate waits before
suggesting an update by a percentage of minimumReleaseAge. This gives
companion packages that are published after the main package (e.g.
platform-specific binaries) time to pass the package manager's own
release age cooldown, avoiding lock file artifact errors.

* feat(config): make minimumReleaseAgeBuffer a duration with 10 minutes default

* feat(config): raise minimumReleaseAgeBuffer default to 30 minutes
2026-09-17 07:08:00 +00:00
Maxime Brunet a22f8f0a09 fix(platform/github): attempt direct merge before falling back to the merge queue (#46271)
fix(github): attempt direct merge before falling back to the merge queue

PR automerge against a merge-queue-protected base branch could no longer
merge directly when the authenticated actor is allowed to bypass the
queue: mergePr() enqueues the PR unconditionally once the base branch has
a merge queue, and the enqueuePullRequest mutation evaluates queue-entry
requirements (e.g. required code-owner review) without honoring ruleset
bypass, leaving bypass-enabled installs unable to merge at all.

Attempt the direct REST merge first and enqueue only when that merge is
refused, mirroring the try-first design #45724 shipped for branch
automerge. Repositories without a bypass actor pay one refused REST merge
call per automerge attempt before the queue fallback, and up to four when
an unrecognized refusal message triggers method guessing.

Docs: describe the direct-merge-first behavior in the GitHub merge queue
section of the automerge documentation.
2026-09-17 07:07:56 +00:00
Jamie Tanna 0f5e9af2a3 docs(mend-hosted): clarify Enterprises can change inheritConfig* (#46261) 2026-09-16 15:28:49 +00:00
Jamie Tanna 98e4bb5713 docs(mend-hosted): move environment variables to their own page (#46260)
To allow more easily linking to them.
2026-09-16 15:28:48 +00:00
Menco Bolt 3abfaacabc feat(util/template): Add uppercase helper (#46205)
Add uppercase to template

Co-authored-by: Menco Bolt <133383+macmenco@users.noreply.github.com>
2026-09-16 13:27:56 +00:00
Jamie Tanna fb77d30477 docs(self-hosted-configuration): correct reference to cacheTtlOverride namespaces (#45960) 2026-09-14 14:39:59 +00:00
RahulGautamSingh 405c32b88e docs: clarify extractVersion and add artifactory example (#45926) 2026-09-14 06:44:03 +00:00
renovate[bot] 4a9d77d29a docs: update references to renovate/renovate (main) (#45925)
docs: update references to renovate/renovate

| datasource | package           | from    | to      |
| ---------- | ----------------- | ------- | ------- |
| docker     | renovate/renovate | 44.52.1 | 44.83.1 |
| docker     | renovate/renovate | 44.52   | 44.83   |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-14 03:28:43 +00:00
renovate[bot] dca8aca4b6 docs: update references to otel/opentelemetry-collector-contrib to v0.160.0 (main) (#45924)
docs: update references to otel/opentelemetry-collector-contrib to v0.160.0

| datasource | package                              | from    | to      |
| ---------- | ------------------------------------ | ------- | ------- |
| docker     | otel/opentelemetry-collector-contrib | 0.159.0 | 0.160.0 |

Co-authored-by: renovate[bot] <29139614+renovate[bot]@users.noreply.github.com>
2026-09-14 03:24:13 +00:00
José M. Requena Plens 29033c3767 docs(hostRules): replace the stale matchHost port warning (#45901)
The warning under the port example dates from #22007 (May 2023), when
a matchHost with a port but no scheme was parsed into an empty host and
the rule applied to every host. Since #29487 (37.421.0) massageHostUrl
prepends https:// to any matchHost that has no scheme and contains a
port or a path, so that warning no longer describes the behavior and
contradicts the note under hostRules.matchHost, which only mentions
paths.

Replace the warning with a note that states the current behavior for
ports and paths, and mention ports in the hostRules.matchHost note.
2026-09-12 11:22:20 +00:00
Jamie Tanna 238e15a498 feat(config): add inheritConfigTrusted to trust inherited-config hostRules
Renovate deployments that are deployed across multiple organisations may
take advantage of Inherited Config as a means to decentralise some
decisions and/or preferences that their organisations would like to use
for some self-hosted configuration.

Similarly, the decision of which hosts to allowlist may be something
that a self-hosted administrator /may/ want to allow their organisation
admins to decide.

We can make this an opt-in capability to indicate that the self-hosted
administrator trusts the Inherited Config moreso, and allows someone who
can write to it the ability to allowlist access to internal hosts that
may not be intended.

If a self-hosted administrator sets `allowInternal: false`, this takes
precedence, allowing a "veto", and a self-hosted admin's `headers` are
still preferred, too.

It's not possible for Inherited Config to set grants for `extends`, as
config resolution has already occurred, so this still needs to be
performed at the self-hosted config level.

This trust is transitive: `hostRules` defined in presets the
inherited config `extends` are registered at the same inherited
tier once resolved, so this option must only be enabled when those
preset sources are trusted too.

Co-authored-by: Claude Fable 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
2026-09-10 14:52:01 +01:00
Jamie Tanna 29a7b9c5f5 fix(util/http): allow blocking requests to internal hosts
To harden Renovate from being able to access internal hosts, we can add
a level of enforcement on all outgoing requests.

We can split this into two types of traffic:

- where the response becomes configuration (i.e. `extends`)
- where the response does not become configuration (i.e.
  `customDatasources`)

To harden this, we enforce on every outbound HTTP request:

- check the resolved URL before anything, including cache lookups, can
  proceed
  - catching IP-literal hosts in every spelling the WHATWG URL parser normalizes
  - blocking known Cloud metadata IPs, too
- a `dnsLookup` wrapper validates every address a hostname resolves to,
  on every new connection, which also defeats DNS rebinding
- a `beforeRedirect` hook re-runs the URL check on each redirect
  target, with the new host getting its own grant lookup rather than
  inheriting the original host's verdict

We default this enforcement to `warn`, to not break existing deployments
and instead give them visibility into required configuration before a
future major version (major+1) enables `block` by default.

We'll also remove allow in a future major version (major+2), to give
time for admins to migrate over.

When a request is blocked, this degrades like an unreachable registry,
so a Renovate run isn't aborted by a blocked request.

As part of this, we can also provide a worked example of the different
cases that do/do not need allowing via `hostRules`.

Requests through an admin-configured proxy resolve DNS at the proxy, so
`dnsLookup` never runs for them, so we can resolve the hostname locally
and validate every address before the request instead.

This doesn't catch everything, especially as the proxy may resolve the
name to a different result, and if we can't resolve the name - possible
in locked-down corporate environments - we fail open.

Child processes aren't currently able to route traffic through
Renovate's HTTP layer, so are unrestricted.

Co-authored-by: Claude Fable 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-10 14:52:01 +01:00
Jamie Tanna 09d2da2f1b feat(host-rules): add allowInternal
As part of follow-up changes, we're looking to tighten the way that
Renovate handles outgoing HTTP traffic.

Before we do this, we can introduce a new config option,
`hostRules[].allowInternal`, that allows a self-hosted administrator to
mark an internal host as "trusted" for access.

This wires in the new global-only config option, `allowInternal`, which
implies a new internal field `internalHostGrant`.

We'll add full documentation in a future commit, when the full
enforcement is in place, as there are some wider changes to enforce it
fully.

Co-authored-by: Claude Fable 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
2026-09-10 14:52:01 +01:00
Jamie Tanna 7d3fe44060 fix(util/host-rules): resolve enabled per trust tier
As part of follow-up changes, we're looking to tighten the way that
Renovate handles outgoing HTTP traffic, and a self-hosted administrator
disabling a host needs to be something a repository cannot undo.

In a similar change to
4732da7d2b, we can resolve `enabled` per
trust tier, so that a repository or preset rule can no longer re-enable
- or disable - a host the administrator's own rules set, which was
previously possible with a longer `matchHost`.

Within a tier nothing changes: the most specific rule still wins, so a
repository disabling a host of its own keeps working, as does an
administrator masking their own broad rule with a narrower one.

This is a behaviour change for repository config that previously relied
on overriding an admin rule's `enabled`.

Co-authored-by: Claude Fable 5 <jamie.tanna+claude-code@mend.io>
Co-authored-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>
2026-09-10 14:52:01 +01:00
RahulGautamSingh 9cecb86eca feat(config): add experimental exitCodeForErrors option (#45752)
* feat(config): add experimental exitCodeForErrors option

* feat(config): give unknown-error its own exit code

* docs: restore exit codes 1 and 2 to the table
2026-09-10 11:07:26 +00:00
Sebastian Poxhofer 4573aa6ac8 feat(automerge): attempt branch automerge before falling back to a PR on merge queue rejection (#45724)
* feat(automerge): attempt branch automerge before falling back to a PR on merge queue rejection

* refactor(automerge): ask the platform instead of parsing merge queue rejection messages
2026-09-09 15:21:47 +00:00
Sebastian Poxhofer 5f91549447 feat(gitlab): merge MRs through merge trains via the platform merge queue API (#45722)
* feat(gitlab): merge MRs through merge trains via the platform merge queue API

* feat(gitlab): report MRs waiting on a merge train through isPrInMergeQueue

* test(gitlab): drop targetBranch from mergePr calls

* Apply suggestion from @secustor

* refactor(gitlab): validate the merge train car response with a Zod schema
2026-09-09 15:21:46 +00:00
Sebastian Poxhofer 7b25e97ba3 feat(github): add support for using merge queues without auto merge (#45721)
* feat(github): add experimental support for using merge queues without auto merge

* test(github): use vi.stubEnv for merge queue env flag

* fix(github): do not re-enqueue PRs already waiting in the merge queue

* refactor(github): reuse merge queue detection from #45252 for isBranchMergeQueueEnabled

* refactor(github): read the base branch from the PR instead of extending MergePRConfig

* feat(github): enable merge queue support without the RENOVATE_X_GITHUB_MERGE_QUEUE flag

* Apply suggestion from @secustor
2026-09-09 15:21:45 +00:00
Sebastian Poxhofer be13c9f5f7 feat(manager): share OCI Helm chart resolution across managers (#45760)
* feat(manager): share OCI Helm chart resolution across managers

Add getOciChartDep() to helmv3/oci.ts and use it in argocd, fleet, flux,
helmfile, helmsman, helmv3, kustomize, sveltos, terraform and vendir.

- set pinDigests: false for OCI charts in all of them
- apply registryAliases to OCI charts in argocd, helmfile and helmsman
- keep the registry port in terraform helm_release repositories
- skip fleet OCI charts without a version instead of using 'undefined'

* docs(manager/helmv3): correct the OCI chart pinDigests rationale

* refactor(manager/helmfile): drop redundant OCI repository url guard

The repository schema already requires url to be a string, so the falsy
branch could not be reached by parsed input and left the patch partially
covered.
2026-09-09 13:51:30 +00:00
Jamie Tanna f3a5286d85 docs: update GitLab security docs + announce Mend-hosted GitLab.com (#45420)
Mend's GitLab.com support has been around for a little bit, but we've
not explicitly documented it.

While we're doing this, we should make sure the outdated references to
GitLab security is updated in line with the current state of affairs.

With some additional research from Claude Opus 5, but with Claude Sonnet
5 driving the changes.

We can also make sure to clarify that folks may want to use Mend-hosted
against GitLab.com, and that there are security implications when
running Renovate on GitLab (more generally).


Researched-by: Claude Opus 5 <jamie.tanna+claude-code@mend.io>

Co-authored-by: Claude Sonnet 5 <jamie.tanna+claude-code@mend.io>
2026-09-08 17:41:09 +00:00
Robert 95517d534e docs: document assignAutomerge in automerge article (#44955)
This helps users find the option, if they are specifically trying to enforce reviews on PRs with activated automerge option.
2026-09-08 12:43:07 +00:00
Sebastian Poxhofer 599939d229 docs: add Renovate Config Debugger to community tools (#45743) 2026-09-07 10:21:13 +00:00
AJ Jordan 374f8f35ad docs(configuration-options): fix typo (#45734)
docs: fix typo
2026-09-07 09:26:42 +00:00
Jamie Tanna 0e932f3d66 docs(community-tools): remove duplicate trailing . (#45746) 2026-09-07 08:49:07 +00:00