Pin the prettier toolchain
Prettier's output depends on its version. When prettier-plugin-tailwindcss went from 0.8.0 to 0.8.1 it started sorting class names differently, and all 27 Svelte files in hamer/website silently drifted out of format. The bump arrived through lockFileMaintenance, which only touches the lock file, so package.json never showed it. rangeStrategy: pin writes the exact version into package.json. Lock file maintenance can no longer move it unseen, and every bump is visible in the diff. The reformatting itself is already handled by the npm-wide postUpgradeTasks rule, so this only adds the pinning and the grouping. The group is not automerged: when the bot lacks the command allowlist the reformatting is skipped silently, and an unattended merge would bring the drift straight back. The README documents both rules and the RENOVATE_ALLOWED_COMMANDS value the self-hosted bot needs, which was not written down anywhere yet. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_011ghd74zZHdKuvt9pv7Z7Hk Signed-off-by: Peter Siegmund <peter.siegmund@entwicklung.eq-3.de>
This commit was merged in pull request #3.
This commit is contained in:
co-authored by
Claude Opus 5
parent
d8542a5dfe
commit
4f360565ec
@@ -26,6 +26,7 @@ In jedem überwachten Repo genügt eine `renovate.json` mit:
|
||||
- Lockfile-Maintenance
|
||||
- **Nur gruppiert, kein Automerge:** Svelte-/Frontend-Toolchain, Spring/Kotlin. Diese PRs schaut man sich an.
|
||||
- **Major-Updates:** kein PR ohne Freigabe per Checkbox im Dependency Dashboard.
|
||||
- **Formatierung:** nach npm-Updates läuft `npm run format --if-present`, und `prettier` samt Plugins ist exakt gepinnt. Siehe unten.
|
||||
|
||||
## Abweichen pro Repo
|
||||
|
||||
@@ -41,3 +42,22 @@ Alles hinter dem `extends` überschreibt das Preset für dieses eine Repo:
|
||||
## Voraussetzung für Automerge
|
||||
|
||||
Der Renovate-User braucht Merge-Rechte, und die CI-Jobs müssen in der Branch Protection des Ziel-Branches als *required status checks* eingetragen sein. Ohne required checks würde Giteas Auto-Merge sofort mergen, ohne auf CI zu warten.
|
||||
|
||||
## Formatierung
|
||||
|
||||
Prettiers Ausgabe hängt an der Version. Als `prettier-plugin-tailwindcss` von 0.8.0 auf 0.8.1 sprang, sortierte es Klassennamen anders und liess in `hamer/website` alle 27 Svelte-Dateien als unformatiert gelten. Gemerkt hat es wochenlang niemand, weil dort kein Lint-Gate lief und `package.json` unverändert blieb — der Sprung kam über `lockFileMaintenance`, das nur das Lockfile anfasst.
|
||||
|
||||
Zwei Regeln wirken dagegen:
|
||||
|
||||
- **Nachformatieren:** Nach npm-Updates führt Renovate `npm run format --if-present` aus und committet das Ergebnis in denselben PR. In Repos ohne `format`-Skript passiert nichts.
|
||||
- **Pinning:** `prettier` und `prettier-plugin-*` stehen mit exakter Version in der `package.json` (`rangeStrategy: "pin"`). Damit kann Lockfile-Maintenance sie nicht mehr unbemerkt verschieben, und jeder Sprung ist im Diff sichtbar. Die Gruppe ist bewusst **nicht** automerged: Fehlt die unten beschriebene Freigabe, wird das Nachformatieren stillschweigend übersprungen, und ein unbeaufsichtigter Merge würde die Drift wieder einschleppen.
|
||||
|
||||
### Voraussetzung: Kommando-Freigabe im Bot
|
||||
|
||||
`postUpgradeTasks` läuft nur, wenn das Kommando im Bot freigegeben ist. Das ist eine Self-Hosted-Einstellung und wird in der Repo-Konfiguration **ignoriert**. Beim Container-Betrieb gehört sie in dessen Umgebung:
|
||||
|
||||
```yaml
|
||||
- 'RENOVATE_ALLOWED_COMMANDS=["^npm run format --if-present$"]'
|
||||
```
|
||||
|
||||
Die Einträge sind reguläre Ausdrücke, gegen die das jeweilige Kommando geprüft wird. Fehlt die Variable, überspringt Renovate den Schritt ohne Fehler — im Log erscheint eine `WARN`-Zeile, dass das Kommando nicht auf der Liste steht.
|
||||
|
||||
@@ -74,6 +74,14 @@
|
||||
],
|
||||
"groupName": "spring + kotlin"
|
||||
},
|
||||
{
|
||||
"description": "Prettier und seine Plugins exakt pinnen. Die Formatierung haengt an der Version: kommt der Sprung ueber lockFileMaintenance, aendert sich die Ausgabe, ohne dass package.json es zeigt - genau so sind in hamer/website 27 Dateien unbemerkt abgedriftet. Das Nachformatieren erledigt die npm-Regel weiter oben.",
|
||||
"matchManagers": ["npm"],
|
||||
"matchPackageNames": ["prettier", "prettier-plugin-**"],
|
||||
"groupName": "prettier toolchain",
|
||||
"rangeStrategy": "pin",
|
||||
"automerge": false
|
||||
},
|
||||
{
|
||||
"description": "Major-Updates nur nach Freigabe im Dependency Dashboard",
|
||||
"matchUpdateTypes": ["major"],
|
||||
|
||||
Reference in New Issue
Block a user