Skip to content

feat!: make app-specific presets opt-in under apps/ - #86

Merged
onedr0p merged 3 commits into
mainfrom
feat/opt-in-app-presets
Aug 7, 2026
Merged

feat!: make app-specific presets opt-in under apps/#86
onedr0p merged 3 commits into
mainfrom
feat/opt-in-app-presets

Conversation

@onedr0p

@onedr0p onedr0p commented Aug 5, 2026

Copy link
Copy Markdown
Contributor

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 new apps/ directory that scripts/gen-default.mjs deliberately skips, so the directory layout encodes the policy instead of an exclusion list inside the generator.

Generic presets are untouched: managers/annotated and managers/oci stay in the default, as do the overrides/ (inert metadata fixes that only apply when the matched package is present) and policies/. The now-empty versioning/ 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/ to apps/. Extend github>home-operations/renovate-presets//apps/<name>.json5 explicitly.

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
onedr0p force-pushed the feat/opt-in-app-presets branch from d11aca0 to e64fe6c Compare August 5, 2026 12:01
@onedr0p
onedr0p merged commit f865824 into main Aug 7, 2026
3 checks passed
@onedr0p
onedr0p deleted the feat/opt-in-app-presets branch August 7, 2026 11:09
@sticky-gecko sticky-gecko Bot mentioned this pull request Aug 7, 2026
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/ ([#&#8203;86](home-operations/renovate-presets#86))
- **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#&#8203;87](home-operations/renovate-presets#87))

##### Features

- make app-specific presets opt-in under apps/ ([#&#8203;86](home-operations/renovate-presets#86)) ([f865824](home-operations/renovate-presets@f865824))
- **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#&#8203;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 ([#&#8203;85](home-operations/renovate-presets#85))

##### Features

- **policies:** treat zer0ver 0.x minors as breaking ([#&#8203;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) ([#&#8203;82](home-operations/renovate-presets#82)) ([6d41f4c](home-operations/renovate-presets@6d41f4c))

##### Miscellaneous Chores

- **mise:** update tool zizmor (1.28.0 ➔ 1.29.0) ([#&#8203;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/ ([#&#8203;86](home-operations/renovate-presets#86))
- **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#&#8203;87](home-operations/renovate-presets#87))

##### Features

- make app-specific presets opt-in under apps/ ([#&#8203;86](home-operations/renovate-presets#86)) ([f865824](home-operations/renovate-presets@f865824))
- **mise:** Update tool oxfmt (0.61.0 ➔ 0.62.0) ([#&#8203;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 ([#&#8203;85](home-operations/renovate-presets#85))

##### Features

- **policies:** treat zer0ver 0.x minors as breaking ([#&#8203;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) ([#&#8203;82](home-operations/renovate-presets#82)) ([6d41f4c](home-operations/renovate-presets@6d41f4c))

##### Miscellaneous Chores

- **mise:** update tool zizmor (1.28.0 ➔ 1.29.0) ([#&#8203;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>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant