Skip to main content

Оптимизация создания запросов на вытягивание обновлений версий Dependabot

Узнайте, как оптимизировать и эффективно управлять запросами на вытягивание Dependabot.

Кто может использовать эту функцию?

Users with write access

По умолчанию Dependabot открывает новый запрос на вытягивание для обновления каждой зависимости. При включении обновлений системы безопасности новые запросы на вытягивание открываются при обнаружении уязвимой зависимости. При настройке обновлений версий для одной или нескольких экосистем новые запросы на вытягивание открываются при наличии новых версий зависимостей с частотой, определенной dependabot.yml в файле.

Если в проекте много зависимостей, возможно, у вас есть очень большое количество запросов на извлечение Dependabot для проверки и слияния, которые могут быстро стать сложными для управления.

Существует несколько вариантов настройки, которые можно реализовать для оптимизации запросов на вытягивание Dependabot для выравнивания запросов на вытягивание, например:

  • Управление частотой , с помощью которой Dependabot проверяет наличие более новых версий зависимостей schedule.
  • Приоритет значимых обновлений с groupsпомощью .

Управление частотой и временем обновления зависимостей

Dependabot выполняет свои проверки обновлений версий на частоте, заданной вами в файле конфигурации, где необходимое поле, schedule.intervalдолжно быть установлено значение daily, , semiannually``monthly``yearly``weekly``quarterlyили cron (см. cronjob).

По умолчанию Dependabot балансирует рабочую нагрузку, назначая случайное время для проверки и получения запросов на вытягивание обновлений зависимостей.

Тем не менее, чтобы уменьшить отвлекающий фактор или упорядочить время и ресурсы для просмотра и решения обновлений версий, может оказаться полезным изменить частоту и время. Например, вы можете предпочесть Dependabot, чтобы выполнять еженедельные, а не ежедневные проверки обновлений, а в то же время, чтобы гарантировать, что запросы на вытягивание создаются до начала триажа сеанса вашей команды.

Изменение частоты и времени обновления зависимостей

Вы можете использовать schedule сочетание параметров для изменения частоты и времени, когда Dependabot проверяет наличие обновлений версий.

Приведенный ниже пример dependabot.yml файла изменяет конфигурацию npm, чтобы указать, что Dependabot должен проверять наличие обновлений версий для зависимостей npm каждый вторник в 02:00 японского стандартного времени (UTC +09:00).

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"

См. также расписание.

Настройка периода охлаждения для обновлений зависимостей

С помощью сочетания параметров можно cooldown управлять тем, когда Dependabot создает запросы на вытягивание обновлений версий.

В приведенном ниже примере dependabot.yml файла показан период охлаждения, применяемый к зависимостям requests, numpyа также префикс pandas с именем или django, но не к зависимостям pandas ( точному совпадению), который исключается из списка исключений .

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"
  • Количество дней охлаждения должно составлять от 1 до 90.
  • Максимально допустимое ограничение элементов в include списках и exclude списках, с которыми можно использовать cooldown, составляет 150.

Примечание.

Чтобы рассмотреть все зависимости для периода охлаждения, можно:

  • Опустите include параметр, который применяет прохладу ко всем зависимостям.
  • include Используйте для "*" применения параметров охлаждения ко всему. Рекомендуется использовать только exclude для исключения определенных зависимостей из параметров охлаждения.

SemVer поддерживается для большинства диспетчеров пакетов. Обновления новых версий для зависимостей в прохладном меню откладываются следующим образом:

  • Основные обновления: задержка в 30 дней (semver-major-days: 30).
  • Незначительные обновления: задержка на 7 дней (semver-minor-days: 7).
  • Обновления исправлений: отложено на 3 дня (semver-patch-days: 3).

См. также cooldown.

Приоритет значимых обновлений

Можно использовать groups для консолидации обновлений для нескольких зависимостей в одном запросе на вытягивание. Это помогает сосредоточить время проверки на более высокий риск обновлений и свести к минимуму время, затраченное на просмотр дополнительных обновлений версий. Например, можно объединить обновления для дополнительных обновлений или исправлений для зависимостей разработки в один запрос на вытягивание и иметь выделенную группу для обновлений безопасности или версий, влияющих на ключевую область базы кода.

