Zum Inhalt springen

Renovate Bot: Automatische Dependency-Updates für PHP und JavaScript

Veröffentlicht am 8. Okt. 2025 | ca. 4 Min. Lesezeit |

Jeder kennt das Problem: Das Projekt läuft, alle sind beschäftigt, und die Dependencies werden Monate lang nicht aktualisiert. Irgendwann gibt es eine kritische Sicherheitslücke in einer veralteten Library, und man muss in aller Eile patchen. Renovate Bot löst dieses Problem durch automatische, konfigurierbare Dependency-Updates als Pull Requests.

Was ist Renovate?

Renovate ist ein Open-Source-Tool von Mend (früher WhiteSource), das Repositories auf veraltete Dependencies überwacht und automatisch Pull Requests mit den Updates erstellt. Es unterstützt:

  • PHP: composer.json / composer.lock
  • JavaScript: package.json, package-lock.json, yarn.lock, pnpm-lock.yaml
  • Docker: Dockerfile, docker-compose.yml
  • GitHub Actions / GitLab CI: Workflow-Dateien
  • Terraform, Kubernetes, Helm: Infrastruktur-as-Code
  • Und viele mehr

Setup

GitHub App (empfohlen)

Der einfachste Weg: Die Renovate GitHub App installieren. Nach der Installation öffnet Renovate automatisch einen "Configure Renovate"-PR mit einer minimalen renovate.json.

Self-hosted (GitLab, Bitbucket, Gitea)

# Via Docker
docker run --rm \
  -e RENOVATE_TOKEN=your-token \
  -e RENOVATE_REPOSITORIES=org/repo \
  ghcr.io/renovatebot/renovate

# Via npm
npx renovate --token=your-token org/repo

Konfiguration

Die renovate.json im Repository-Root steuert das Verhalten:

Minimale Konfiguration

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

Das ist bereits ausreichend für die meisten Projekte: config:recommended aktiviert sinnvolle Defaults wie Semantic-Commit-Messages, automatisches Rebase nach Merge und die Erkennung aller gängigen Package-Manager.

Erweiterte Konfiguration für Symfony/PHP-Projekte

{
    "$schema": "https://docs.renovatebot.com/renovate-schema.json",
    "extends": [
        "config:recommended",
        ":dependencyDashboard",
        ":semanticCommits"
    ],
    "timezone": "Europe/Berlin",
    "schedule": ["before 9am on Monday"],
    "labels": ["dependencies", "renovate"],
    "assignees": ["wunner-software"],
    "packageRules": [
        {
            "description": "Patch-Updates für alle Packages automatisch mergen",
            "matchUpdateTypes": ["patch"],
            "automerge": true,
            "automergeType": "pr",
            "platformAutomerge": true
        },
        {
            "description": "Symfony-Packages gruppieren",
            "groupName": "Symfony",
            "matchPackageNames": ["symfony/**"],
            "automerge": false
        },
        {
            "description": "PHPUnit-Packages gruppieren",
            "groupName": "PHPUnit",
            "matchPackageNames": ["phpunit/**", "php-mock/**"]
        },
        {
            "description": "devDependencies automatisch mergen",
            "matchDepTypes": ["devDependencies"],
            "automerge": true
        },
        {
            "description": "Major-Updates manuell reviewen",
            "matchUpdateTypes": ["major"],
            "automerge": false,
            "labels": ["major-update"]
        }
    ]
}

Konfiguration für monorepos

{
    "$schema": "https://docs.renovatebot.com/renovate-schema.json",
    "extends": ["config:recommended"],
    "enabledManagers": ["composer", "npm", "docker-compose", "github-actions"],
    "packageRules": [
        {
            "matchPaths": ["apps/frontend/**"],
            "groupName": "Frontend dependencies",
            "schedule": ["before 9am on weekdays"]
        },
        {
            "matchPaths": ["apps/api/**"],
            "groupName": "API dependencies"
        }
    ]
}

Dependency Dashboard

Mit :dependencyDashboard in extends erstellt Renovate ein GitHub Issue als Dashboard:

## Dependency Dashboard

