Peter SiegmundandClaude Opus 5 ee37e5c604 Install dependencies before running prettier
The npm postUpgradeTask ran `npm run format --if-present` on a tree
Renovate had only lockfile-updated. `--package-lock-only` never writes
node_modules, and the Renovate image ships no global prettier, so npm
put a non-existent node_modules/.bin on PATH and every npm update PR
failed its artifact check with `sh: 1: prettier: not found`.

Run `npm ci` first so the pinned prettier and its plugins are actually
present. `--ignore-scripts` keeps lifecycle scripts out of it since
formatting needs none of them.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_011zP7KKVvLL5WoAW7a5Cdvn
Signed-off-by: Peter Siegmund <peter.siegmund@entwicklung.eq-3.de>
2026-07-31 10:00:26 +02:00
2026-07-28 20:40:35 +02:00

renovate-config

Gemeinsames Renovate-Preset für alle Repos auf git.mars3142.dev.

Verwendung

In jedem überwachten Repo genügt eine renovate.json mit:

{
  "$schema": "https://docs.renovatebot.com/renovate-schema.json",
  "extends": ["local>mars3142/renovate-config"]
}

local> löst gegen diese Gitea-Instanz auf und lädt die default.json aus diesem Repo.

Was das Preset macht

  • Schedule: PRs nur Montag nachts (00:0007:00, Europe/Berlin), max. 5 offene PRs gleichzeitig.
  • Release-Age: Updates müssen 3 Tage alt sein (minimumReleaseAge). Fängt zurückgezogene und kompromittierte Releases ab. Mit internalChecksFilter: strict entsteht in der Wartezeit gar nicht erst ein PR.
  • Security: osvVulnerabilityAlerts als CVE-Kanal (Gitea hat kein Dependabot). Security-Updates umgehen Wartezeit und Schedule.
  • Automerge (via platformAutomerge, mergt sobald die required checks grün sind):
    • npm devDependencies, minor + patch, als eine gesammelte PR
    • CI actions
    • 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

Alles hinter dem extends überschreibt das Preset für dieses eine Repo:

{
  "extends": ["local>mars3142/renovate-config"],
  "schedule": ["at any time"]
}

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:

- '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.

S
Description
Gemeinsames Renovate-Preset fuer alle Repos (Schedule, Gruppierung, Automerge, Release-Age)
Readme
42 KiB