Skip to main content

Автоматизация Dependabot с помощью GitHub Actions

Примеры того, как можно GitHub Actions автоматизировать распространённые Dependabot связанные задачи.

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

Пользователи с доступом на запись

Примечание.

В этой статье объясняется, как автоматизировать Dependabotзадачи, связанные с -, с помощью GitHub Actions. Для получения дополнительной информации о забеге Dependabot updates с GitHub Actionsиспользованием , см. Dependabot на GitHub Actions runners .

Вы можете автоматизировать GitHub Actions задачи при Dependabot создании pull request, чтобы обновить зависимости. Это полезно, если вы хотите:

  • Убедитесь, Dependabot что pull requests (обновления версий и обновления безопасности) созданы с использованием правильных данных для ваших рабочих процессов, включая метки и имена.

  • Запускайте рабочие процессы, чтобы отправлять Dependabot pull requests (обновления версий и обновления безопасности) в процесс проверки или для автоматического слияния.

О Dependabot и GitHub Actions

Внимание

Если Dependabot репозиторий включен, он всегда будет работать на GitHub Actions, обходя как проверки политики действий, так и отключение на уровне репозитория или организации. Это гарантирует, что рабочие процессы обновления безопасности и версий всегда выполняются при включении Dependabot.

Dependabot Создаёт pull requests, чтобы поддерживать ваши зависимости в актуальном состоянии. Вы можете автоматизировать GitHub Actions задачи при создании этих pull-запросов. Например, получение дополнительных артефактов, добавление меток, выполнение тестов или изменение запроса на вытягивание.

Dependabot может активировать рабочие процессы GitHub Actions в запросах на вытягивание и комментариях; однако некоторые события обрабатываются иначе. Для получения дополнительной информации см. Устранение неполадок зависимостей от действий GitHub.

Примечание.

Вы также можете использовать agentic workflows для анализа зависимостей, сводок обновлений и рекомендаций по исправлению, сохраняя принудительное применение безопасности и объединение в детерминированных GitHub Actions рабочих процессах. Дополнительные сведения см. в разделе Создание агентских рабочих процессов GitHub.

Вот несколько распространённых сценариев pull request, которые можно автоматизировать с помощью GitHub Actions.

Получение метаданных о запросе на вытягивание

Большинству автоматизации требуется знать сведения о содержимом запроса на вытягивание: что такое имя зависимости, если это рабочая зависимость, и если это основное, дополнительное или исправление. Вы можете использовать действие для получения информации о зависимостях, которые обновляются с помощью pull-запроса, сгенерированного .Dependabot

Пример:

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: Dependabot fetch metadata
on: pull_request

permissions:
  pull-requests: write
  issues: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      # The following properties are now available:
      #  - steps.metadata.outputs.dependency-names
      #  - steps.metadata.outputs.dependency-type
      #  - steps.metadata.outputs.update-type

Дополнительные сведения см. в репозитории dependabot/fetch-metadata.

Маркировка запроса на вытягивание

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

Пример, который помечает все обновления зависимостей раб��чей среды меткой:

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: Dependabot auto-label
on: pull_request

permissions:
  pull-requests: write
  issues: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Add a label for all production dependencies
        if: steps.metadata.outputs.dependency-type == 'direct:production'
        run: gh pr edit "$PR_URL" --add-label "production"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}

Автоматическое утверждение запроса на вытягивание

Вы можете автоматически одобрять Dependabot pull request, используя GitHub CLI в рабочем процессе.

Пример:

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: Dependabot auto-approve
on: pull_request

permissions:
  pull-requests: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Approve a PR
        run: gh pr review --approve "$PR_URL"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}
          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Включение автоматического заполнения запроса на вытягивание

Если вы хотите позволить сопровождающим отмечать определённые pull-запросы для автослияния, вы можете использовать GitHubфункцию автослияния в '. Это позволяет объединить запрос на вытягивание при успешном выполнении любых тестов и утверждений, необходимых правилам защиты ветви.

Дополнительные сведения см. в разделе [AUTOTITLE и Автоматическое слияние запроса на вытягивание](/repositories/configuring-branches-and-merges-in-your-repository/managing-protected-branches/managing-a-branch-protection-rule).

Вместо этого можно использовать GitHub Actions и .GitHub CLI Ниже приведен пример автоматического объединения всех обновлений исправлений:my-dependency

YAML
# Этот рабочий процесс использует действия, которые не сертифицированы GitHub.
# Они предоставляются сторонним поставщиком, и на них распространяются
# отдельные условия обслуживания, политика конфиденциальности и поддержка
# документации.
name: Dependabot auto-merge
on: pull_request

permissions:
  contents: write
  pull-requests: write

jobs:
  dependabot:
    runs-on: ubuntu-latest
    if: github.event.pull_request.user.login == 'dependabot[bot]' && github.repository == 'owner/my_repo'
    steps:
      - name: Dependabot metadata
        id: metadata
        uses: dependabot/fetch-metadata@d7267f607e9d3fb96fc2fbe83e0af444713e90b7
        with:
          github-token: "${{ secrets.GITHUB_TOKEN }}"
      - name: Enable auto-merge for Dependabot PRs
        if: contains(steps.metadata.outputs.dependency-names, 'my-dependency') && steps.metadata.outputs.update-type == 'version-update:semver-patch'
        run: gh pr merge --auto --merge "$PR_URL"
        env:
          PR_URL: ${{github.event.pull_request.html_url}}
          GH_TOKEN: ${{secrets.GITHUB_TOKEN}}

Примечание.

Если вы используете проверки статуса для тестирования pull-запросов, необходимо включить «Требовать прохождения проверок статуса» перед слиянием с целевой веткой для Dependabot pull requests. Это правило защиты ветви гарантирует, что запросы на вытягивание не объединяются, если только обязательная проверка состояния не передаются. Дополнительные сведения см. в разделе Управление правилом защиты ветвей.

Если целевая ветка использует очередь слияния, встроенный GITHUB_TOKEN не может добавлять pull requests в очередь. В этом случае необходимо аутентифицировать рабочий процесс с personal access token помощью токена GitHub App , который имеет разрешение на слияние, и использовать его вместо GITHUB_TOKEN этого для шага gh pr merge .

Dependabot и GitHub Actions политики

Обычно возможность запуска рабочего процесса в репозитории зависит от GitHub Actionsпроверок политики и от того, GitHub Actions**** ли он на уровне организации или репозитория. Эти элементы управления могут ограничивать работу рабочих процессов — особенно если внешние действия заблокированы или GitHub Actions полностью отключены.

Однако при Dependabot включении репозитория его рабочие процессы всегда будут выполняться GitHub Actions, обходя как проверки политики действий, так и отключение.

  • Dependabot рабочие процессы не блокируются отключением действий или ограничениями корпоративных политик.
  • Действия, на которые ссылаются в этих рабочих процессах, также разрешены, даже если внешние действия запрещены.

Дополнительные сведения см. в разделе Dependabot на GitHub Actions runners.

Исследование неудачных запусков рабочего процесса

Если выполнение рабочего процесса завершается сбоем, проверьте следующее:

  • Вы выполняете рабочий процесс только в том случае, если он активируется правильным субъектом.
  • Вы извлекаете корректную ref для pull_request.
  • Ваши секреты доступны в Dependabot секретах, а не в виде GitHub Actions секретов.
  • У вас есть GITHUB_TOKEN с надлежащими разрешениями.

Для информации о написании и отладке GitHub Actionsсм. Написание рабочих процессов.

Дополнительные советы по устранению проблем с рабочими процессами см. в разделе Устранение неполадок зависимостей от действий GitHub.