Skip to main content

Solução de problemas do Dependabot no GitHub Actions

Este artigo fornece informações de solução de problemas que você pode encontrar ao usar o Dependabot com GitHub Actions.

Restrições quando Dependabot dispara 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 pelo Dependabot (github.actor == 'dependabot[bot]') usando os eventos pull_request, pull_request_review, pull_request_review_comment, push, create, deployment e deployment_status, as seguintes restrições se aplicam:

  • GITHUB_TOKEN tem permissões somente leitura por padrão.
  • Os segredos são preenchidos do Dependabot. Os segredos de GitHub Actions não estão disponíveis.

Para fluxos de trabalho iniciados pelo Dependabot (github.actor == 'dependabot[bot]') usando o evento pull_request_target, se a referência de base da solicitação de pull tiver sido criada pelo Dependabot (github.event.pull_request.user.login == 'dependabot[bot]'), o GITHUB_TOKEN será somente leitura e os segredos não ficarão disponíveis.

Essas restrições se aplicam mesmo se o fluxo de trabalho for executado novamente por um ator diferente.

Para obter mais informações, confira Como manter suas GitHub Actions e seus fluxos de trabalho seguros: prevenção contra solicitações pwn.

Solucionar problemas de falhas quando Dependabot dispara fluxos de trabalho existentes

Depois de configurar as atualizações do Dependabot para sua instância do GitHub Enterprise Server, você poderá ver as falhas quando os fluxos de trabalho existentes forem disparados por eventos do Dependabot.

Por padrão, as execuções de fluxo de trabalho do GitHub Actions disparadas pelo Dependabot dos eventos push, pull_request, pull_request_review ou pull_request_review_comment são tratados como se eles fossem abertos de um fork do repositório. Ao contrário dos fluxos de trabalho disparados por outros atores, isso significa que eles recebem o GITHUB_TOKEN somente leitura e não têm acesso a nenhum segredo que esteja normalmente disponível. Isso fará com que quaisquer fluxos de trabalho que tentam gravar no repositório falhem quando forem acionados por Dependabot.

Há três maneiras de resolver este problema:

  1. Você pode atualizar seus fluxos de trabalho para que não sejam mais disparados pelo Dependabot usando uma expressão como: if: github.actor != 'dependabot[bot]'. Para saber mais, confira Avaliar expressões em fluxos de trabalho e ações.
  2. Modifique seus fluxos de trabalho para usar um processo de duas etapas que inclui pull_request_target que não tem essas limitações. Para saber mais, confira Solução de problemas do Dependabot no GitHub Actions.
  3. Forneça fluxos de trabalho disparados pelo acesso do Dependabot aos segredos e permita que o termo permissions aumente o escopo padrão do GITHUB_TOKEN.

Alguns conselhos de solução de problemas são fornecidos neste artigo. Você também pode ver Sintaxe de fluxo de trabalho para o GitHub Actions.

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ê precisa armazenar todos os segredos que são usados por um fluxo de trabalho acionado por eventos Dependabot como segredos de Dependabot. Para saber mais, confira Configurando o acesso a registros privados para Dependabot.

Os segredos do Dependabot são adicionados ao contexto secrets e referenciados usando exatamente a mesma sintaxe dos segredos do GitHub Actions. Para saber mais, confira Usar segredos em ações do GitHub.

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 obter exemplos que usam condições, confira Automatizando o Dependabot com GitHub Actions.

Para acessar um registro de contêiner privado na AWS com um nome de usuário e uma senha, um fluxo de trabalho precisa incluir um segredo para username e password.

Neste exemplo, quando o Dependabot dispara o fluxo de trabalho, os segredos do 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.

YAML
name: CI
on:
  pull_request:
    branches: [ main ]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout repository
        uses: actions/checkout@v4

      - name: Login to private container registry for dependencies
        uses: docker/login-action@3b4c5d6e7f8a9b0c1d2e3f4a5b6c7d8e9f0a1b2c
        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)

Como alterar as permissões GITHUB_TOKEN

Por padrão, os fluxos de trabalho do GitHub Actions disparados pelo Dependabot obtêm um GITHUB_TOKEN com permissões somente leitura. Use a chave permissions no fluxo de trabalho para aumentar o acesso ao token:

YAML
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 saber mais, confira Autenticação automática de token.

Reexecutando manualmente um fluxo de trabalho

Quando você reexecutar manualmente um fluxo de trabalho Dependabot, ele será executado com os mesmos privilégios de antes, mesmo que o usuário que iniciou a nova execução tenha privilégios diferentes. Para saber mais, confira Reexecutando fluxos de trabalho e trabalhos.