Skip to main content

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

Примеры использования GitHub Actions для автоматизации распространенных задач, связанных с Dependabot.

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

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

Note

В этой статье объясняется, как автоматизировать задачи Dependabot, связанные с %}, с помощью GitHub Actions. Дополнительные сведения о выполнении Dependabot updates с помощью GitHub Actionsсм. в разделе Сведения о зависимостях на GitHub Actions runners .

Для выполнения автоматизированных задач можно использовать GitHub Actions, когда Dependabot создает запросы на вытягивание для обновления зависимостей. Это полезно, если вы хотите:

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

  • Активация рабочих процессов для отправки запросов на вытягивание Dependabot (обновления версий и обновлений системы безопасности) в процесс проверки или автоматическое слияние.

Сведения о Dependabot и GitHub Actions

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

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

Ниже приведены несколько распространенных сценариев для запросов на вытягивание, которые можно автоматизировать с помощью GitHub Actions.

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

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

Пример:

YAML
name: Dependabot fetch metadata
on: pull_request

permissions:
  pull-requests: write
  issues: write
  repository-projects: 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@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        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
name: Dependabot auto-label
on: pull_request

permissions:
  pull-requests: write
  issues: write
  repository-projects: 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@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        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 с помощью GitHub CLI в рабочем процессе.

Пример:

YAML
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@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        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}}

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

Если вы хотите разрешить поддержке пометить определенные запросы на вытягивание для автоматического замера, можно использовать функции автоматического замера 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
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@4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c3d
        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}}

Note

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

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

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

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

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

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