Skip to main content

Automatizando o Dependabot com GitHub Actions

Exemplos de como você pode usar GitHub Actions para automatizar tarefas comuns de Dependabot relacionadas.

Quem pode usar esse recurso?

Usuários com com acesso para gravação

Você pode usar o GitHub Actions para executar tarefas automatizadas quando o Dependabot cria pull requests 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, nomes e revisores.

  • 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.

Note

O administrador do site precisa configurar as Dependabot updates do sua instância do GitHub Enterprise Server para que você possa usar esse recurso. Para saber mais, confira Habilitando o Dependabot para sua empresa.

Talvez você não consiga habilitar ou desabilitar Dependabot updates se um proprietário da empresa tiver definido uma política no nível da empresa. Para saber mais, confira Como impor políticas para segurança e análise de código na empresa.

Sobre Dependabot e GitHub Actions

O Dependabot cria pull requests para manter suas dependências atualizadas. Você pode usar GitHub Actions para executar tarefas automatizadas quando essas pull requests são criadas. Por exemplo, buscar artefatos adicionais, adicionar rótulos, executar testes ou modificar a 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, confira Solução de problemas do Dependabot no GitHub Actions.

Aqui estão vários cenários comuns que podem ser automatizados usando GitHub Actions.

Obter metadados sobre uma pull request

A maior parte da automação supõe o conhecimento do conteúdo da 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. Você pode usar uma ação para recuperar informações sobre as dependências que estão sendo atualizadas por uma pull request gerada pelo Dependabot.

Exemplo:

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

Para obter mais informações, confira o repositório dependabot/fetch-metadata.

Como rotular uma pull request

Se você tiver outras automações ou fluxos de trabalho de triagem com base em rótulos do GitHub, poderá configurar uma ação para atribuir etiquetas com base nos metadados fornecidos.

Exemplo que sinaliza todas as atualizações de dependência de produção com um rótulo:

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}}

Aprovação automática de uma pull request

Você pode aprovar automaticamente as pull requests Dependabot usando os dados GitHub CLI em um fluxo de trabalho.

Exemplo:

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}}

Habilitando a geração automática em uma pull request

Se você deseja permitir que os mantenedores marquem determinadas pull requests 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:

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

Se você usar verificações de status para testar pull requests, precisará habilitar a opção Exigir a aprovação das verificações de status antes de mesclar para o branch de destino para pull requests de Dependabot. Essa regra de proteção de branch garante que as pull requests 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.

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 ref correta para o pull_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 como escrever e depurar GitHub Actions, confira Escrevendo fluxos de trabalho.

Para obter mais dicas para ajudar a resolver problemas com fluxos de trabalho, confira Solução de problemas do Dependabot no GitHub Actions.