renovate-mcp 1.3.2 → 1.4.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/data/managers.generated.d.ts +1 -1
- package/dist/data/managers.generated.js +2 -2
- package/dist/data/migrations.generated.d.ts +1 -1
- package/dist/data/migrations.generated.js +2 -2
- package/dist/data/presets.generated.d.ts +1 -1
- package/dist/data/presets.generated.js +94 -33
- package/dist/lib/inputLimits.d.ts +2 -0
- package/dist/lib/inputLimits.js +2 -0
- package/dist/lib/version.d.ts +1 -1
- package/dist/lib/version.js +1 -1
- package/dist/tools/dryRun.js +42 -3
- package/package.json +3 -3
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// AUTO-GENERATED by scripts/generate-managers.mjs from renovate@43.
|
|
1
|
+
// AUTO-GENERATED by scripts/generate-managers.mjs from renovate@43.259.2.
|
|
2
2
|
// Do not edit by hand. Run `npm run generate:managers` to refresh.
|
|
3
|
-
export const RENOVATE_VERSION = "43.
|
|
3
|
+
export const RENOVATE_VERSION = "43.259.2";
|
|
4
4
|
/**
|
|
5
5
|
* All manager names accepted by Renovate's `matchManagers` /
|
|
6
6
|
* `excludeManagers` fields. Includes both regular managers and custom
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// AUTO-GENERATED by scripts/generate-migrations.mjs from renovate@43.
|
|
1
|
+
// AUTO-GENERATED by scripts/generate-migrations.mjs from renovate@43.259.2.
|
|
2
2
|
// Do not edit by hand. Run `npm run generate:migrations` to refresh.
|
|
3
|
-
export const RENOVATE_VERSION = "43.
|
|
3
|
+
export const RENOVATE_VERSION = "43.259.2";
|
|
4
4
|
/**
|
|
5
5
|
* Deprecated config keys with their current replacement. Sourced from
|
|
6
6
|
* Renovate's `MigrationsService.renamedProperties` — the "RenamePropertyMigration"
|
|
@@ -3,6 +3,6 @@ export interface GeneratedPreset {
|
|
|
3
3
|
description: string | null;
|
|
4
4
|
body: Record<string, unknown>;
|
|
5
5
|
}
|
|
6
|
-
export declare const RENOVATE_VERSION = "43.
|
|
6
|
+
export declare const RENOVATE_VERSION = "43.259.2";
|
|
7
7
|
export declare const PRESETS: Record<string, GeneratedPreset>;
|
|
8
8
|
export declare const PRESET_NAMES: readonly string[];
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
// AUTO-GENERATED by scripts/generate-presets.mjs from renovate@43.
|
|
1
|
+
// AUTO-GENERATED by scripts/generate-presets.mjs from renovate@43.259.2.
|
|
2
2
|
// Do not edit by hand. Run `npm run generate:presets` to refresh.
|
|
3
|
-
export const RENOVATE_VERSION = "43.
|
|
3
|
+
export const RENOVATE_VERSION = "43.259.2";
|
|
4
4
|
export const PRESETS = {
|
|
5
5
|
"abandonments:recommended": {
|
|
6
6
|
"namespace": "abandonments",
|
|
@@ -5363,6 +5363,27 @@ export const PRESETS = {
|
|
|
5363
5363
|
]
|
|
5364
5364
|
}
|
|
5365
5365
|
},
|
|
5366
|
+
"group:graphql-platformMonorepo": {
|
|
5367
|
+
"namespace": "group",
|
|
5368
|
+
"description": null,
|
|
5369
|
+
"body": {
|
|
5370
|
+
"packageRules": [
|
|
5371
|
+
{
|
|
5372
|
+
"description": "Group packages from graphql-platform monorepo together.",
|
|
5373
|
+
"extends": [
|
|
5374
|
+
"monorepo:graphql-platform"
|
|
5375
|
+
],
|
|
5376
|
+
"groupName": "graphql-platform monorepo",
|
|
5377
|
+
"matchUpdateTypes": [
|
|
5378
|
+
"digest",
|
|
5379
|
+
"patch",
|
|
5380
|
+
"minor",
|
|
5381
|
+
"major"
|
|
5382
|
+
]
|
|
5383
|
+
}
|
|
5384
|
+
]
|
|
5385
|
+
}
|
|
5386
|
+
},
|
|
5366
5387
|
"group:graphql-toolsMonorepo": {
|
|
5367
5388
|
"namespace": "group",
|
|
5368
5389
|
"description": null,
|
|
@@ -5797,27 +5818,6 @@ export const PRESETS = {
|
|
|
5797
5818
|
]
|
|
5798
5819
|
}
|
|
5799
5820
|
},
|
|
5800
|
-
"group:hotchocolateMonorepo": {
|
|
5801
|
-
"namespace": "group",
|
|
5802
|
-
"description": null,
|
|
5803
|
-
"body": {
|
|
5804
|
-
"packageRules": [
|
|
5805
|
-
{
|
|
5806
|
-
"description": "Group packages from hotchocolate monorepo together.",
|
|
5807
|
-
"extends": [
|
|
5808
|
-
"monorepo:hotchocolate"
|
|
5809
|
-
],
|
|
5810
|
-
"groupName": "hotchocolate monorepo",
|
|
5811
|
-
"matchUpdateTypes": [
|
|
5812
|
-
"digest",
|
|
5813
|
-
"patch",
|
|
5814
|
-
"minor",
|
|
5815
|
-
"major"
|
|
5816
|
-
]
|
|
5817
|
-
}
|
|
5818
|
-
]
|
|
5819
|
-
}
|
|
5820
|
-
},
|
|
5821
5821
|
"group:html-eslintMonorepo": {
|
|
5822
5822
|
"namespace": "group",
|
|
5823
5823
|
"description": null,
|
|
@@ -7380,6 +7380,7 @@ export const PRESETS = {
|
|
|
7380
7380
|
"group:graphql-hive-gatewayMonorepo",
|
|
7381
7381
|
"group:graphql-meshMonorepo",
|
|
7382
7382
|
"group:graphql-modulesMonorepo",
|
|
7383
|
+
"group:graphql-platformMonorepo",
|
|
7383
7384
|
"group:graphql-toolsMonorepo",
|
|
7384
7385
|
"group:graphql-yogaMonorepo",
|
|
7385
7386
|
"group:graphqlcodegeneratorMonorepo",
|
|
@@ -7664,7 +7665,6 @@ export const PRESETS = {
|
|
|
7664
7665
|
"group:embroiderMonorepo",
|
|
7665
7666
|
"group:forgeMonorepo",
|
|
7666
7667
|
"group:fullcalendarMonorepo",
|
|
7667
|
-
"group:hotchocolateMonorepo",
|
|
7668
7668
|
"group:oracle-databaseMonorepo",
|
|
7669
7669
|
"group:oxlintMonorepo",
|
|
7670
7670
|
"group:prometheus-simpleclientMonorepo",
|
|
@@ -14859,6 +14859,15 @@ export const PRESETS = {
|
|
|
14859
14859
|
]
|
|
14860
14860
|
}
|
|
14861
14861
|
},
|
|
14862
|
+
"monorepo:graphql-platform": {
|
|
14863
|
+
"namespace": "monorepo",
|
|
14864
|
+
"description": "graphql-platform monorepo",
|
|
14865
|
+
"body": {
|
|
14866
|
+
"matchSourceUrls": [
|
|
14867
|
+
"https://github.com/ChilliCream/graphql-platform"
|
|
14868
|
+
]
|
|
14869
|
+
}
|
|
14870
|
+
},
|
|
14862
14871
|
"monorepo:graphql-tools": {
|
|
14863
14872
|
"namespace": "monorepo",
|
|
14864
14873
|
"description": "graphql-tools monorepo",
|
|
@@ -15023,15 +15032,6 @@ export const PRESETS = {
|
|
|
15023
15032
|
]
|
|
15024
15033
|
}
|
|
15025
15034
|
},
|
|
15026
|
-
"monorepo:hotchocolate": {
|
|
15027
|
-
"namespace": "monorepo",
|
|
15028
|
-
"description": "hotchocolate monorepo",
|
|
15029
|
-
"body": {
|
|
15030
|
-
"matchPackageNames": [
|
|
15031
|
-
"/^HotChocolate\\./"
|
|
15032
|
-
]
|
|
15033
|
-
}
|
|
15034
|
-
},
|
|
15035
15035
|
"monorepo:html-eslint": {
|
|
15036
15036
|
"namespace": "monorepo",
|
|
15037
15037
|
"description": "html-eslint monorepo",
|
|
@@ -18160,6 +18160,25 @@ export const PRESETS = {
|
|
|
18160
18160
|
]
|
|
18161
18161
|
}
|
|
18162
18162
|
},
|
|
18163
|
+
"replacements:corentinmusard-otel-cicd-action-to-dash0hq": {
|
|
18164
|
+
"namespace": "replacements",
|
|
18165
|
+
"description": "`corentinmusard/otel-cicd-action` was transferred to `dash0hq/otel-cicd-action`.",
|
|
18166
|
+
"body": {
|
|
18167
|
+
"packageRules": [
|
|
18168
|
+
{
|
|
18169
|
+
"matchDatasources": [
|
|
18170
|
+
"github-releases",
|
|
18171
|
+
"github-tags"
|
|
18172
|
+
],
|
|
18173
|
+
"matchPackageNames": [
|
|
18174
|
+
"corentinmusard/otel-cicd-action"
|
|
18175
|
+
],
|
|
18176
|
+
"replacementName": "dash0hq/otel-cicd-action",
|
|
18177
|
+
"replacementVersion": "4.0.1"
|
|
18178
|
+
}
|
|
18179
|
+
]
|
|
18180
|
+
}
|
|
18181
|
+
},
|
|
18163
18182
|
"replacements:cpx-to-maintenance-fork": {
|
|
18164
18183
|
"namespace": "replacements",
|
|
18165
18184
|
"description": "Maintenance fork of `cpx`",
|
|
@@ -20221,6 +20240,48 @@ export const PRESETS = {
|
|
|
20221
20240
|
]
|
|
20222
20241
|
}
|
|
20223
20242
|
},
|
|
20243
|
+
"security:gomodIndirectSecurityUpdates": {
|
|
20244
|
+
"namespace": "security",
|
|
20245
|
+
"description": "Enable go.mod indirect dependency updates only when vulnerabilities have been detected.",
|
|
20246
|
+
"body": {
|
|
20247
|
+
"extends": [
|
|
20248
|
+
":enableVulnerabilityAlerts"
|
|
20249
|
+
],
|
|
20250
|
+
"packageRules": [
|
|
20251
|
+
{
|
|
20252
|
+
"description": "Enable lookups for indirect go.mod dependencies",
|
|
20253
|
+
"enabled": true,
|
|
20254
|
+
"matchDepTypes": [
|
|
20255
|
+
"indirect"
|
|
20256
|
+
],
|
|
20257
|
+
"matchManagers": [
|
|
20258
|
+
"gomod"
|
|
20259
|
+
]
|
|
20260
|
+
},
|
|
20261
|
+
{
|
|
20262
|
+
"description": "Disable non-security updates for indirect go.mod dependencies (vulnerability alerts use force to override this)",
|
|
20263
|
+
"enabled": false,
|
|
20264
|
+
"matchDepTypes": [
|
|
20265
|
+
"indirect"
|
|
20266
|
+
],
|
|
20267
|
+
"matchManagers": [
|
|
20268
|
+
"gomod"
|
|
20269
|
+
],
|
|
20270
|
+
"matchUpdateTypes": [
|
|
20271
|
+
"major",
|
|
20272
|
+
"minor",
|
|
20273
|
+
"patch",
|
|
20274
|
+
"pin",
|
|
20275
|
+
"digest",
|
|
20276
|
+
"pinDigest",
|
|
20277
|
+
"lockFileMaintenance",
|
|
20278
|
+
"rollback",
|
|
20279
|
+
"replacement"
|
|
20280
|
+
]
|
|
20281
|
+
}
|
|
20282
|
+
]
|
|
20283
|
+
}
|
|
20284
|
+
},
|
|
20224
20285
|
"security:minimumReleaseAgeNpm": {
|
|
20225
20286
|
"namespace": "security",
|
|
20226
20287
|
"description": "Wait until the npm package is three days old before raising the update. This a) introduces a short delay to allow for malware researchers and scanners to (possibly) detect any malicious behaviour in packages, and b) prevents the maintainer and/or NPM from unpublishing a package you already upgraded to, breaking builds.",
|
|
@@ -9,6 +9,8 @@ export declare const CONFIG_JSON_MAX_BYTES = 1000000;
|
|
|
9
9
|
export declare const REPORT_JSON_MAX_BYTES = 10000000;
|
|
10
10
|
export declare const HOST_RULES_MAX_ITEMS = 256;
|
|
11
11
|
export declare const HOST_RULE_JSON_MAX_BYTES = 64000;
|
|
12
|
+
export declare const BASE_BRANCHES_MAX_ITEMS = 50;
|
|
13
|
+
export declare const BRANCH_NAME_MAX_BYTES = 256;
|
|
12
14
|
export declare const pathString: (description: string) => z.ZodString;
|
|
13
15
|
export declare const tokenString: (description: string) => z.ZodString;
|
|
14
16
|
export declare const endpointString: (description: string) => z.ZodString;
|
package/dist/lib/inputLimits.js
CHANGED
|
@@ -14,6 +14,8 @@ export const CONFIG_JSON_MAX_BYTES = 1_000_000;
|
|
|
14
14
|
export const REPORT_JSON_MAX_BYTES = 10_000_000;
|
|
15
15
|
export const HOST_RULES_MAX_ITEMS = 256;
|
|
16
16
|
export const HOST_RULE_JSON_MAX_BYTES = 64_000;
|
|
17
|
+
export const BASE_BRANCHES_MAX_ITEMS = 50;
|
|
18
|
+
export const BRANCH_NAME_MAX_BYTES = 256;
|
|
17
19
|
export const pathString = (description) => z.string().max(PATH_MAX_BYTES).describe(description);
|
|
18
20
|
export const tokenString = (description) => z.string().max(TOKEN_MAX_BYTES).describe(description);
|
|
19
21
|
export const endpointString = (description) => z.string().max(ENDPOINT_MAX_BYTES).describe(description);
|
package/dist/lib/version.d.ts
CHANGED
package/dist/lib/version.js
CHANGED
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import { fileURLToPath } from "node:url";
|
|
2
|
-
export const SERVER_VERSION = "1.
|
|
2
|
+
export const SERVER_VERSION = "1.4.0"; // x-release-please-version
|
|
3
3
|
// "released" = the server is running from a `node_modules/` install (global
|
|
4
4
|
// `npm i -g`, project-local `npm i`, or `npx renovate-mcp`). Anything else —
|
|
5
5
|
// most commonly an MCP config of `{"command": "node", "args": [".../dist/index.js"]}`
|
package/dist/tools/dryRun.js
CHANGED
|
@@ -11,7 +11,7 @@ import { detectLookupProblems } from "../lib/lookupProblems.js";
|
|
|
11
11
|
import { collectSecrets, scrubSecrets, writeHostRulesConfig, } from "../lib/hostRulesConfig.js";
|
|
12
12
|
import { extractRenovateLogMsg, buildDryRunHeartbeatMessage, } from "../lib/dryRunProgress.js";
|
|
13
13
|
import { classifyReportProblem } from "../lib/runtimeWarnings.js";
|
|
14
|
-
import { HOST_RULES_MAX_ITEMS, endpointString, hostRuleRecord, pathString, repositoryString, tokenString, } from "../lib/inputLimits.js";
|
|
14
|
+
import { BASE_BRANCHES_MAX_ITEMS, BRANCH_NAME_MAX_BYTES, HOST_RULES_MAX_ITEMS, endpointString, hostRuleRecord, pathString, repositoryString, tokenString, } from "../lib/inputLimits.js";
|
|
15
15
|
/**
|
|
16
16
|
* Verbatim advisory warning emitted by `dry_run` when an inline secret is
|
|
17
17
|
* detected on the tool input (the top-level `token` parameter or any non-empty
|
|
@@ -152,7 +152,7 @@ function countUpdates(report) {
|
|
|
152
152
|
export function registerDryRun(server) {
|
|
153
153
|
server.registerTool("dry_run", {
|
|
154
154
|
title: "Dry-run Renovate",
|
|
155
|
-
description: "Run Renovate in dry-run mode to preview what it would do — no PRs opened, no git pushes. Returns a structured JSON report plus a top-level `ok` boolean (false when the CLI failed OR the report records a validation/error-level problem, even if the exit code was 0). RE2 native-module fallback noise and Renovate's `Unsupported node environment` notice are filtered out of `reportErrors` — the former flows into `warnings` (still actionable, still surfaced), the latter into a separate `environmentWarnings[]` since the run still produced a usable report.\n\nEffective platform = `platform` input → `RENOVATE_PLATFORM` env → `local`. The `platformSource` field on the result echoes which step won; preflight errors and the env-overrides-default advisory both reference it so callers don't have to read the source to find where a surprising `gitlab`/`github` came from.\n\nThe full structured report ships inline by default. For large repos that is bigger than most MCP clients' response-content cap (≈75 KB on Claude Desktop) and the middle of the JSON is silently truncated. Pass `reportOutputPath` to redirect the structured report to a file (mode 0600), in which case `summary.report` collapses to `{ reportPath, repoCount, updateCount }` and `dry_run_diff` can pick it up via `{ reportPath: … }`. Pair with `summaryOnly: true` to also strip per-repo upgrade arrays from the inline payload when you only need the path + counts. `warnings`, `problems`, `reportErrors`, and `environmentWarnings` always stay inline regardless of these flags — those are the actionable bits.\n\n**Auth — prefer env vars.** Set `RENOVATE_TOKEN` (or `GITHUB_TOKEN` / `GITLAB_TOKEN`, auto-translated to `RENOVATE_TOKEN` for the spawned Renovate CLI) on the MCP server's env via `claude_desktop_config.json` / `.mcp.json`. This matches the precedence `resolve_config` uses, so a single `GITLAB_TOKEN` in `.mcp.json` works for both tools. The `token` input is retained as an ad-hoc / testing fallback — when supplied inline it is persisted in the MCP tool transcript that the client may share, replay, or feed back into the LLM, so an advisory entry is appended to the result `warnings` array steering callers toward env-var auth. For a remote-platform run, an actionable preflight error is returned before spawning Renovate when no token can be resolved at all.\n\nDefault mode runs `--platform=local` against the filesystem at `repoPath`. If your config extends `local>…` presets, pass `platform` (`github` or `gitlab`), `endpoint` (API base URL), `token`, and `repository` to run as a real platform client that can actually fetch those presets — Renovate still runs with `--dry-run`, so no PRs are opened. If you only need `gitlab>…` / `github>…` presets resolved against a self-hosted host (not a full remote run), pass just `endpoint` (and `token` if needed) while leaving `platform` unset — both flow through to Renovate in local mode too, which is enough to redirect those preset shortcuts away from the public defaults. The tool preflight-checks for `local>` presets under `--platform=local` (in `lookup` and `full` modes) and fails fast with remediation guidance rather than spawning a Renovate run that would fail opaquely with `config-validation`. The preflight is skipped for `dryRunMode=extract` so manifest-only extraction can be attempted regardless.\n\nCredentials for private registries (e.g. `COMPOSER_AUTH` for Packagist/Satis proxies, `NPM_TOKEN` / `.npmrc` for npm, Docker registry creds, `RENOVATE_HOST_RULES` for anything else) must be set on the MCP server process itself — via the `env` key in `claude_desktop_config.json` / `.mcp.json`, not your shell, since the MCP server runs as a child of Claude and does not inherit shell env. Alternatively, encode credentials as `hostRules` in the Renovate config, or pass them per-call via the `hostRules` input on this tool (written to a mode-0600 temp file that is cleaned up after the run; token/password values — including the platform `token` input — are scrubbed from `logTail` and `problems`). Per-call `hostRules` are appended to any the repo's own config already declares. If a lookup can't auth to a registry, Renovate often reports 0 updates without a loud error; when that happens this tool surfaces detected auth failures under `problems` in the output so callers can distinguish a genuine \"no updates\" from a silent registry-auth failure.",
|
|
155
|
+
description: "Run Renovate in dry-run mode to preview what it would do — no PRs opened, no git pushes. Returns a structured JSON report plus a top-level `ok` boolean (false when the CLI failed OR the report records a validation/error-level problem, even if the exit code was 0). RE2 native-module fallback noise and Renovate's `Unsupported node environment` notice are filtered out of `reportErrors` — the former flows into `warnings` (still actionable, still surfaced), the latter into a separate `environmentWarnings[]` since the run still produced a usable report.\n\nEffective platform = `platform` input → `RENOVATE_PLATFORM` env → `local`. The `platformSource` field on the result echoes which step won; preflight errors and the env-overrides-default advisory both reference it so callers don't have to read the source to find where a surprising `gitlab`/`github` came from.\n\nThe full structured report ships inline by default. For large repos that is bigger than most MCP clients' response-content cap (≈75 KB on Claude Desktop) and the middle of the JSON is silently truncated. Pass `reportOutputPath` to redirect the structured report to a file (mode 0600), in which case `summary.report` collapses to `{ reportPath, repoCount, updateCount }` and `dry_run_diff` can pick it up via `{ reportPath: … }`. Pair with `summaryOnly: true` to also strip per-repo upgrade arrays from the inline payload when you only need the path + counts. `warnings`, `problems`, `reportErrors`, and `environmentWarnings` always stay inline regardless of these flags — those are the actionable bits.\n\n**Custom base branches.** By default Renovate evaluates the repository's default branch. Pass `baseBranches` to evaluate other branches instead — this is how you dry-run a Renovate config change that lives on a feature branch before merging it. Entries are exact branch names; regex requires `/…/` wrapping (e.g. `/^renovate\\/.+/`, negate with `!/…/`) — bare `^foo` is matched literally, not as regex. `$default` expands to the default branch. With `readConfigFromBaseBranch` (default true) Renovate also reads its config FROM those branches (`useBaseBranchConfig=merge`), so the branch's edited config is what gets evaluated; set it false to scan the branches' manifests using the default branch's config. Base-branch selection only applies to remote-platform runs (`platform: 'github'`/`'gitlab'`) — it is ignored (with a warning) under `platform=local`.\n\n**Auth — prefer env vars.** Set `RENOVATE_TOKEN` (or `GITHUB_TOKEN` / `GITLAB_TOKEN`, auto-translated to `RENOVATE_TOKEN` for the spawned Renovate CLI) on the MCP server's env via `claude_desktop_config.json` / `.mcp.json`. This matches the precedence `resolve_config` uses, so a single `GITLAB_TOKEN` in `.mcp.json` works for both tools. The `token` input is retained as an ad-hoc / testing fallback — when supplied inline it is persisted in the MCP tool transcript that the client may share, replay, or feed back into the LLM, so an advisory entry is appended to the result `warnings` array steering callers toward env-var auth. For a remote-platform run, an actionable preflight error is returned before spawning Renovate when no token can be resolved at all.\n\nDefault mode runs `--platform=local` against the filesystem at `repoPath`. If your config extends `local>…` presets, pass `platform` (`github` or `gitlab`), `endpoint` (API base URL), `token`, and `repository` to run as a real platform client that can actually fetch those presets — Renovate still runs with `--dry-run`, so no PRs are opened. If you only need `gitlab>…` / `github>…` presets resolved against a self-hosted host (not a full remote run), pass just `endpoint` (and `token` if needed) while leaving `platform` unset — both flow through to Renovate in local mode too, which is enough to redirect those preset shortcuts away from the public defaults. The tool preflight-checks for `local>` presets under `--platform=local` (in `lookup` and `full` modes) and fails fast with remediation guidance rather than spawning a Renovate run that would fail opaquely with `config-validation`. The preflight is skipped for `dryRunMode=extract` so manifest-only extraction can be attempted regardless.\n\nCredentials for private registries (e.g. `COMPOSER_AUTH` for Packagist/Satis proxies, `NPM_TOKEN` / `.npmrc` for npm, Docker registry creds, `RENOVATE_HOST_RULES` for anything else) must be set on the MCP server process itself — via the `env` key in `claude_desktop_config.json` / `.mcp.json`, not your shell, since the MCP server runs as a child of Claude and does not inherit shell env. Alternatively, encode credentials as `hostRules` in the Renovate config, or pass them per-call via the `hostRules` input on this tool (written to a mode-0600 temp file that is cleaned up after the run; token/password values — including the platform `token` input — are scrubbed from `logTail` and `problems`). Per-call `hostRules` are appended to any the repo's own config already declares. If a lookup can't auth to a registry, Renovate often reports 0 updates without a loud error; when that happens this tool surfaces detected auth failures under `problems` in the output so callers can distinguish a genuine \"no updates\" from a silent registry-auth failure.",
|
|
156
156
|
inputSchema: {
|
|
157
157
|
repoPath: pathString("Absolute path to the repository root. Required for the default `platform=local` mode. When `platform` is overridden (e.g. `gitlab` / `github`), Renovate runs against the remote `repository` instead — `repoPath` is still used as the child's working directory but its manifest files are ignored."),
|
|
158
158
|
dryRunMode: z
|
|
@@ -184,8 +184,17 @@ export function registerDryRun(server) {
|
|
|
184
184
|
.boolean()
|
|
185
185
|
.optional()
|
|
186
186
|
.describe("Only meaningful in combination with `reportOutputPath`. When true, also strips per-repo `branches[]`/`packageFiles` arrays from the inline summary so the response is purely the path + counts + actionable lists. No effect when `reportOutputPath` is unset."),
|
|
187
|
+
baseBranches: z
|
|
188
|
+
.array(z.string().min(1).max(BRANCH_NAME_MAX_BYTES))
|
|
189
|
+
.max(BASE_BRANCHES_MAX_ITEMS)
|
|
190
|
+
.optional()
|
|
191
|
+
.describe("One or more base branches to evaluate instead of the repository's default branch (Renovate's `baseBranchPatterns`). Each entry is an EXACT branch name unless it is wrapped in slashes: only `/…/`-delimited entries are treated as regex (optionally `!/…/` to negate) — a bare `^release/.*` is matched literally as a branch named `^release/.*` and will never match. The magic value `$default` expands to the repository's default branch. This is what lets you dry-run a Renovate config change that lives on a non-default branch (e.g. a feature branch) before it is merged. Maps to the `RENOVATE_BASE_BRANCH_PATTERNS` env var — `baseBranchPatterns` is not a CLI flag. Only applies to remote-platform runs (`platform: 'github'`/`'gitlab'`); ignored under `platform=local`, which always inspects the working tree at `repoPath`. See also `readConfigFromBaseBranch`."),
|
|
192
|
+
readConfigFromBaseBranch: z
|
|
193
|
+
.boolean()
|
|
194
|
+
.optional()
|
|
195
|
+
.describe("Only meaningful together with `baseBranches`. When true (default), Renovate reads its config (renovate.json/.json5) FROM each base branch — `useBaseBranchConfig=merge` — so a config edit that only exists on that branch is actually evaluated. Set false to scan the base branches' manifests while still using the default branch's config."),
|
|
187
196
|
},
|
|
188
|
-
}, async ({ repoPath, dryRunMode, logLevel, timeoutMs, platform, endpoint, token, repository, hostRules, reportOutputPath, summaryOnly, }, extra) => {
|
|
197
|
+
}, async ({ repoPath, dryRunMode, logLevel, timeoutMs, platform, endpoint, token, repository, hostRules, reportOutputPath, summaryOnly, baseBranches, readConfigFromBaseBranch, }, extra) => {
|
|
189
198
|
if (endpoint !== undefined) {
|
|
190
199
|
try {
|
|
191
200
|
validateEndpoint(endpoint);
|
|
@@ -376,6 +385,36 @@ export function registerDryRun(server) {
|
|
|
376
385
|
// and passing it crashes the CLI with "unknown option".
|
|
377
386
|
childEnv.RENOVATE_CONFIG_FILE = hostRulesConfigPath;
|
|
378
387
|
}
|
|
388
|
+
// Base-branch selection. `baseBranchPatterns` (the option formerly
|
|
389
|
+
// known as `baseBranches`) is `cli:false` in Renovate, so it can only
|
|
390
|
+
// be supplied via env, not a flag. Renovate coerces the array option
|
|
391
|
+
// from a JSON5/JSON string (falling back to comma-split), so a JSON
|
|
392
|
+
// array is the unambiguous encoding even for branch names with commas.
|
|
393
|
+
// Base branches are a remote concept — under `--platform=local`
|
|
394
|
+
// Renovate inspects the working tree at `repoPath` and never resolves
|
|
395
|
+
// branches, so the input would silently do nothing; warn instead.
|
|
396
|
+
if (baseBranches !== undefined) {
|
|
397
|
+
if (baseBranches.length === 0) {
|
|
398
|
+
mcpWarnings.push("`baseBranches` was ignored: an empty array has no effect. Pass at least one exact branch name or a `/…/`-wrapped regex pattern.");
|
|
399
|
+
}
|
|
400
|
+
else if (isRemotePlatform) {
|
|
401
|
+
childEnv.RENOVATE_BASE_BRANCH_PATTERNS = JSON.stringify(baseBranches);
|
|
402
|
+
// Patterns alone only change WHICH branches are scanned for
|
|
403
|
+
// manifests; Renovate still reads its config from the default
|
|
404
|
+
// branch unless `useBaseBranchConfig=merge`. Enable it by default
|
|
405
|
+
// so a config change living on a non-default branch is actually
|
|
406
|
+
// evaluated — the headline use case for this input.
|
|
407
|
+
if (readConfigFromBaseBranch ?? true) {
|
|
408
|
+
childEnv.RENOVATE_USE_BASE_BRANCH_CONFIG = "merge";
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
else {
|
|
412
|
+
mcpWarnings.push("`baseBranches` was ignored: base-branch selection requires a remote-platform run (`platform: 'github'` / `'gitlab'`). Under `platform=local` Renovate only inspects the working tree at `repoPath`.");
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
else if (readConfigFromBaseBranch !== undefined) {
|
|
416
|
+
mcpWarnings.push("`readConfigFromBaseBranch` was ignored: it only has an effect together with `baseBranches`.");
|
|
417
|
+
}
|
|
379
418
|
if (progressEnabled) {
|
|
380
419
|
emit(`Starting Renovate dry-run (${dryRunMode})`);
|
|
381
420
|
heartbeat = setInterval(() => emit(buildDryRunHeartbeatMessage(Date.now() - startedAt, lastLogMsg)), HEARTBEAT_MS);
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "renovate-mcp",
|
|
3
|
-
"version": "1.
|
|
3
|
+
"version": "1.4.0",
|
|
4
4
|
"description": "MCP server for designing Renovate configurations interactively.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -64,7 +64,7 @@
|
|
|
64
64
|
"json5": "^2.2.3",
|
|
65
65
|
"jsonata": "2.2.1",
|
|
66
66
|
"jsonc-parser": "^3.3.1",
|
|
67
|
-
"renovate": "^43.
|
|
67
|
+
"renovate": "^43.259.2",
|
|
68
68
|
"smol-toml": "^1.6.1",
|
|
69
69
|
"yaml": "^2.9.0",
|
|
70
70
|
"zod": "^4.0.0"
|
|
@@ -77,7 +77,7 @@
|
|
|
77
77
|
"devDependencies": {
|
|
78
78
|
"@types/node": "^24.0.0",
|
|
79
79
|
"@vitest/coverage-v8": "^4.1.0",
|
|
80
|
-
"typescript": "^
|
|
80
|
+
"typescript": "^7.0.0",
|
|
81
81
|
"vitest": "^4.1.0"
|
|
82
82
|
},
|
|
83
83
|
"license": "MIT"
|