Note: Dependabot security and version updates are currently in private beta and subject to change. Please contact your account management team for instructions on enabling Dependabot updates.
Note: Your site administrator must set up Atualizações de Dependabot for your GitHub Enterprise Server instance before you can use this feature. Para obter mais informações, consulte "Habilitar Dependabot para a sua empresa."
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.
GITHUB_TOKEN
tem permissões somente leitura, a menos que seu administrador tenha removido as restrições.- Os segredos são inacessíveis, a menos que o seu administrador tenha removido restrições.
Para obter mais informações, consulte "Manter seus GitHub Actions e fluxos de trabalho seguro: Evitando solicitações de pwn".
Observação: O administrador do seu site pode substituir essas restrições para your GitHub Enterprise Server instance. Para obter mais informações, consulte "Solucionar problemas de GitHub Actions para a sua empresa."
Se as restrições forem removidas, quando um fluxo de trabalho é acionado por Dependabot, ele terá acesso a segredos de GitHub Actions e poderá usar o termo permissões
para aumentar o escopo padrão do GITHUB_TOKEN
de acesso somente leitura. Você pode ignorar as etapas specíficas nas seções "Gerenciando eventos de pull_request
" e "Gerenciando eventos de push
", pois elas não se aplicam mais.
Manipulando eventos de pull_request
Se o fluxo de trabalho precisar de acesso a segredos ou um GITHUB_TOKEN
com permissões de gravação, você tem duas opções: usar pull_request_target
ou usar dois fluxos de trabalho separados. Nós iremos detalhar o uso de pull_request_target
nesta seção e o uso de dois fluxos de trabalho abaixo em "Gerenciar eventos
de push".
Abaixo está um exemplo simples de um fluxo de trabalho pull_request
que agora pode ter falha:
### This workflow now has no secrets and a read-only token
name: Dependabot Workflow
on:
pull_request
jobs:
dependabot:
runs-on: ubuntu-latest
# Always check the actor is Dependabot to prevent your workflow from failing on non-Dependabot PRs
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
Você pode substituir pull_request
com pull_request_target
, que é usado para pull requests a partir da bifurcação e fazer checkout explicitamente do HEAD
do o pull request.
Aviso: Usar pull_request_target
como um substituto para pull_request
expõe você a um comportamento inseguro. Recomendamos que você use o método de fluxo de trabalho, conforme descrito abaixo em "Gerenciar eventos
de push.
### This workflow has access to secrets and a read-write token
name: Dependabot Workflow
on:
pull_request_target
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: actions/checkout@v2
with:
# Check out the pull request HEAD
ref: ${{ github.event.pull_request.head.sha }}
github-token: ${{ secrets.GITHUB_TOKEN }}
Também é altamente recomendável que você reduza o escopo das permissões concedidas ao GITHUB_TOKEN
para evitar vazamento de um token com mais privilégios do que o necessário. Para obter mais informações, consulte "Permissões para o GITHUB_TOKEN
".
Gerenciar eventos
de push
Como não há nenhum pull_request_target
equivalente para eventos push
, você terá que usar dois fluxos de trabalho: um fluxo de trabalho não confiável que termina fazendo o upload de artefatos, que aciona um segundo fluxo de trabalho confiável que faz o download de artefatos e continua processando.
O primeiro fluxo de trabalho executa qualquer trabalho não confiável:
### This workflow doesn't have access to secrets and has a read-only token
name: Dependabot Untrusted Workflow
on:
push
jobs:
check-dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- uses: ...
O segundo fluxo de trabalho executa trabalho confiável após a conclusão do primeiro fluxo de trabalho com sucesso:
### This workflow has access to secrets and a read-write token
name: Dependabot Trusted Workflow
on:
workflow_run:
workflows: ["Dependabot Untrusted Workflow"]
types:
- completed
permissions:
# Downscope as necessary, since you now have a read-write token
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.event.workflow_run.conclusion == 'success' }}
steps:
- uses: ...
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.
Observação: Se o administrador do seu site tiver substituído as restrições para Dependabot em your GitHub Enterprise Server instance, você poderá usar pull_request
em vez de pull_request_target
nos fluxos de trabalho a seguir.
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_target
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: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
# The following properties are now available:
# - steps.dependabot-metadata.outputs.dependency-names
# - steps.dependabot-metadata.outputs.dependency-type
# - steps.dependabot-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_target
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: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Add a label for all production dependencies
if: ${{ steps.dependabot-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: dependabot-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
Se você quiser permitir que os mantenedores marquem certos pull requests para o merge automático, você pode usar a funcionalidade de merge automático de GitHub. 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".
Em vez disso, você pode usar GitHub Actions e GitHub CLI. Aqui está um exemplo que faz o merge automático de todas as atualizações do patch para my-dependency
:
name: Dependabot auto-merge
on: pull_request_target
permissions:
contents: write
jobs:
dependabot:
runs-on: ubuntu-latest
if: ${{ github.actor == 'dependabot[bot]' }}
steps:
- name: Dependabot metadata
id: dependabot-metadata
uses: dependabot/fetch-metadata@v1.1.1
with:
github-token: "${{ secrets.GITHUB_TOKEN }}"
- name: Enable auto-merge for Dependabot PRs
if: ${{contains(steps.dependabot-metadata.outputs.dependency-names, 'my-dependency') && steps.dependabot-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
. - Você não está tentando acessar segredos de dentro de um evento acionado por Dependabot
pull_request
,pull_request_review
,pull_request_review_comment
oupush
. - Você não está tentando executar qualquer ação de
gravar
de dentro de um evento acionado pelo Dependabotpull_request
,pull_request_review
,pull_request_review_comment
oupush
.
Para obter informações sobre gravação e depuração de GitHub Actions, consulte "Conhecendo o GitHub Actions".