From 036b60d6c59151c993581b7db531a4ea0d7f5f09 Mon Sep 17 00:00:00 2001 From: scttbnsn <80784472+scttbnsn@users.noreply.github.com> Date: Thu, 27 Aug 2026 06:36:53 -0400 Subject: [PATCH] chore(renovate): move the vite ecosystem as one group The preset groups `minor` and `patch` per manager and leaves majors to split into one PR each. That works everywhere except a peer-locked set, where a major arriving alone has no resolvable outcome at all. careerrat #208 is the worked example: `@vitejs/plugin-react` 6.1.0 peer-requires `vite ^8.0.0`, `vite` is pinned at 6.4.3, and no vite major PR exists for it to land against. The branch is deadlocked no matter how many times it rebases, and `renovate/artifacts`, `tests`, `web-build`, `website-build` and `windows-package-smoke` all fail on it every run. Grouping every update type, not just non-major, is the point: the majors are exactly the ones that have to travel together. The rule sits last so it wins over the non-major group for the packages it names. Affects the three repos that declare any of these, checked against every tracked package.json: careerrat (vite 6.4.3, @vitejs/plugin-react 4.7.0, vitest 3.2.7), drydock (vite 7.3.6/8.2.1/8.2.2, @vitejs/plugin-vue 6.0.8, vitest 4.1.10/4.1.11), mailbox0 (vite ^6.3.5, @vitejs/plugin-react ^4.7.0, vitest ^1.0.4 and 3.2.4, @vitest/ui ^1.0.4). Presets resolve from this repo's default branch, so it takes effect on all three the moment it reaches main. --- renovate-config.json | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/renovate-config.json b/renovate-config.json index 1de927c..541b88b 100644 --- a/renovate-config.json +++ b/renovate-config.json @@ -36,6 +36,17 @@ ], "groupName": "non-major ({{manager}})", "groupSlug": "non-major-{{manager}}" + }, + { + "description": "Move Vite, its official plugins, and Vitest as one unit. They peer-lock on each other, so a major that arrives alone has no resolvable outcome: @vitejs/plugin-react 6 peer-requires vite ^8, and a solo PR for it can never satisfy that against a pinned vite 6, no matter how often it rebases. This matches every update type, not just minor and patch, because the majors are exactly the ones that have to travel together.", + "matchPackageNames": [ + "vite", + "@vitejs/**", + "vitest", + "@vitest/**" + ], + "groupName": "vite ecosystem", + "groupSlug": "vite-ecosystem" } ] }