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üfungen auf Versionsupdates mit einer Häufigkeit aus, die du in der Konfigurationsdatei festgelegt hast. Dabei muss das erforderliche Feld schedule.interval auf daily, weekly, monthly, quarterly, semiannually, yearly oder cron fest gelegt werden. Weitere Informationen findest du unter Cronjob.

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.

Ändern der Häufigkeit und Zeiten für Abhängigkeitsupdates

Du kannst schedule mit einer Kombination aus 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 Dienstag um 02:00 Uhr 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.

Einrichten eines Abkühlzeitraums für Abhängigkeitsupdates

Du kannst cooldown mit einer Kombination aus Optionen verwenden, um zu steuern, wann Dependabot Pull Requests für Versionsupdates erstellt.

Die folgende dependabot.yml-Beispieldatei zeigt einen Abkühlzeitraum, der auf die Abhängigkeiten requests, numpy und die Abhängigkeiten mit dem Präfix pandas oder django angewendet wird, jedoch nicht auf die Abhängigkeit namens pandas (genaue Übereinstimmung), die über die Liste exclude ausgeschlossen wird.

YAML
version: 2
updates:
  - package-ecosystem: "pip"
    directory: "/"
    schedule:
      interval: "daily"
    cooldown:
      default-days: 5
      semver-major-days: 30
      semver-minor-days: 7
      semver-patch-days: 3
      include:
        - "requests"
        - "numpy"
        - "pandas*"
        - "django"
      exclude:
        - "pandas"
  • Die Anzahl der Abkühltage muss zwischen 1 und 90 liegen.
  • Die maximal zulässige Anzahl von Elementen in den Listen include und exclude, die mit cooldown verwendet werden können, beträgt jeweils 150.

Hinweis

Um alle Abhängigkeiten für einen Abkühlzeitraum zu berücksichtigen, hast du folgende Möglichkeiten:

  • Lasse die Option include aus, die die Abkühlung auf alle Abhängigkeiten anwendet.
  • Verwende "*" in include, um die Abkühleinstellungen auf alles anzuwenden. Es wird empfohlen, exclude zu verwenden, um nur bestimmte Abhängigkeiten aus den Abkühleinstellungen auzuschließen.

SemVer wird für die meisten Paket-Manager unterstützt. Updates für neue Versionen für Abhängigkeiten im Abkühlzeitraum werden wie folgt zurückgestellt:

  • Hauptversionsupdates: Verzögert um 30 Tage (semver-major-days: 30).
  • Nebenversionsupdates: Verzögert um 7 Tage (semver-minor-days: 7).
  • Patchversionsupdates: Verzögert um 3 Tage (semver-patch-days: 3).

Siehe auch cooldown.

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 rubocop* entsprechen, 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 Gruppen einzubeziehen.
  • 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.