This issue lists Renovate updates and detected dependencies.
Click on an update to open/re-open the PR.

### Open

 - [ ] chore(deps): update dependency symfony/symfony to v7.1.5

### Rate-Limited

These updates are currently rate-limited. Click on a checkbox to
force their immediate creation.

 - [ ] chore(deps): update dependency phpunit/phpunit to v11.3.2

### Detected dependencies

**composer.json**
  - symfony/framework-bundle `^6.4`
  - ...

**package.json**
  - bootstrap `^5.3.0`
  - ...

Auto-Merge für Patch-Updates

Auto-Merge ist besonders nützlich für Patch-Updates (Security-Fixes, Bugfixes) ohne Breaking Changes:

{
    "packageRules": [
        {
            "matchUpdateTypes": ["patch", "pin", "digest"],
            "automerge": true,
            "automergeType": "pr",
            "automergeStrategy": "squash"
        }
    ]
}

Wichtig: Auto-Merge sollte nur aktiviert werden, wenn CI/CD-Tests laufen und grün sind. Renovate wartet, bis alle Required Checks bestanden sind, bevor es merged.

Composer-spezifische Konfiguration

{
    "composer": {
        "ignorePlatformReqs": true
    },
    "packageRules": [
        {
            "matchManagers": ["composer"],
            "matchUpdateTypes": ["major"],
            "enabled": false,
            "description": "Composer Major-Updates deaktivieren"
        },
        {
            "matchPackageNames": ["phpstan/phpstan", "squizlabs/php_codesniffer"],
            "groupName": "PHP Code Quality Tools",
            "automerge": true
        }
    ]
}

Erfahrungen aus der Praxis

Nach einigen Wochen mit Renovate in einem mittelgroßen Symfony-Projekt:

  • Security-Patches kommen jetzt innerhalb von Stunden als PR an — mit Auto-Merge für Patches werden sie sogar automatisch deployed, sobald Tests grün sind
  • Major-Updates (z.B. Symfony 6 → 7) kommen als einzelne PRs mit Changelog-Link, man kann gezielt entscheiden
  • Noise-Reduktion durch Gruppenregeln: Statt 20 einzelner PRs für alle Symfony-Pakete kommt ein einziger "Update Symfony" PR
  • Dependency Dashboard gibt Überblick, welche Updates pending sind

Renovate vs. Dependabot

GitHub bietet mit Dependabot eine eingebaute Alternative. Der Vergleich:

Feature Renovate Dependabot
Konfigurierbarkeit Sehr hoch Begrenzt
Gruppierung Ja Begrenzt
Auto-Merge Sehr flexibel Eingeschränkt
Self-Hosting Ja (Docker/npm) Nur GitHub
Dashboard Ja (Issue) Nein
Unterstützte Manager 90+ ~25+
Updates bündeln Ja Begrenzt

Renovate ist deutlich mächtiger, erfordert aber mehr Konfigurationsaufwand.

Fazit

Renovate Bot ist eines der nützlichsten DevOps-Werkzeuge, die kaum Setup erfordern. Einmal konfiguriert, sorgt es dafür, dass Dependencies aktuell bleiben, Security-Fixes schnell eingespielt werden und der manuelle Aufwand minimal ist. Für PHP/Symfony-Projekte empfehle ich:

  1. Start mit config:recommended
  2. schedule für wöchentliche Updates konfigurieren
  3. Patch-Updates mit Auto-Merge aktivieren
  4. Symfony und PHPUnit in Gruppen zusammenfassen
Thomas Wunner

Thomas Wunner

Fachinformatiker für Anwendungsentwicklung mit Ausbildereignungsprüfung und über 14 Jahre Erfahrung im Aufbau skalierbarer Webanwendungen mit Symfony und Shopware. Abseits der Tastatur ist Thomas als Rettungsschwimmer in der Wasserwacht aktiv, legt als DJ auf und erkundet die Umgebung auf dem Motorrad.

Kommentare

Kommentare werden von Remark42 bereitgestellt. Beim Laden werden Daten an unseren Kommentar-Server übertragen.