Compare commits
3
Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
4f360565ec | ||
|
|
d8542a5dfe | ||
|
|
200f660205 |
@@ -25,8 +25,8 @@ In jedem überwachten Repo genügt eine `renovate.json` mit:
|
||||
- CI actions
|
||||
- Lockfile-Maintenance
|
||||
- **Nur gruppiert, kein Automerge:** Svelte-/Frontend-Toolchain, Spring/Kotlin. Diese PRs schaut man sich an.
|
||||
- **Prettier-Toolchain:** `prettier` und `prettier-plugin-*` gruppiert, exakt gepinnt (`rangeStrategy: pin`) und mit automatischer Neuformatierung im selben PR. Siehe unten.
|
||||
- **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
|
||||
|
||||
@@ -43,19 +43,21 @@ Alles hinter dem `extends` überschreibt das Preset für dieses eine Repo:
|
||||
|
||||
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.
|
||||
|
||||
## Voraussetzung für die Prettier-Neuformatierung
|
||||
## Formatierung
|
||||
|
||||
Prettiers Ausgabe hängt an der Version. Ein Sprung von `prettier-plugin-tailwindcss` 0.8.0 auf 0.8.1 sortiert Klassen anders und lässt jede Svelte-Datei als unformatiert gelten — ohne dass sich `package.json` ändert, weil `lockFileMaintenance` nur das Lockfile anfasst. Genau das ist im Repo `hamer/website` passiert: 27 Dateien wichen ab, gemerkt hat es niemand, weil dort kein Lint-Gate lief.
|
||||
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.
|
||||
|
||||
Dagegen wirken zwei Dinge im Preset:
|
||||
Zwei Regeln wirken dagegen:
|
||||
|
||||
- `rangeStrategy: "pin"` schreibt die exakte Version in die `package.json`. Damit kann Lockfile-Maintenance sie nicht mehr unbemerkt verschieben, und jeder Sprung ist im Diff sichtbar.
|
||||
- `postUpgradeTasks` lässt Renovate nach dem Upgrade `npx prettier --write .` laufen und die Änderung in denselben PR committen.
|
||||
- **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.
|
||||
|
||||
**`postUpgradeTasks` läuft nur, wenn die Kommandos im Bot freigegeben sind.** Das ist eine Self-Hosted-Einstellung und wird in der Repo-Konfiguration ignoriert. Beim Container-Betrieb gehört sie in die Umgebung des Renovate-Containers:
|
||||
### 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 ci --ignore-scripts$","^npx prettier --write \\.$"]
|
||||
- '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, führt Renovate die Kommandos still nicht aus — der PR kommt dann ohne Neuformatierung, und das Lint-Gate im Ziel-Repo schlägt an. Das ist der gewollte Rückfall: lieber ein roter PR als eine unbemerkte Drift.
|
||||
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.
|
||||
|
||||
+13
-8
@@ -10,7 +10,8 @@
|
||||
"osvVulnerabilityAlerts": true,
|
||||
"vulnerabilityAlerts": {
|
||||
"minimumReleaseAge": null,
|
||||
"schedule": ["at any time"]
|
||||
"schedule": ["at any time"],
|
||||
"automerge": true
|
||||
},
|
||||
"lockFileMaintenance": {
|
||||
"enabled": true,
|
||||
@@ -18,6 +19,15 @@
|
||||
"automerge": true
|
||||
},
|
||||
"packageRules": [
|
||||
{
|
||||
"description": "Nach npm-Updates Prettier laufen lassen: Formatierungs-Bumps (z.B. prettier selbst) formatieren bestehende Dateien um, sonst schlaegt prettier --check in der CI fehl. --if-present no-op't in Repos ohne format-Script. Benoetigt allowedCommands in der self-hosted Renovate-Config.",
|
||||
"matchManagers": ["npm"],
|
||||
"postUpgradeTasks": {
|
||||
"commands": ["npm run format --if-present"],
|
||||
"fileFilters": ["**/*"],
|
||||
"executionMode": "branch"
|
||||
}
|
||||
},
|
||||
{
|
||||
"description": "npm devDependencies (non-major) gesammelt, automerge bei gruener CI",
|
||||
"matchManagers": ["npm"],
|
||||
@@ -65,17 +75,12 @@
|
||||
"groupName": "spring + kotlin"
|
||||
},
|
||||
{
|
||||
"description": "Prettier und seine Plugins zusammen und exakt gepinnt. Die Formatierung haengt an der Version: ein Sprung im Lockfile aendert die Ausgabe, ohne dass package.json es zeigt, und das Repo driftet unbemerkt ab. postUpgradeTasks formatiert im selben PR nach.",
|
||||
"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,
|
||||
"postUpgradeTasks": {
|
||||
"commands": ["npm ci --ignore-scripts", "npx prettier --write ."],
|
||||
"fileFilters": ["**/*"],
|
||||
"executionMode": "branch"
|
||||
}
|
||||
"automerge": false
|
||||
},
|
||||
{
|
||||
"description": "Major-Updates nur nach Freigabe im Dependency Dashboard",
|
||||
|
||||
Reference in New Issue
Block a user