Skip to content
Merged
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
67 changes: 65 additions & 2 deletions renovate.json
Original file line number Diff line number Diff line change
@@ -1,8 +1,71 @@
{
"$schema": "https://docs.renovatebot.com/renovate-schema.json",
"extends": ["config:recommended"],
"prConcurrentLimit": 2,
"timezone": "America/New_York",
"schedule": ["before 9am on Monday"],
"automergeSchedule": ["at any time"],
"semanticCommits": "enabled",
"prConcurrentLimit": 10,
"prHourlyLimit": 4,
"minimumReleaseAge": "7 days",
"internalChecksFilter": "strict",
"reviewersFromCodeOwners": true
"reviewersFromCodeOwners": true,
"automergeType": "pr",
"platformAutomerge": false,
"lockFileMaintenance": {
"enabled": true,
"schedule": ["before 9am on the first day of the month"],
"automerge": true
},
"packageRules": [
{
"description": "Pin GitHub Actions to commit digests, matching the existing convention in .github/workflows.",
"groupName": "pin digests",
"groupSlug": "all-digests",
"matchDepTypes": ["action"],
"pinDigests": true
},
{
"description": "Automerge patch and minor devDependency updates. Every dependency in this repo is a devDependency, and Renovate PRs run the full Docusaurus build (Deploy PR Preview) plus tsc and prettier --check, so a green branch is strong evidence.",
"matchDepTypes": ["devDependencies"],
"matchUpdateTypes": ["minor", "patch"],
"automerge": true

Copy link
Copy Markdown
Member

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This also automerges patch/minor updates to @signalwire/docusaurus-plugin-llms-txt, but PR CI only builds; it does not run the flat-Markdown assertions at .github/workflows/deploy.yaml:64. A plugin regression that still lets Docusaurus build but stops emitting per-section Markdown, llms.txt, or llms-full.txt would pass .github/workflows/pr-preview.yaml:65 and validation, merge automatically here, then fail the GitHub Pages deployment. Please either run the same artifact verification on PRs before enabling automerge, or add a later package rule with automerge: false for this plugin.

},
{
"description": "For 0.x releases a minor bump is a breaking change under semver, so require review. Currently affects @easyops-cn/docusaurus-search-local and @harperfast/code-guidelines.",
"matchCurrentVersion": "/^0\\./",
"matchUpdateTypes": ["minor"],
"automerge": false
},
{
"description": "Never automerge a major update.",
"matchUpdateTypes": ["major"],
"automerge": false
},
Comment on lines +34 to +44

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

You can simplify these two rules into a single one by using the breaking value for matchUpdateTypes. Renovate considers major updates (e.g., 1.x -> 2.x) and minor updates for 0.x packages (e.g., 0.1.x -> 0.2.x) as breaking changes. This makes the configuration more concise and semantic.

		{
			"description": "Never automerge breaking changes (major updates, or minor updates for 0.x packages).",
			"matchUpdateTypes": ["breaking"],
			"automerge": false
		},

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Checked this one carefully and I'm not taking it - breaking is not a valid matchUpdateTypes value, and the way it fails is the problem.

Renovate 44.48.2's own shipped types (dist/config/types.d.ts:444):

type UpdateType = 'major' | 'minor' | 'patch' | 'pin' | 'digest' | 'pinDigest'
  | 'lockFileMaintenance' | 'lockfileUpdate' | 'rollback' | 'bump' | 'replacement';

No breaking. The published renovate-schema.json enum agrees.

The dangerous part is that nothing would have caught this. The schema's matchUpdateTypes is an anyOf whose second branch is a bare {"type": "string"}, so any string validates. I confirmed it with a control: a rule using matchUpdateTypes: ["definitelyNotAnUpdateType"] passes renovate-config-validator --strict with "Config validated successfully."

So had I applied this, the rule would have validated clean, silently matched nothing, and let major bumps and 0.x minors fall through to the automerge default - merged with no review. A verbose config is much cheaper than that.

Keeping the two explicit rules. They're wordier but they demonstrably match what they say: matchUpdateTypes: ["major"], and matchCurrentVersion: "/^0\\./" + matchUpdateTypes: ["minor"] for the 0.x case.

sent with Claude Opus 5

{
"description": "All ten @docusaurus/* packages publish in lockstep from facebook/docusaurus, including tsconfig, types and module-type-aliases. Any solo bump breaks the build, so they must move as one PR.",
"groupName": "docusaurus monorepo",
"groupSlug": "docusaurus",
"matchPackageNames": ["@docusaurus/**"]
},
{
"description": "A Docusaurus minor can change rendering without failing the build, so a human should review the PR preview deployment. Docusaurus patch updates still automerge.",
"matchPackageNames": ["@docusaurus/**"],
"matchUpdateTypes": ["minor"],
"automerge": false
},
{
"description": "react and react-dom must always move together.",
"groupName": "react",
"groupSlug": "react",
"matchPackageNames": ["react", "react-dom"]
},
{
"description": "TypeScript 7 is a full compiler rewrite and @docusaurus/tsconfig 3.x is not validated against it. Require an explicit tick on the Dependency Dashboard before a PR is even opened, so the upgrade happens when someone is ready to drive it.",
"matchPackageNames": ["typescript"],
"matchUpdateTypes": ["major"],
"automerge": false,
"dependencyDashboardApproval": true
}
]
}