Сведения о Dependabot и GitHub Actions
Dependabot создает запросы на вытягивание для поддержания актуальности зависимостей, и вы можете использовать GitHub Actions для выполнения автоматических задач при создании этих запросов на вытягивание. Например, получение дополнительных артефактов, добавление меток, выполнение тестов или изменение запроса на вытягивание.
Note
В этой статье объясняется, как автоматизировать задачи Dependabot, связанные с %}, с помощью GitHub Actions. Дополнительные сведения о выполнении Dependabot updates на GitHub Actions, см. в разделе "Сведения о зависимостях на GitHub Actions runners".
Реагирование на события
Dependabot может активировать рабочие процессы GitHub Actions в запросах на вытягивание и комментариях; однако некоторые события обрабатываются иначе.
Для рабочих процессов, инициированных Dependabot (github.actor == 'dependabot[bot]'
) с помощью pull_request
, pull_request_review
, , pull_request_review_comment``push
, create``deployment
и deployment_status
событий, применяются следующие ограничения:
GITHUB_TOKEN
имеет разрешения только для чтения по умолчанию.- Секреты заполняются секретами из секретов Dependabot. Секреты GitHub Actions недоступны.
Для рабочих процессов, инициированных Dependabot (github.actor == 'dependabot[bot]'
) с помощью pull_request_target
события, если базовый ссылок запроса на вытягивание был создан Dependabot (),github.actor == 'dependabot[bot]'
доступ к ним будет доступен только для чтения, GITHUB_TOKEN
а секреты недоступны.
Эти ограничения применяются, даже если рабочий процесс повторно запускается другим субъектом.
Дополнительные сведения см. в статье "Обеспечение безопасности действий и рабочих процессов GitHub: предотвращение запросов pwn".
Изменение разрешений GITHUB_TOKEN
По умолчанию рабочие процессы GitHub Actions, активированныеDependabot, получают GITHUB_TOKEN
с разрешениями только на чтение. В рабочем процессе можно использовать ключ permissions
для увеличения доступа к маркеру:
name: CI
on: pull_request
# Set the access for individual scopes, or use permissions: write-all
permissions:
pull-requests: write
issues: write
repository-projects: write
...
jobs:
...
Дополнительные сведения см. в разделе Автоматическая проверка подлинности токенов.
Доступ к секретам
Когда событие Dependabot активирует рабочий процесс, единственными секретами, доступными для рабочего процесса, являются секреты Dependabot. Секреты GitHub Actions недоступны. Следовательно, необходимо хранить все секреты, используемые рабочим процессом, инициированным событиями Dependabot, в виде секретов Dependabot. Дополнительные сведения см. в разделе Настройка доступа к частным реестрам для Dependabot.
Секреты Dependabot добавляются в контекст secrets
, и ссылки на них имеют точно такой же синтаксис, что и секреты для GitHub Actions. Дополнительные сведения см. в разделе Использование секретов в GitHub Actions.
Если у вас есть рабочий процесс, который будет активироваться Dependabot, а также другими субъектами, проще всего сохранить маркер с необходимыми разрешениями в действии и в секрете Dependabot с идентичными именами. Затем рабочий процесс может включать один вызов этих секретов. Если у секрета для Dependabot другое имя, используйте условия, чтобы указать правильные секреты для различных субъектов. Примеры использования условий см. в разделе Распространенные автоматизации ниже.
Чтобы получить доступ к частному реестру контейнеров в AWS с именем пользователя и паролем, рабочий процесс должен содержать секрет для username
и password
. В приведенном ниже примере, когда Dependabot активирует рабочий процесс, используются секреты Dependabot с именами READONLY_AWS_ACCESS_KEY_ID
и READONLY_AWS_ACCESS_KEY
. Если другой субъект активирует рабочий процесс, используются секреты действий с этими именами.
name: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v4
- name: Login to private container registry for dependencies
uses: docker/login-action@v2
with:
registry: https://1234567890.dkr.ecr.us-east-1.amazonaws.com
username: ${{ secrets.READONLY_AWS_ACCESS_KEY_ID }}
password: ${{ secrets.READONLY_AWS_ACCESS_KEY }}
- name: Build the Docker image
run: docker build . --file Dockerfile --tag my-image-name:$(date +%s)
Повторный запуск рабочего процесса вручную
При повторном запуске рабочего процесса Dependabot вручную он будет выполняться с теми же привилегиями, что и раньше, даже если пользователь, инициировавший повторный запуск, обладает другими привилегиями. Дополнительные сведения см. в разделе Повторный запуск рабочих процессов и заданий.
Распространенные автоматизации Dependabot
Ниже приведены несколько распространенных сценариев, которые можно автоматизировать с помощью GitHub Actions.
Получение метаданных о запросе на вытягивание
Для большого объема автоматизации требуется знать о содержимом запроса на вытягивание: имя зависимости, если это зависимость в производственной среде, и является ли это обновлением основной или дополнительной версии или исправлением.
Действие dependabot/fetch-metadata
предоставляет все эти сведения:
name: Dependabot fetch metadata
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v2
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, можно настроить действие для назначения меток на основе предоставленных метаданных.
Например, если вы хотите пометить все обновления зависимости в рабочей среде:
name: Dependabot auto-label
on: pull_request
permissions:
pull-requests: write
issues: write
repository-projects: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v2
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 в рабочем процессе:
name: Dependabot auto-approve
on: pull_request
permissions:
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v2
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)".
В качестве альтернативы правилам защиты ветви можно создавать наборы правил. Дополнительные сведения см. в разделе "Сведения о наборе правил".
Примечание. Если вы используете проверки состояния для тестирования запросов на вытягивание, перед слиянием** целевой ветви для Dependabot запросы на вытягивание необходимо включить **проверки состояния. Это правило защиты ветви гарантирует, что запросы на вытягивание не объединяются, если только обязательная проверка состояния не передаются. Дополнительные сведения см. в разделе Управление правилом защиты ветвей.
Вместо этого можно использовать GitHub Actions и GitHub CLI. Ниже приведен пример автоматического слияния всех исправлений с my-dependency
:
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
pull-requests: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: github.actor == 'dependabot[bot]'
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v2
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}}
Устранение неполадок неудачных запусков рабочих процессов
Если выполнение рабочего процесса завершается сбоем, проверьте следующее:
- Вы выполняете рабочий процесс только в том случае, если он активируется правильным субъектом.
- Вы извлекаете корректную
ref
дляpull_request
. - Секреты доступны в секретах Dependabot, а не GitHub Actions.
- У вас есть
GITHUB_TOKEN
с надлежащими разрешениями.
Сведения о написании и отладке GitHub Actionsсм. в разделе "Написание рабочих процессов".