|

Dependabot mit internen Registries und mehreren Reviewern

Abhängigkeiten mit privaten Registries verwalten

Dependabot ist ein leistungsstarkes Tool, um Ihre Abhängigkeiten auf dem neuesten Stand zu halten, aber die Konfiguration für die Arbeit mit internen Registries erfordert einige Einrichtung. Dies wird besonders wichtig, wenn Sie mit privaten Paketen über verschiedene Ökosysteme wie Composer, npm und GitHub Actions arbeiten.

Die Herausforderung

Wenn Ihr Projekt von privaten Paketen abhängt, die in internen Registries oder privaten GitHub-Repositories gehostet werden, benötigt Dependabot eine ordnungsgemäße Authentifizierung für den Zugriff. Zusätzlich kann die Einschränkung von Dependabot, nur einen Reviewer in der Konfiguration zu unterstützen, für Teams, die mehrere Genehmigungen benötigen, restriktiv sein.

Dependabot mit internen Registries konfigurieren

Hier ist eine vollständige Konfiguration, die Composer, GitHub Actions und npm mit privaten Registries verarbeitet:

version: 2

registries:
  private-composer:
    type: git
    url: https://github.com
    username: x-access-token
    password: ${{secrets.GH_TOKEN}}
  
  private-github-actions:
    type: git
    url: https://github.com
    username: x-access-token
    password: ${{secrets.GH_TOKEN}}
  
  npm-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.GH_TOKEN}}

updates:
  - package-ecosystem: "composer"
    directory: "/"
    schedule:
      interval: "monthly"
    registries:
      - private-composer
  
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "monthly"
    registries:
      - private-github-actions
  
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "monthly"
    registries:
      - npm-github

Registry-Konfiguration erklärt

Jeder Registry-Typ erfordert eine spezifische Konfiguration:

Für Git-basierte Registries (Composer, GitHub Actions):

  • type: git
  • username: x-access-token (GitHubs Standard-Token-Benutzername)
  • password: Referenz zu Ihrem GitHub-Token-Secret

Für npm-Registries:

  • type: npm-registry
  • url: Ihre npm-Registry-URL
  • token: Direkte Token-Referenz

GitHub-Token einrichten

Erstellen Sie ein Personal Access Token (PAT) oder verwenden Sie GitHub-App-Authentifizierung:

  1. Gehen Sie zu GitHub Settings > Developer settings > Personal access tokens
  2. Generieren Sie ein Token mit diesen Scopes:
    • repo (für private Repositories)
    • read:packages (zum Lesen von Paketen)
    • write:packages (falls Dependabot auf private Pakete zugreifen muss)
  3. Fügen Sie das Token als Dependabot-Secret hinzu

Secrets zu Dependabot hinzufügen

Für einzelne Repositories:

  • Gehen Sie zu Repository Settings > Secrets and variables > Dependabot
  • Klicken Sie auf “New repository secret”
  • Name: GH_TOKEN
  • Fügen Sie Ihren Token-Wert hinzu

Für organisations-/teamweiten Zugriff:

  • Gehen Sie zu Organization Settings > Secrets and variables > Dependabot
  • Klicken Sie auf “New organization secret”
  • Name: GH_TOKEN
  • Fügen Sie Ihren Token-Wert hinzu
  • Wählen Sie Repository-Zugriff:
    • All repositories (wenn alle Zugriff auf private Registry benötigen)
    • Selected repositories (wählen Sie bestimmte Repos)

Dies ermöglicht es Ihnen, ein einzelnes Token über mehrere Repositories hinweg zu verwalten, was das Rotieren von Credentials und die Aufrechterhaltung eines konsistenten Zugriffs auf interne Registries erleichtert.

Das Problem mit mehreren Reviewern

Die Konfiguration von Dependabot unterstützt nur einen einzelnen Reviewer im reviewers-Feld:

# Dies erlaubt nur EINEN Reviewer
updates:
  - package-ecosystem: "npm"
    reviewers:
      - "username"  # Nur einer erlaubt

