feat!: make app-specific presets opt-in under apps/ - #86
Merged
Conversation
Move cnpg, grafanaDashboards, talosFactory, llamacpp, phanpy, and searxng into apps/ and stop including them in the generated default.json. Custom managers scan every repo file and app versioning schemes only matter to users of that app, so the bare preset now ships only general-purpose config; the layout encodes the policy instead of an exclusion list in the generator. BREAKING CHANGE: extending the bare preset no longer pulls in the app-specific managers/versioning presets, and their paths changed from managers/ and versioning/ to apps/. Extend github>home-operations/renovate-presets//apps/<name>.json5 explicitly. Signed-off-by: Devin Buhl <devin@buhl.casa>
onedr0p
force-pushed
the
feat/opt-in-app-presets
branch
from
August 5, 2026 12:01
d11aca0 to
e64fe6c
Compare
Signed-off-by: Devin Buhl <devin@buhl.casa>
Merged
onedr0p
added a commit
that referenced
this pull request
Aug 7, 2026
…whole bundle A `#tag` on a preset reference does not propagate to references made inside that preset. default.json listed its siblings untagged, so Renovate resolved every one of them from the default branch no matter what tag a consumer pinned: the pin covered the entry point and nothing else, and #86 moving files under apps/ broke every previously published tag at once. Generate default.json by merging the preset bodies instead of listing references to them. With nothing left to resolve, the tag pins the bundle, and the directory layout stops being a public API that no tag can ever stop depending on. The fully resolved config is unchanged. Verified by running Renovate its own resolveConfigPresets over the bare preset reference on main and on this branch and diffing the results: identical, including packageRules and customManagers ordering. CI now regenerates default.json and fails on drift. It holds the rules themselves now, so a missed `mise run gen` would ship stale content rather than an obviously short extends list. Signed-off-by: Devin Buhl <devin@buhl.casa>
onedr0p
added a commit
that referenced
this pull request
Aug 7, 2026
…whole bundle A `#tag` on a preset reference does not propagate to references made inside that preset. default.json listed its siblings untagged, so Renovate resolved every one of them from the default branch no matter what tag a consumer pinned: the pin covered the entry point and nothing else, and #86 moving files under apps/ broke every previously published tag at once. Generate default.json by merging the preset bodies instead of listing references to them. With nothing left to resolve, the tag pins the bundle, and the directory layout stops being a public API that no tag can ever stop depending on. The fully resolved config is unchanged. Verified by running Renovate's own resolveConfigPresets over the bare preset reference on main and on this branch and diffing the results: identical, including packageRules and customManagers ordering. CI now regenerates default.json and fails on drift. It holds the rules themselves now, so a missed `mise run gen` would ship stale content rather than an obviously short extends list. Signed-off-by: Devin Buhl <devin@buhl.casa>
doonga
pushed a commit
to doonga/renovate-config
that referenced
this pull request
Aug 7, 2026
…ts (4.0.0 ➔ 6.0.0) (#8) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [home-operations/renovate-presets](https://github.com/home-operations/renovate-presets) | major | `4.0.0` → `6.0.0` | --- ### Release Notes <details> <summary>home-operations/renovate-presets (home-operations/renovate-presets)</summary> ### [`v6.0.0`](https://github.com/home-operations/renovate-presets/blob/HEAD/CHANGELOG.md#600-2026-08-07) [Compare Source](home-operations/renovate-presets@5.0.0...6.0.0) ##### ⚠ BREAKING CHANGES - make app-specific presets opt-in under apps/ ([#​86](home-operations/renovate-presets#86)) - **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#​87](home-operations/renovate-presets#87)) ##### Features - make app-specific presets opt-in under apps/ ([#​86](home-operations/renovate-presets#86)) ([f865824](home-operations/renovate-presets@f865824)) - **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#​87](home-operations/renovate-presets#87)) ([f80f404](home-operations/renovate-presets@f80f404)) ### [`v5.0.0`](https://github.com/home-operations/renovate-presets/blob/HEAD/CHANGELOG.md#500-2026-08-05) [Compare Source](home-operations/renovate-presets@4.0.0...5.0.0) ##### ⚠ BREAKING CHANGES - **policies:** treat zer0ver 0.x minors as breaking ([#​85](home-operations/renovate-presets#85)) ##### Features - **policies:** treat zer0ver 0.x minors as breaking ([#​85](home-operations/renovate-presets#85)) ([3faf787](home-operations/renovate-presets@3faf787)) ##### Continuous Integration - **github-action:** update action jdx/mise-action (v4.2.3 ➔ v4.2.4) ([#​82](home-operations/renovate-presets#82)) ([6d41f4c](home-operations/renovate-presets@6d41f4c)) ##### Miscellaneous Chores - **mise:** update tool zizmor (1.28.0 ➔ 1.29.0) ([#​83](home-operations/renovate-presets#83)) ([f2e3659](home-operations/renovate-presets@f2e3659)) </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43LjQiLCJ1cGRhdGVkSW5WZXIiOiI0NC43LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlL2dpdGh1Yi1yZWxlYXNlIiwidHlwZS9tYWpvciJdfQ==--> Reviewed-on: https://git.greyrock.io/greyrock-labs/renovate-config/pulls/8
doonga
pushed a commit
to greyrock-labs/home-ops
that referenced
this pull request
Aug 7, 2026
…ts (4.0.0 ➔ 6.0.0) (#287) This PR contains the following updates: | Package | Update | Change | |---|---|---| | [home-operations/renovate-presets](https://github.com/home-operations/renovate-presets) | major | `4.0.0` → `6.0.0` | --- ### Release Notes <details> <summary>home-operations/renovate-presets (home-operations/renovate-presets)</summary> ### [`v6.0.0`](https://github.com/home-operations/renovate-presets/blob/HEAD/CHANGELOG.md#600-2026-08-07) [Compare Source](home-operations/renovate-presets@5.0.0...6.0.0) ##### ⚠ BREAKING CHANGES - make app-specific presets opt-in under apps/ ([#​86](home-operations/renovate-presets#86)) - **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#​87](home-operations/renovate-presets#87)) ##### Features - make app-specific presets opt-in under apps/ ([#​86](home-operations/renovate-presets#86)) ([f865824](home-operations/renovate-presets@f865824)) - **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#​87](home-operations/renovate-presets#87)) ([f80f404](home-operations/renovate-presets@f80f404)) ### [`v5.0.0`](https://github.com/home-operations/renovate-presets/blob/HEAD/CHANGELOG.md#500-2026-08-05) [Compare Source](home-operations/renovate-presets@4.0.0...5.0.0) ##### ⚠ BREAKING CHANGES - **policies:** treat zer0ver 0.x minors as breaking ([#​85](home-operations/renovate-presets#85)) ##### Features - **policies:** treat zer0ver 0.x minors as breaking ([#​85](home-operations/renovate-presets#85)) ([3faf787](home-operations/renovate-presets@3faf787)) ##### Continuous Integration - **github-action:** update action jdx/mise-action (v4.2.3 ➔ v4.2.4) ([#​82](home-operations/renovate-presets#82)) ([6d41f4c](home-operations/renovate-presets@6d41f4c)) ##### Miscellaneous Chores - **mise:** update tool zizmor (1.28.0 ➔ 1.29.0) ([#​83](home-operations/renovate-presets#83)) ([f2e3659](home-operations/renovate-presets@f2e3659)) </details> --- ### Configuration 📅 **Schedule**: (in timezone America/New_York) - Branch creation - At any time (no schedule defined) - Automerge - At any time (no schedule defined) 🚦 **Automerge**: Disabled by config. Please merge this manually once you are satisfied. ♻ **Rebasing**: Whenever PR becomes conflicted, or you tick the rebase/retry checkbox. 🔕 **Ignore**: Close this PR and you won't be reminded about this update again. --- - [ ] <!-- rebase-check -->If you want to rebase/retry this PR, check this box --- This PR has been generated by [Mend Renovate CLI](https://github.com/renovatebot/renovate). <!--renovate-debug:eyJjcmVhdGVkSW5WZXIiOiI0NC43LjQiLCJ1cGRhdGVkSW5WZXIiOiI0NC43LjQiLCJ0YXJnZXRCcmFuY2giOiJtYWluIiwibGFiZWxzIjpbInJlbm92YXRlL2dpdGh1Yi1yZWxlYXNlIiwidHlwZS9tYWpvciJdfQ==--> Reviewed-on: https://git.greyrock.io/greyrock-labs/home-ops/pulls/287
onedr0p
added a commit
that referenced
this pull request
Aug 7, 2026
A `#tag` on a preset reference does not propagate to references made inside that preset. default.json listed its siblings untagged, so Renovate resolved every one of them from the default branch no matter what tag a consumer pinned: the pin covered default.json and nothing else, and #86 moving files under apps/ broke every previously published tag at once. Stamp the current version from the manifest onto each entry and let release-please rewrite them through extra-files as it tags, so default.json at a tag references that same tag. The directory layout stops being a public API that no tag can ever stop depending on. Generation fails if a preset extends a sibling. Inlining is the only way to share rules now: such a reference reaches consumers untagged whichever tag they pinned, and release-please only rewrites default.json. apps/ is checked too, since an opt-in preset is what someone pins a tag on directly. A preset added since the last release points at a tag that does not contain it, so the bare reference stops resolving until the next release. Historic windows were 0 to 1.6 hours and pinned consumers are unaffected, so the README asks for a prompt release rather than trading it for a silent omission. The resolved config is unchanged, verified by running Renovate's own resolveConfigPresets over the bare reference on main and on this branch and diffing. Release-please's stamped output matches the generator's output at the same version, so main does not drift after a release. Signed-off-by: Devin Buhl <devin@buhl.casa>
onedr0p
added a commit
that referenced
this pull request
Aug 7, 2026
…whole bundle A `#tag` on a preset reference does not propagate to references made inside that preset, and Renovate has no relative or self-referencing preset syntax: parsePreset resolves every reference to an absolute source, repo, path and tag. default.json listed its siblings untagged, so Renovate resolved every one of them from the default branch no matter what tag a consumer pinned. The pin covered the entry point and nothing else, and #86 moving files under apps/ broke every previously published tag at once. Generate default.json by merging the preset bodies instead of listing references to them. A self-contained preset file is the shape Renovate's model supports, and with nothing left to resolve the tag pins the bundle. The directory layout stops being a public API that no tag can ever stop depending on. Generation fails if a preset extends a sibling, since inlining only removes the problem while every preset stays a leaf. apps/ is checked too, as an opt-in preset is what someone pins a tag on directly. `mise run verify` resolves the generated bundle and the presets it inlines through Renovate's own resolveConfigPresets and mergeChildConfig and requires the results to be identical, so a change to Renovate's merge semantics fails CI rather than quietly changing what consumers get. It reads the presets off disk and fetches nothing. CI also regenerates default.json and fails on drift, since it holds the rules themselves now and a missed `mise run gen` would ship stale content rather than an obviously short extends list. Signed-off-by: Devin Buhl <devin@buhl.casa>
onedr0p
added a commit
that referenced
this pull request
Aug 7, 2026
…e whole bundle A `#tag` on a preset reference does not propagate to references made inside that preset, and Renovate has no relative or self-referencing preset syntax: parsePreset resolves every reference to an absolute source, repo, path and tag. default.json listed its siblings untagged, so Renovate resolved every one of them from the default branch no matter what tag a consumer pinned. The pin covered the entry point and nothing else, and #86 moving files under apps/ broke every previously published tag at once. Generate default.json by merging the preset bodies instead of listing references to them. A self-contained preset file is the shape Renovate's model supports, and with nothing left to resolve the tag pins the bundle. It also drops the general-purpose presets from thirteen fetches to one, since the only references left are stock presets that ship inside Renovate. Generation fails if a preset extends a sibling, since inlining only removes the problem while every preset stays a leaf. apps/ is checked too, as an opt-in preset is what someone pins a tag on directly. `mise run verify` resolves the generated bundle and the presets it inlines through Renovate's own resolveConfigPresets and mergeChildConfig and requires the results to be identical, so a change to Renovate's merge semantics fails CI rather than quietly changing what consumers get. It reads the presets off disk and fetches nothing. CI also regenerates default.json and fails on drift, since it holds the rules themselves now and a missed `mise run gen` would ship stale content rather than an obviously short extends list. BREAKING CHANGE: default.json is one preset rather than a list of them, so ignorePresets can no longer drop an individual general-purpose preset out of the bundle. The resolved config is otherwise unchanged. Extend the files under config/, managers/, overrides/ and policies/ directly to compose a subset; apps/ presets are unaffected and stay individually opt-in. Signed-off-by: Devin Buhl <devin@buhl.casa>
onedr0p
added a commit
that referenced
this pull request
Aug 7, 2026
A `#tag` on a preset reference does not propagate to references made inside that preset, and Renovate has no relative or self-referencing preset syntax: parsePreset resolves every reference to an absolute source, repo, path and tag. default.json listed its siblings untagged, so Renovate resolved every one of them from the default branch no matter what tag a consumer pinned. The pin covered the entry point and nothing else, and #86 moving files under apps/ broke every previously published tag at once. Fold config/, managers/, overrides/ and policies/ into default.json. It is one self-contained preset now, so a tag pins all of it, the directory layout stops being a public API that no tag can stop depending on, and the general -purpose presets cost one fetch instead of thirteen. The only references left are stock presets that ship inside Renovate. apps/ is untouched. Splitting the defaults from opt-in application presets is the point of the repo, and only the defaults needed consolidating. The scripts, mise tasks and CI steps that generated and checked default.json go too. There is no generated file left to drift or to diff against its sources. The rationale that lived in JSON5 comments moves into the `description` of the rule it explains, which is the only prose strict JSON carries and shows up in resolved config. The resolved config is unchanged apart from those description edits, verified by running Renovate's own resolveConfigPresets over the bare reference on main and on this branch and diffing. BREAKING CHANGE: the general-purpose presets no longer exist as individual files. Extending github>home-operations/renovate-presets//policies/zer0ver.json5 or any other path under config/, managers/, overrides/ or policies/ stops resolving; extend the repo itself instead. ignorePresets can no longer drop one of them out of the bundle. apps/ presets are unaffected. Signed-off-by: Devin Buhl <devin@buhl.casa>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Per-application presets don't belong in everyone's default: the custom managers (
cnpg,grafanaDashboards,talosFactory) scan every file in a consumer's repo whether or not they run the app, and the versioning schemes (llamacpp,phanpy,searxng) only matter to users of those images. This moves all six into a newapps/directory thatscripts/gen-default.mjsdeliberately skips, so the directory layout encodes the policy instead of an exclusion list inside the generator.Generic presets are untouched:
managers/annotatedandmanagers/ocistay in the default, as do theoverrides/(inert metadata fixes that only apply when the matched package is present) andpolicies/. The now-emptyversioning/directory is gone; the README example and preset list are updated.BREAKING CHANGE: extending the bare preset no longer pulls in the app-specific presets, and their paths changed from
managers/+versioning/toapps/. Extendgithub>home-operations/renovate-presets//apps/<name>.json5explicitly.