Zum Hauptinhalt springen

Dependency-Updates: Renovate + Dependabot

Automatische Abhängigkeits-Updates laufen über Renovate (der Update-Bot für die tägliche Arbeit). Dependabot bleibt ausschließlich als Security-Alert-Signal aktiv. Beide beißen sich nicht — es ist ein bewusstes, gängiges Muster:

Renovate für die tägliche Update-Arbeit, Dependabot als Security-Backup.

WerkzeugRolleErzeugt PRs?
Renovate (Mend-App)Version-Updates für composer, npm, GitHub-Actions und Security-FixesJa — Update- und Security-PRs
DependabotNur noch Dependabot Alerts (natives GitHub-Advisory-Signal im Security-Tab)Nein — weder Version- noch Security-Update-PRs

Warum die Aufteilung?

  • Renovate ist flexibler (Gruppierung, Auto-Merge-Regeln, Dependency-Dashboard, Lockfile-Wartung, feinere Zeitpläne) und übernimmt sämtliche Update-PRs.
  • Dependabot Alerts liefern das native GitHub-Advisory-Signal „geschenkt": man sieht Sicherheitslücken direkt im Security-Tab, ohne dass Dependabot eigene PRs aufmacht (die würden sich sonst mit Renovate doppeln).
  • Renovate greift dasselbe Advisory-Signal via vulnerabilityAlerts auf und macht daraus die eigentlichen Security-Fix-PRs — so gibt es genau einen Bot, der PRs stellt.

Konfiguration

Renovate — .github/renovate.json5

Die komplette Renovate-Konfiguration liegt kommentiert in .github/renovate.json5. Kernpunkte:

EinstellungWertBedeutung
baseBranches["develop"]Update-PRs gehen gegen develop (wie zuvor bei Dependabot). main bleibt unberührt.
schedulebefore 7am on monday (Europe/Berlin)Wöchentlich gebündelt — hält die Zahl der CI-Läufe niedrig.
extendsconfig:recommended, :dependencyDashboard, :semanticCommitsSinnvolle Defaults + Sammel-Dashboard-Issue + Conventional Commits.
prConcurrentLimit / prHourlyLimit5 / 2Flutet die Inbox nicht (entspricht dem alten open-pull-requests-limit).
lockFileMaintenancemonatlich, auto-mergeHält composer.lock / package-lock.json frisch, auch ohne Constraint-Änderung.
vulnerabilityAlertsaktiv, Label security, „at any time"Security-Fix-PRs laufen sofort (ignorieren den Wochen-Schedule).

Gruppierung (weniger, gebündelte PRs — 1:1 aus der alten Dependabot-Konfig übernommen): php dev-tooling, composer patch updates, vite tooling, tailwind, npm patch updates, github-actions.

Commit-Scopes wie zuvor: Produktiv-composer → fix(deps), Dev-composer → chore(deps-dev), Actions → chore(ci).

Major-Bumps sind bewusst deaktiviert (eigene Migrations-Pläne) für: laravel/framework, laravel/fortify, laravel/socialite, laravel/reverb, livewire/livewire, livewire/flux, livewire/flux-pro, livewire/volt, hyperlinkgroup/linguist, tailwindcss, apexcharts, puppeteer, html2canvas-pro, laravel-echo, pusher-js.

Auto-Merge-Policy (CI-gated)

Sichere Updates werden automatisch gemerged — aber nur, wenn die CI grün ist.

KategorieAuto-Merge?
Patch-Updates (composer + npm, produktiv)✅ ja
Dev-Dependencies non-major (composer require-dev, npm devDependencies)✅ ja
GitHub-Actions non-major (Digest / Pin / Patch / Minor)✅ ja
Lockfile-Wartung✅ ja
Produktiv-Minor❌ Review
Alle Major-Updates❌ Review (bei den gepinnten Libs zusätzlich ganz deaktiviert)

Wie das CI-Gate funktioniert: platformAutomerge: false — Renovate merged selbst erst, wenn alle Checks auf dem PR grün sind (linter/„quality" + tests/„ci"). Bei rotem CI wird nicht gemerged. Es wird bewusst keine Branch-Protection auf develop erzwungen — der eigene Push-Flow bleibt unberührt.

Actions-Rechenzeit bewusst niedrig gehalten:

  • Wöchentlicher Schedule + starke Gruppierung ⇒ wenige PRs ⇒ wenige CI-Läufe.
  • Auto-Merge erzeugt keine zusätzlichen PR-Läufe. Einziger Zusatz-Lauf pro gemergtem PR: der Merge-Push auf develop triggert lint.yml + tests.yml wie jeder andere Push.
  • Stellschrauben, falls die Actions-Minuten weiter runter sollen: Schedule auf monthly setzen, Gruppen weiter zusammenfassen, oder in tests.yml das xdebug-Coverage auf Dependency-PRs abschalten (nicht Teil dieser Konfig).

