Skip to main content

Optimieren der Erstellung von Pull Requests für Versionsupdates von Dependabot

Hier erfährst du, wie du deine Dependabot-Pull-Requests optimierst und effizient verwaltest.

Wer kann dieses Feature verwenden?

Users with write access

Standardmäßig öffnet Dependabot einen neuen Pull Request, um jede Abhängigkeit zu aktualisieren. Wenn du Sicherheitsupdates aktivierst, werden neue Pull Requests geöffnet, wenn eine anfällige Abhängigkeit gefunden wird. Wenn du Versionsupdates für ein oder mehrere Ökosysteme konfigurierst, werden neue Pull Requests geöffnet, wenn neue Versionen von Abhängigkeiten verfügbar sind, wobei die in der Datei dependabot.yml definierte Häufigkeit verwendet wird.

Wenn dein Projekt über viele Abhängigkeiten verfügt, stellst du möglicherweise fest, dass eine sehr große Anzahl von Dependabot-Pull-Requests überprüft und gemergt werden müssen, was aufwändig zu verwalten sein kann.

Es gibt eine Reihe von Anpassungsoptionen, die du implementieren kannst, um Dependabot-Pull-Requests für Updates zu optimieren, um sie an deine Prozesse anzupassen, z. B.:

  • Steuern der Häufigkeit, mit der Dependabot mit schedule nach neueren Versionen deiner Abhängigkeiten sucht
  • Priorisieren wichtiger Updates mit groups

Steuern der Häufigkeit und Zeiten von Abhängigkeitsupdates

Dependabot führt die Überprüfung auf Versionsupdates mit einer Häufigkeit aus, die du in der Konfigurationsdatei festgelegt hast (wobei das erforderliche Feld, schedule.interval, auf daily, weekly oder monthly festgelegt werden muss).

Standardmäßig gleicht Dependabot die Workload aus, indem eine zufällige Zeit für die Überprüfung und Erstellung von Pull Requests für Abhängigkeitsupdates zugewiesen wird.

Um jedoch Ablenkung zu reduzieren oder Zeit und Ressourcen für die Überprüfung und Durchführung von Versionsupdates besser zu organisieren, kann es hilfreich sein, die Häufigkeit und die Zeiten zu ändern. Beispielsweise kann es ratsam sein, Dependabot wöchentlich auszuführen, anstatt täglich nach Updates zu suchen, und das zu einem Zeitpunkt, zu dem Pull Requests vor der Triagesitzung deines Teams erstellt werden.

Du kannst schedule mit einer Kombination der Optionen verwenden, um die Häufigkeit und die Zeiten zu ändern, wann Dependabot nach Versionsupdates sucht.

Die Beispieldatei dependabot.yml unten ändert die npm-Konfiguration, um anzugeben, dass Dependabot jeden Tag um 02:00 Japan Standard Time (UTC +09:00) nach Versionsupdates für npm-Abhängigkeiten suchen soll.

YAML
# `dependabot.yml` file with
# customized schedule for version updates

version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    # Check the npm registry every week on Tuesday at 02:00 Japan Standard Time (UTC +09:00)
    schedule:
      interval: "weekly"
      day: "tuesday"
      time: "02:00"
      timezone: "Asia/Tokyo"

Weitere Informationen findest du unter Zeitplan.

Priorisieren wichtiger Updates

Du kannst groups verwenden, um Updates für mehrere Abhängigkeiten in einem einzelnen Pull Request zu konsolidieren. Auf diese Weise kannst du dich auf riskantere Updates konzentrieren und die Zeit für die Überprüfung von Nebenversionsupdates minimieren. Du kannst beispielsweise Updates für Nebenversions- oder Patchupdates für Entwicklungsabhängigkeiten in einem einzigen Pull Request kombinieren und eine dedizierte Gruppe für Sicherheits- oder Versionsupdates erstellen, die sich auf einen wichtigen Bereich deiner Codebasis auswirken.

Du musst Gruppen pro einzelnem Paketökosystem konfigurieren, damit du mehrere Gruppen pro Paketökosystem mithilfe einer Kombination von Kriterien erstellen kannst:

  • Dependabot-Updatetyp: applies-to
  • Abhängigkeitstyp: dependency-type
  • Abhängigkeitsname: patterns und exclude-patterns
  • Grade der semantischen Versionierung: update-types

Informationen zum Anzeigen aller unterstützten Werte für jedes Kriterium findest du unter groups.

In den folgenden Beispielen werden verschiedene Methoden zum Erstellen von Gruppen von Abhängigkeiten mithilfe der Kriterien gezeigt.

Beispiel 1: Drei Versionsupdategruppen

In diesem Beispiel hat die Datei dependabot.yml folgende Funktion:

  • Erstellt drei Gruppen namens production-dependencies, development-dependencies und rubocop
  • Verwendet patterns und dependency-type, um Abhängigkeiten in die Gruppe einzuschließen
  • Verwendet exclude-patterns, um eine Abhängigkeit (oder mehrere) aus der Gruppe auszuschließen
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      production-dependencies:
        dependency-type: "production"
      development-dependencies:
        dependency-type: "development"
        exclude-patterns:
          - "rubocop*"
      rubocop:
        patterns:
          - "rubocop*"

