Skip to content
Merged
Show file tree
Hide file tree
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
4 changes: 4 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -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
Expand Down
14 changes: 7 additions & 7 deletions renovate-config.json
Original file line number Diff line number Diff line change
Expand Up @@ -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",
Expand Down
45 changes: 45 additions & 0 deletions renovate-vite-plus.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
{
"$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",
Comment thread
altaywtf marked this conversation as resolved.
"versioning": "npm",
"followTag": "latest",
"registryUrls": ["https://registry.npmjs.org/vite-plus"]
}
]
}