Auto-Merge lässt sich pro Kategorie in renovate.json5 an-/abschalten (das Feld automerge je packageRule).

Dependabot — Rest-Rolle

Es gibt keine .github/dependabot.yml mehr (die frühere Version-Update-Konfig wurde entfernt). Dependabot ist auf Repo-Ebene folgendermaßen eingestellt:

Repo-SettingZustandZweck
Dependabot alertsANSecurity-Advisory-Signal im Security-Tab (auch Datenquelle für Renovate-vulnerabilityAlerts).
Dependabot security updatesAUSKeine Dependabot-Security-PRs — Renovate übernimmt Security-Fixes.
Dependabot version updatesAUSKeine dependabot.yml ⇒ keine Routine-Update-PRs.

GitHub-Einrichtung

Diese Schritte wurden per API/Config gesetzt:

  • .github/renovate.json5 committet.
  • .github/dependabot.yml entfernt.
  • Dependabot Alerts aktiviert (PUT /repos/:owner/:repo/vulnerability-alerts).
  • Dependabot Security-Updates deaktiviert (DELETE /repos/:owner/:repo/automated-security-fixes).

Manueller Rest-Schritt: Renovate-App installieren

Renovate läuft als Mend-gehostete GitHub-App (kein self-hosted CI-Job, keine Actions-Minuten für den Bot selbst). Einmalig:

  1. github.com/apps/renovate öffnen → Install/Configure.
  2. Für das Repo yeapea/postbox (bzw. die Organisation) freigeben.
  3. Renovate erstellt beim ersten Lauf einen Onboarding-PR und ein Dependency-Dashboard-Issue. Da bereits eine renovate.json5 existiert, übernimmt Renovate diese Konfig direkt (kein „Standard-Onboarding" nötig — der Onboarding-PR bestätigt nur die erkannte Config).

Flux Pro in Renovate (private Registry)

livewire/flux-pro liegt in der privaten Composer-Registry composer.fluxui.dev. Renovate ist dafür in renovate.json5 bereits verdrahtet: ein hostRules-Eintrag authentifiziert gegen die Registry über Renovate-Secrets {{ secrets.FLUX_USERNAME }} / {{ secrets.FLUX_LICENSE_KEY }}kein Klartext im Repo (die Werte werden nicht committet, analog zur gitignoreten auth.json). Minor/Patch laufen dann normal (CI-gated, Review — kein Auto-Merge, da Produktiv-Dependency); Major bleibt über die Major-Ignore-Regel deaktiviert.

Ein manueller Schritt (nur im Mend-Dashboard möglich): Die Mend-gehostete Renovate-App liest ihre Zugangsdaten ausschließlich aus den Mend-App-Einstellungen — nicht aus dem Repo, nicht aus GitHub-Actions-/Dependabot-Secrets; verschlüsselte Secrets in der Config sind abgekündigt, und es gibt keine API zum Skripten. Die beiden Zugangsdaten müssen daher im Mend-Dashboard hinterlegt werden (developer.mend.io → Organisation/Repository → Credentials bzw. Secrets), mit denselben Werten wie die http-basic-Einträge in der gitignoreten auth.json:

SecretWert
FLUX_USERNAMEFlux-Account (http-basic-username aus auth.json)
FLUX_LICENSE_KEYFlux-Lizenzschlüssel (http-basic-password aus auth.json)

Alternativ bietet Mend eine host-basierte Credentials-Ablage (Host composer.fluxui.dev + Username + Passwort direkt im Dashboard) — dann kann der hostRules-Block in renovate.json5 entfallen. In beiden Fällen landet kein Klartext im Repo.

Ohne diese Zugangsdaten bleibt flux-pro schlicht unaktualisiert (kein Bruch anderer Updates) — bei einer lizenzpflichtigen UI-Lib ohnehin bewusst zu handhaben.

Betrieb

  • Dependency-Dashboard: Renovate legt ein Issue an, das alle erkannten und offenen Updates listet — zentrale Übersicht + Möglichkeit, einzelne Updates per Checkbox anzustoßen.
  • Zeitplan ändern: schedule in renovate.json5 (z. B. monthly für noch weniger CI-Läufe).
  • Mehr/weniger Auto-Merge: automerge je packageRule an-/abschalten.
  • Config prüfen: npx --yes --package renovate renovate-config-validator .github/renovate.json5.

Migrations-Hinweis

Beim Umstieg blieben ggf. offene Dependabot-Version-Update-PRs auf develop stehen (z. B. dependabot/npm_and_yarn/..., dependabot/github_actions/...). Sie werden nicht mehr aktualisiert und können geschlossen werden — Renovate schlägt noch relevante Updates neu vor.