Skip to main content
Publicamos atualizações frequentes em nossa documentação, e a tradução desta página ainda pode estar em andamento. Para obter as informações mais recentes, acesse a documentação em inglês. Se houver problemas com a tradução desta página, entre em contato conosco.

Automatizando o Dependabot com GitHub Actions

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

People with write permissions to a repository can configure GitHub Actions to respond to Dependabot-created pull requests.

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.

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

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

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 seu 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 gravação e depuração de GitHub Actions, consulte "Conhecendo o GitHub Actions".