From 7268403dc268b009add8dbc3d826fe86e86aa95d Mon Sep 17 00:00:00 2001 From: Altay Date: Sun, 25 Oct 2026 22:13:02 +0300 Subject: [PATCH 1/2] chore(renovate): map Vite+ components and group Effect updates --- README.md | 4 ++++ renovate-config.json | 14 ++++++------- renovate-vite-plus.json | 44 +++++++++++++++++++++++++++++++++++++++++ 3 files changed, 55 insertions(+), 7 deletions(-) create mode 100644 renovate-vite-plus.json diff --git a/README.md b/README.md index d6c5c4c..36f7644 100644 --- a/README.md +++ b/README.md @@ -28,6 +28,10 @@ policy. The Renovate app runs only where a repository commits a config: } ``` +Vite+ repositories with explicit Vitest or `@vitest/*` pins extend +`github>putdotio/.github:renovate-vite-plus` instead. It derives component +versions from Vite+ manifests. Standalone Vitest keeps the base preset. + ## frontend-release-npm.yml Publishes an npm package with semantic-release and npm trusted publishing. The diff --git a/renovate-config.json b/renovate-config.json index 21d305f..105862c 100644 --- a/renovate-config.json +++ b/renovate-config.json @@ -61,18 +61,18 @@ "minimumReleaseAge": "3 days" }, { - "description": "vite-plus pins an exact vitest, and its coverage guard fails when @vitest/* differs, so the toolchain moves as one PR. Each member keeps its own release-age clock, and strict filtering would fall back per member and pair a vitest that aged first with the previous vite-plus. Filtering none takes the latest of every member at once and holds automerge on the pending renovate/stability-days check until all of them age. The PR is still red while upstream vitest is ahead of any vite-plus release, and it turns green once one ships", - "matchPackageNames": ["vite-plus", "@voidzero-dev/vite-plus-core", "vitest", "@vitest/*"], - "matchUpdateTypes": ["patch", "minor", "major"], + "description": "Keep Vite+ and its Vite core together. Consumers with explicit Vitest pins use the renovate-vite-plus preset.", + "matchPackageNames": ["vite-plus", "@voidzero-dev/vite-plus-core"], "groupName": "vite-plus toolchain", - "internalChecksFilter": "none" + "internalChecksFilter": "none", + "separateMajorMinor": false }, { - "description": "Effect packages ship together and peer on the same effect version, so they move as one PR. Each member keeps its own release-age clock, and strict filtering would merge the members that aged first. Filtering none takes the latest of every member and holds automerge until all of them age", + "description": "Update Effect and its packages together without selecting partially aged releases. Major updates still require approval.", "matchPackageNames": ["effect", "@effect/*"], - "matchUpdateTypes": ["patch", "minor", "major"], "groupName": "effect", - "internalChecksFilter": "none" + "internalChecksFilter": "none", + "separateMajorMinor": false }, { "description": "Pin Actions and images by digest on the initial run without waiting for release age", diff --git a/renovate-vite-plus.json b/renovate-vite-plus.json new file mode 100644 index 0000000..1e84e99 --- /dev/null +++ b/renovate-vite-plus.json @@ -0,0 +1,44 @@ +{ + "$schema": "https://docs.renovatebot.com/renovate-schema.json", + "description": "Vite+ updates with core and Vitest versions derived from its published manifest. Opt in only when Vite+ owns the test toolchain.", + "extends": ["github>putdotio/.github:renovate-config"], + "customDatasources": { + "vite-plus-component": { + "defaultRegistryUrlTemplate": "https://registry.npmjs.org/vite-plus", + "transformTemplates": [ + "($root := $; $component := \"{{{packageName}}}\" = \"vite-plus\" ? \"root\" : \"{{{packageName}}}\" = \"@voidzero-dev/vite-plus-core\" ? \"vite\" : \"vitest\"; $version := function($manifest) { $component = \"root\" ? $manifest.version : $component = \"vite\" ? $substringAfter($manifest.dependencies.vite, \"npm:@voidzero-dev/vite-plus-core@\") : $manifest.dependencies.vitest }; $latest := $root.\"dist-tags\".latest; $manifest := $lookup($root.versions, $latest); $target := $version($manifest); $core := $substringAfter($manifest.dependencies.vite, \"npm:@voidzero-dev/vite-plus-core@\"); $assert($exists($match($latest, /^\\d+\\.\\d+\\.\\d+$/)) and $exists($match($target, /^\\d+\\.\\d+\\.\\d+$/)) and $exists($lookup($root.time, $latest)) and $manifest.version = $latest and $exists($match($core, /^\\d+\\.\\d+\\.\\d+$/)) and $exists($match($manifest.dependencies.vitest, /^\\d+\\.\\d+\\.\\d+$/)), \"Vite+ latest must publish an exact stable component and timestamp\"); {\"releases\": $each($root.versions, function($manifest, $release) { ($value := $version($manifest); $exists($match($release, /^\\d+\\.\\d+\\.\\d+$/)) and $exists($value) and $exists($match($value, /^\\d+\\.\\d+\\.\\d+$/)) and $exists($lookup($root.time, $release)) ? {\"version\": $value, \"releaseTimestamp\": $lookup($root.time, $release)} ) }), \"tags\": {\"latest\": $target}, \"sourceUrl\": $component != \"vitest\" ? \"https://github.com/voidzero-dev/vite-plus\" : \"https://github.com/vitest-dev/vitest\"})" + ] + } + }, + "packageRules": [ + { + "description": "Move Vite+, its core, and the bundled Vitest ecosystem together. A major member gates the whole group.", + "matchPackageNames": [ + "vite-plus", + "@voidzero-dev/vite-plus-core", + "vitest", + "@vitest/*", + "!@vitest/eslint-plugin", + "!@vitest/coverage-c8" + ], + "groupName": "vite-plus toolchain", + "internalChecksFilter": "none", + "separateMajorMinor": false + }, + { + "description": "Use one validated Vite+ release manifest for the parent and every bundled component.", + "matchDatasources": ["npm"], + "matchPackageNames": [ + "vite-plus", + "@voidzero-dev/vite-plus-core", + "vitest", + "@vitest/*", + "!@vitest/eslint-plugin", + "!@vitest/coverage-c8" + ], + "overrideDatasource": "custom.vite-plus-component", + "versioning": "npm", + "followTag": "latest" + } + ] +} From e9c10577100f938da6309eda27e009910af7636c Mon Sep 17 00:00:00 2001 From: Altay Date: Sun, 25 Oct 2026 22:16:09 +0300 Subject: [PATCH 2/2] chore(renovate): fix the Vite+ manifest registry URL --- renovate-vite-plus.json | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/renovate-vite-plus.json b/renovate-vite-plus.json index 1e84e99..55a8a23 100644 --- a/renovate-vite-plus.json +++ b/renovate-vite-plus.json @@ -38,7 +38,8 @@ ], "overrideDatasource": "custom.vite-plus-component", "versioning": "npm", - "followTag": "latest" + "followTag": "latest", + "registryUrls": ["https://registry.npmjs.org/vite-plus"] } ] }