Infolgedessen:

  • Versionsupdates werden nach Abhängigkeitstyp gruppiert.
  • Entwicklungsabhängigkeiten, die dem Muster rubocop* entsprechen, werden aus der development-dependencies-Gruppe ausgeschlossen.
  • Stattdessen werden Entwicklungsabhängigkeiten, die mit rubocop* übereinstimmen, in die rubocop-Gruppe aufgenommen. Aufgrund der Sortierung werden Produktionsabhängigkeiten, die mit rubocop* übereinstimmen, in die production-dependencies Gruppe einbezogen.
  • Darüber hinaus werden alle Gruppen standardmäßig nur auf Versionsupdates angewendet, da der applies-to-Schlüssel nicht vorhanden ist.

Beispiel 2: Gruppierte Updates mit ausgeschlossenen Abhängigkeiten

In diesem Beispiel hat die Datei dependabot.yml folgende Funktion:

  • Erstellt eine Gruppe namens support-dependencies als Teil einer angepassten Bundler-Konfiguration
  • Verwendet patterns, die mit dem Namen einer Abhängigkeit (oder mehreren) übereinstimmen, um Abhängigkeiten in die Gruppe einzuschließen
  • Verwendet exclude-patterns, die mit dem Namen einer Abhängigkeit (oder mehreren) übereinstimmen, um Abhängigkeiten aus der Gruppe auszuschließen
  • Wendet die Gruppierung nur auf Versionsupdates an, da applies-to: version-updates verwendet wird
version: 2
updates:
  # Keep bundler dependencies up to date
  - package-ecosystem: "bundler"
    directories:
      - "/frontend"
      - "/backend"
      - "/admin"
    schedule:
      interval: "weekly"
    # Create a group of dependencies to be updated together in one pull request
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      support-dependencies:
        # Define patterns to include dependencies in the group (based on
        # dependency name)
        applies-to: version-updates # Applies the group rule to version updates
        patterns:
          - "rubocop" # A single dependency name
          - "rspec*"  # A wildcard string that matches multiple dependency names
          - "*"       # A wildcard that matches all dependencies in the package
                      # ecosystem. Note: using "*" may open a large pull request
        # Define patterns to exclude dependencies from the group (based on
        # dependency name)
        exclude-patterns:
          - "gc_ruboconfig"
          - "gocardless-*"

Infolgedessen:

  • Die meisten Abhängigkeiten für Bundler werden aufgrund des Platzhaltermusters ("*") in der Gruppe support-dependencies konsolidiert, abgesehen von
  • Abhängigkeiten, die mit gc_ruboconfig und gocardless-* übereinstimmen, werden aus der Gruppe ausgeschlossen, und Dependabot löst weiterhin einzelne Pull Requests für diese Abhängigkeiten aus. Dies kann hilfreich sein, wenn Updates für diese Abhängigkeiten genauer überprüft werden müssen.
  • Für support-dependencies werden von Dependabot nur Pull Requests für Versionsupdates ausgelöst.

Beispiel 3: Einzelne Pull Requests für Hauptversionsupdates und gruppiert für Nebenversions-/Patchupdates

In diesem Beispiel hat die Datei dependabot.yml folgende Funktion:

  • Erstellt eine Gruppe namens angular
  • Verwendet patterns, die mit dem Namen einer Abhängigkeit übereinstimmen, um Abhängigkeiten in die Gruppe einzuschließen
  • Verwendet update-type, um nur minor- oder patch-Updates in die Gruppe einzuschließen
  • Wendet die Gruppierung nur auf Versionsupdates an, da applies-to: version-updates verwendet wird
version: 2
updates:
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      # Specify a name for the group, which will be used in pull request titles
      # and branch names
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"

Infolgedessen:

  • Dependabot erstellt einen gruppierte Pull Request für alle Angular-Abhängigkeiten, die über ein Nebenversions- oder Patchupdate verfügen.
  • Alle Hauptversionsupdates werden weiterhin als einzelne Pull Requests ausgelöst.

Beispiel 4: Gruppierte Pull Requests für Nebenversions-/Patchupdates und keine Pull Requests für Hauptversionsupdates

In diesem Beispiel hat die Datei dependabot.yml folgende Funktion:

  • Erstellt zwei Gruppen namens angular und minor-and-patch
  • Verwendet applies-to, sodass die erste Gruppe nur für Versionsupdates und die zweite Gruppe nur für Sicherheitsupdates gilt
  • Verwendet update-type, um nur minor- oder patch-Updates für beide Gruppen einzuschließen
  • Verwendet eine ignore-Bedingung, um Updates für major-Versionen von @angular*-Paketen auszuschließen
version: 2
updates:
  # Keep npm dependencies up to date
  - package-ecosystem: "npm"
    directory: "/"
    schedule:
      interval: "weekly"
    groups:
      angular:
        applies-to: version-updates
        patterns:
          - "@angular*"
        update-types:
          - "minor"
          - "patch"
      minor-and-patch:
        applies-to: security-updates
        patterns:
          - "@angular*"
        update-types:
          - "patch"
          - "minor"
    ignore:
      - dependency-name: "@angular*"
        update-types: ["version-update:semver-major"]

Infolgedessen:

  • Neben- und Patchversionsupdates für Angular-Abhängigkeiten werden in einem einzigen Pull Request gruppiert.
  • Neben- und Patchsicherheitsupdates für Angular-Abhängigkeiten werden ebenfalls in einem einzigen Pull Request gruppiert.
  • Dependabot öffnet keine automatischen Pull Requests für Angular-Hauptversionsupdates.