Lösung: CODEOWNERS verwenden

Anstatt das eingeschränkte reviewers-Feld von Dependabot zu verwenden, nutzen Sie GitHubs CODEOWNERS-Datei für automatische Review-Zuweisungen. Erstellen Sie eine Datei unter .github/CODEOWNERS:

# Dependabot PRs - mehrere Reviewer erforderlich
/.github/dependabot.yml @team-leads @security-team

# Package-Dateien - relevanten Teams zuweisen
package.json @frontend-team @tech-leads
composer.json @backend-team @tech-leads
.github/workflows/ @devops-team @tech-leads

# Catch-all für Dependency-Updates
* @tech-leads

CODEOWNERS-Vorteile

Die Verwendung von CODEOWNERS bietet mehrere Vorteile:

  • Mehrere Reviewer werden automatisch zugewiesen
  • Team-basierte Zuweisungen
  • Pattern-Matching für verschiedene Dateitypen
  • Funktioniert mit Branch-Protection-Regeln
  • Konsistent über alle PRs, nicht nur Dependabot

Branch-Protection-Integration

Kombinieren Sie CODEOWNERS mit Branch-Protection-Regeln:

# Repository Settings > Branches > Branch protection rules
- Require pull request reviews before merging
- Require review from Code Owners
- Require approvals: 2

Dies stellt sicher, dass Dependabot-PRs eine ordnungsgemäße Review-Abdeckung erhalten, ohne sich auf die Einzelreviewer-Einschränkung von Dependabot zu verlassen.

Vollständiges Beispiel mit Best Practices

version: 2

registries:
  private-composer:
    type: git
    url: https://github.com
    username: x-access-token
    password: ${{secrets.GH_TOKEN}}
  
  private-github-actions:
    type: git
    url: https://github.com
    username: x-access-token
    password: ${{secrets.GH_TOKEN}}
  
  npm-github:
    type: npm-registry
    url: https://npm.pkg.github.com
    token: ${{secrets.GH_TOKEN}}

updates:
  - package-ecosystem: "composer"
    directory: "/"
    schedule:
      interval: "monthly"
      day: "monday"
      time: "09:00"
    registries:
      - private-composer
    open-pull-requests-limit: 5
    labels:
      - "dependencies"
      - "composer"
    commit-message:
      prefix: "chore(deps)"
  
  - package-ecosystem: "github-actions"
    directory: "/"
    schedule:
      interval: "monthly"
      day: "monday"
      time: "09:00"
    registries:
      - private-github-actions
    open-pull-requests-limit: 5
    labels:
      - "dependencies"
      - "github-actions"
    commit-message:
      prefix: "chore(ci)"
  
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "monthly"
      day: "monday"
      time: "09:00"
    registries:
      - npm-github
    open-pull-requests-limit: 5
    labels:
      - "dependencies"
      - "npm"
    commit-message:
      prefix: "chore(deps)"
    ignore:
      - dependency-name: "*"
        update-types: ["version-update:semver-patch"]

Wichtige Konfigurationsoptionen

  • schedule: Steuern Sie, wann Dependabot läuft (monatlich empfohlen, um Lärm zu vermeiden)
  • open-pull-requests-limit: Verhindern Sie zu viele gleichzeitige PRs
  • labels: Organisieren und filtern Sie Dependency-PRs
  • commit-message: Konsistente Commit-Präfixe für Changelog-Generierung
  • ignore: Überspringen Sie Patch-Updates, wenn Sie manuelle Kontrolle bevorzugen

Sicherheitsüberlegungen

  • Verwenden Sie fein abgestufte PATs mit minimal erforderlichen Scopes
  • Rotieren Sie Tokens regelmäßig
  • Verwenden Sie GitHub Apps für bessere Sicherheit und Audit-Trails
  • Überwachen Sie Dependabot-Alerts im Security-Tab
  • Aktivieren Sie automatische Sicherheitsupdates getrennt von Versionsupdates

Schreiten Sie weiter voran und genießen Sie jeden Schritt Ihrer Programmierreise.