Observação
Este artigo explica como você pode automatizar tarefas relacionadas do Dependabot usando o GitHub Actions. Para obter mais informações sobre como executar Dependabot updates usando GitHub Actions, consulte Sobre o Dependabot em executores do GitHub Actions.
Você pode usar GitHub Actions para executar tarefas automatizadas quando Dependabot criar solicitações de pull para atualizar dependências. Talvez isso seja útil se você quiser:
-
Verificar se as pull requests do Dependabot (atualizações de versão e atualizações de segurança) são criadas com os dados certos para seus processos de trabalho, incluindo rótulos e nomes.
-
Disparar fluxos de trabalho para enviar pull requests do Dependabot (atualizações de versão e atualizações de segurança) para o processo de revisão ou para mesclar automaticamente.
Sobre Dependabot e GitHub Actions
Importante
Se Dependabot estiver habilitado para um repositório, ele sempre será executado em GitHub Actions, ignorando as verificações de política de Ações e a desabilitação no nível do repositório ou da organização. Isso garante que os fluxos de trabalho de atualização de versão e segurança sempre sejam executados quando o Dependabot estiver habilitado.
O Dependabot cria pull requests para manter suas dependências atualizadas. Você pode usar GitHub Actions para executar tarefas automatizadas quando essas solicitações de pull forem criadas. Por exemplo, busque artefatos adicionais, adicione etiquetas, execute testes ou modifique o pull request.
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 obter mais informações, consulte Como solucionar problemas do Dependabot no GitHub Actions.
Aqui estão vários cenários comuns para solicitações de pull que podem ser automatizadas usando GitHub Actions.
Obter metadados sobre um pull request
A maioria das automações exige que você tenha informações sobre o conteúdo da solicitação de pull: 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. Você pode usar uma ação para recuperar informações sobre as dependências que estão sendo atualizadas por uma solicitação de pull gerada por Dependabot.
Exemplo:
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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
Para obter mais informações, confira o repositório dependabot/fetch-metadata.
Etiquetar uma solicitação de pull
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.
Exemplo que sinaliza todas as atualizações de dependências de produção com uma etiqueta:
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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}}
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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}}
Aprovar automaticamente uma solicitação de pull
Você pode aprovar automaticamente as solicitações de pull de Dependabot usando GitHub CLI em um fluxo de trabalho.
Exemplo:
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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}}
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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}}
Habilitar a mesclagem automática em uma solicitação de pull
Se você deseja permitir que os mantenedores marquem determinadas solicitações de pull para mesclagem automática,você pode usar a funcionalidade de mesclagem automática de GitHub Isto permite que a solicitação de pull seja mesclada quando todos os testes e as aprovações exigidos pelas regras de proteção de branch forem cumpridos com sucesso.
Para saber mais, confira Fazer merge automático de um pull request e Gerenciar uma regra de proteção de branch.
Em vez disso, você pode usar GitHub Actions e GitHub CLI. Veja um exemplo que mescla automaticamente todas as atualizações de patch para my-dependency:
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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}}
# Esse fluxo de trabalho usa ações que não são certificadas pelo GitHub.
# São fornecidas por terceiros e regidas por
# termos de serviço, política de privacidade e suporte separados
# online.
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}}
Observação
Se você usar verificações de status para testar as solicitações de pull, será necessário habilitar a opção Exigir a aprovação das verificações de status antes de mesclar para o branch de destino para as solicitações de pull de Dependabot. Essa regra de proteção de branch garante que as solicitações de pull não sejam mescladas, a menos que todas as verificações de status necessárias sejam aprovadas. Para saber mais, confira Gerenciar uma regra de proteção de branch.
Políticas do Dependabot e do GitHub Actions
Normalmente, se um fluxo de trabalho pode ser executado em um repositório depende de verificações de política do GitHub Actions e de se GitHub Actions está marcado como enabled no nível da organização ou do repositório. Esses controles podem impedir a execução de fluxos de trabalho, especialmente quando ações externas são bloqueadas ou o GitHub Actions está totalmente desabilitado.
No entanto, quando Dependabot está habilitado para um repositório, seus fluxos de trabalho sempre serão executados no GitHub Actions, ignorando as verificações de política e a desabilitação de Ações.
- Os fluxos de trabalho do Dependabot não são bloqueados pela desabilitação de Ações ou restrições de políticas empresariais.
- As ações mencionadas nesses fluxos de trabalho também podem ser executadas, mesmo que ações externas não sejam permitidas.
Para obter mais informações, confira Sobre o Dependabot em executores do GitHub Actions.
Investigando execuções de fluxo de trabalho com falha
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 check-out da
refcorreta para opull_request. - Os seus segredos estão disponíveis nos segredos de Dependabot, ao invés estar nos segredos de GitHub Actions.
- Você tem um
GITHUB_TOKENcom as permissões corretas.
Para obter informações sobre como escrever e depurar GitHub Actions, confira Escrevendo fluxos de trabalho.
Para obter mais dicas sobre como solucionar problemas com fluxos de trabalho, consulte Como solucionar problemas do Dependabot no GitHub Actions.