Pin the prettier toolchain #3

Merged
mars3142 merged 1 commits from chore/prettier-toolchain-reformat into main 2026-07-28 18:41:00 +00:00
2 changed files with 28 additions and 0 deletions
+20
View File
@@ -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.
+8
View File
@@ -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"],