Sobre Dependabot e GitHub Actions
Dependabot cria pull requests para manter suas dependências atualizadas, e você pode usar GitHub Actions para executar tarefas automatizadas quando estes pull requests forem criados. Por exemplo, busque artefatos adicionais, adicione etiquetas, execute testes ou modifique o pull request.
Respondendo aos eventos
Dependabot consegue acionar fluxos de trabalho de GitHub Actions nos seus pull requests e comentários. No entanto, certos eventos são tratados de maneira diferente.
Para fluxos de trabalho iniciados por Dependabot (github.actor == "dependabot[bot]"
) que usam eventos de pull_request
, pull_request_review
, pull_request_review_comment
, push
, create
, deployment
, and deployment_status
, aplicam-se as restrições a seguir:
GITHUB_TOKEN
tem permissões somente leitura por padrão.- Os segredos são preenchidos a partir dos segredos de Dependabot. Os segredos de GitHub Actions não estão disponíveis.
Para fluxos de trabalho iniciados por Dependabot (github.actor == "dependabot[bot]"
) que usam eventos de pull_request_target
, se a referência da base do pull request foi criada por Dependabot (github.actor == "dependabot[bot]"
), the GITHUB_TOKEN
será somente leitura e os segredos não estarão disponíveis.
Para obter mais informações, consulte "Manter seus GitHub Actions e fluxos de trabalho seguro: Evitando solicitações de pwn".
Alterando as permissões de GITHUB_TOKEN
Por padrão, os fluxos de trabalho de GitHub Actions acionados por Dependabot obtêm um GITHUB_TOKEN
com permissões de somente leitura. Você pode usar a chave de permissões
no seu fluxo de trabalho para aumentar o acesso do token:
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:
...
Para obter mais informações, consulte "Modificar as permissões para o GITHUB_TOKEN".
Acessar segredos
Quando um evento de Dependabot aciona um fluxo de trabalho, os únicos segredos disponíveis para o fluxo de trabalho são segredos de Dependabot. Os segredos de GitHub Actions não estão disponíveis. Consequentemente, você deve armazenar todos os segredos que são usados por um fluxo de trabalho acionado por eventos Dependabot como segredos de Dependabot. Para obter mais informações, consulte "Gerenciar segredos criptografados para o Dependabot. ".
Os segredos de Dependabot são adicionados ao contexto segredos
e referenciados usando exatamente a mesma sintaxe que os segredos para GitHub Actions. Para obter mais informações, consulte "Segredos criptografados".
Se você tiver um fluxo de trabalho que será acionado por Dependabot e também por outros atores, a solução mais simples é armazenar o token com as permissões necessárias em uma ação e em um segredo Dependabot com nomes idênticos. Em seguida, o fluxo de trabalho pode incluir uma única chamada para esses segredos. Se o segredo de Dependabot tiver um nome diferente, use condições para especificar os segredos corretos para diferentes atores. Para exemplos que usam condições, consulte "automações comuns" abaixo.
Para acessar um registro de contêiner privado no AWS com um nome de usuário e senha, um fluxo de trabalho deverá incluir um segredo para nome de usuário
e senha
. No exemplo abaixo, quando Dependabot aciona o fluxo de trabalho, os segredos de Dependabot com os nomes READONLY_AWS_ACCESS_KEY_ID
e READONLY_AWS_ACCESS_KEY
são usados. Se outro ator disparar o fluxo de trabalho, as ações secretas com esses nomes serão usadas.
name: CI
on:
pull_request:
branches: [ main ]
jobs:
build:
runs-on: ubuntu-latest
steps:
- name: Checkout repository
uses: actions/checkout@v3
- name: Login to private container registry for dependencies
uses: docker/login-action@v1
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)
Reexecutando manualmente um fluxo de trabalho
Você também pode executar novamente um fluxo de trabalho pendente no Dependabot, e ele será executado com um token de leitura-gravação e acesso a segredos. Antes de executar manualmente um fluxo de trabalho com falha, você deve sempre verificar se a dependência está sendo atualizada para garantir que a mudança não introduza qualquer comportamento malicioso ou não intencional.
Automações comuns de dependência
Aqui estão vários cenários comuns que podem ser automatizados usando GitHub Actions.
Obter metadados sobre um pull request
Uma grande quantidade de automação supõe o conhecimento do conteúdo do pull request: qual era o nome da dependência, se for uma dependência de produção, e se for uma atualização maior, menor ou de patch.
A ação dependabot/fetch-metadata
fornece todas as informações para você:
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@v1.1.1
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
Para obter mais informações, consulte o repositório dependabot/fetch-metadata
.
Etiquetar um pull request
Se você tiver outras automações ou fluxos de trabalho de triagem com base nas etiquetas de GitHub, poderá configurar uma ação para atribuir etiquetas com base nos metadados fornecidos.
Por exemplo, se você quiser sinalizar todas as atualizações de dependências de produção com uma etiqueta:
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@v1.1.1
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}}
Aprovar um pull request
Se você quiser aprovar automaticamente os pull requests do Dependabot, você poderá usar o GitHub CLI em um fluxo de trabalho:
name: Dependabot auto-approve
on: pull_request_target
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@v1.1.1
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}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Habilitar o merge automático em um pull request
If you want to allow maintainers to mark certain pull requests for auto-merge, you can use GitHub's auto-merge functionality. Isto permite que o pull request seja mesclado quando todos os testes e aprovações forem cumpridos com sucesso. Para obter mais informações sobre merge automático, consulte "Fazer merge automático de um pull request".
You can instead use GitHub Actions and the GitHub CLI. Here is an example that auto merges all patch updates to my-dependency
:
name: Dependabot auto-merge
on: pull_request
permissions:
contents: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: metadata
uses: dependabot/fetch-metadata@v1.1.1
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}}
GITHUB_TOKEN: ${{secrets.GITHUB_TOKEN}}
Ocorreu uma falha na solução de problemas de execução do fluxo de trabalho
Se a execução do fluxo de trabalho falhar, verifique o seguinte:
- Você só está executando o fluxo de trabalho quando o ator correto o acionar.
- Você está fazendo o checkout do
ref
correto para o seupull_request
. - Os seus segredos estão disponíveis nos secredos de Dependabot, ao invés estar nos segredos de GitHub Actions.
- Você tem um
GITHUB_TOKEN
com as permissões corretas.
Para obter informações sobre gravação e depuração de GitHub Actions, consulte "Conhecendo o GitHub Actions".