Необходимо настроить группы на отдельную экосистему пакетов, а затем создать несколько групп для каждой экосистемы пакетов с помощью сочетания критериев:

  • Тип обновления Dependabot : applies-to
  • Тип зависимости: dependency-type.
  • Имя зависимости: patterns и exclude-patterns
  • Уровни семантического управления версиями: update-types

Чтобы просмотреть все поддерживаемые значения для каждого критерия, см. раздел groups.

В приведенных ниже примерах представлено несколько различных методов создания групп зависимостей с помощью условий.

Пример 1. Три группы обновлений версий

В этом примере dependabot.yml файл:

  • Создает три группы, называемые "", "production-dependencies``development-dependencies", "" и "rubocop".
  • Использует patterns и dependency-type включает зависимости в группу.
  • Используется exclude-patterns для исключения зависимостей (или нескольких зависимостей) из группы.
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*"

В результате:

  • Обновления версий группируются по типу зависимостей.
  • Зависимости разработки, соответствующие шаблону rubocop* , исключаются из development-dependencies группы.
  • Вместо этого сопоставления зависимостей разработки rubocop* будут включены в группу rubocop . Из-за упорядочения соответствие зависимостей rubocop* рабочей среды будет включено в группу production-dependencies .
  • Кроме того, все группы по умолчанию применяются только к обновлениям версий, так как applies-to ключ отсутствует.

Пример 2. Группированные обновления с исключенными зависимостями

В этом примере dependabot.yml файл:

  • Создает группу с именем "support-dependencies", в рамках настраиваемой конфигурации пакета.
  • Использует patterns это сопоставление с именем зависимости (или несколькими зависимостями) для включения зависимостей в группу.
  • Использует exclude-patterns это сопоставление с именем зависимости (или нескольких зависимостей), чтобы исключить зависимости из группы.
  • Применяет группирование только к обновлениям версий, так как applies-to: version-updates используется.
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-*"

В результате:

  • Большинство зависимостей для пакета объединяются в support-dependencies группу из-за шаблона подстановочного знака ("*") помимо
  • Зависимости, которые соответствуют gc_ruboconfig и gocardless-* исключены из группы, и Dependabot продолжает создавать однократные запросы на вытягивание для этих зависимостей. Это может быть полезно, если обновления для этих зависимостей необходимо проверить с более тщательной проверкой.
  • Для support-dependenciesпараметра Dependabot вызываются только запросы на вытягивание обновлений версий.

Пример 3. Отдельные запросы на вытягивание основных обновлений и сгруппированы для дополнительных или исправлений

В этом примере dependabot.yml файл:

  • Создает группу с именем "angular".
  • Использует patterns это сопоставление с именем зависимости для включения зависимостей в группу.
  • Используется update-type только для включения minor или patch обновления в группу.
  • Применяет группирование только к обновлениям версий, так как applies-to: version-updates используется.
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"

В результате:

  • Dependabot создаст сгруппированные запросы на вытягивание для всех зависимостей Angular, которые имеют дополнительное или исправление обновления.
  • Все основные обновления будут по-прежнему вызываться в виде отдельных запросов на вытягивание.

Пример 4. Сгруппированные запросы на вытягивание для дополнительных обновлений или исправлений и нет запросов на вытягивание для основных обновлений

В этом примере dependabot.yml файл:

  • Создает две группы с именем "angular" и "minor-and-patch".
  • Используется applies-to таким образом, что первая группа применяется только к обновлениям версий, а вторая группа применяется только к обновлениям системы безопасности.
  • Используется update-type только для включения minor или patch обновления для обеих групп.
  • ignore Использует условие для исключения обновлений версий major @angular* пакетов.
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"]

В результате:

  • Обновления дополнительных и исправлений для зависимостей Angular группируются в один запрос на вытягивание.
  • Дополнительные обновления безопасности и исправления для зависимостей Angular также группируются в один запрос на вытягивание.
  • Dependabot не будет автоматически открывать запросы на вытягивание основных обновлений для Angular.