Sobre os erros do Dependabot
O Dependabot gera pull requests para atualizar dependências. Dependendo de como o repositório está configurado, o Dependabot poderá gerar solicitações de pull para atualizações de versão e/ou para atualizações de segurança. Você gerencia essas pull requests da mesma forma que qualquer outra pull request, mas também existem alguns comandos extras disponíveis. Para obter mais informações sobre como habilitar as atualizações de dependência de Dependabot, confira "Configurando as atualizações de segurança do Dependabot" e "Configurando a versão das atualizações do Dependabot".
Se algo impedir o Dependabot de criar um pull request, este será relatado como erro.
Observação: Dependabot não cria solicitações de pull para repositórios inativos. Para obter informações sobre os critérios de inatividade, confira "Sobre as atualizações de segurança do Dependabot" e "Sobre as atualizações da versão do Dependabot", para atualizações de segurança e versão, respectivamente.
Investigar erros com Dependabot security updates
Quando Dependabot está impedido de criar um pull request para corrigir um alerta de Dependabot, ele publica a mensagem de erro no alerta. A exibição do Dependabot alerts mostra uma lista de todos os alertas que ainda não foram resolvidos. Para acessar a exibição de alertas, clique em Dependabot alerts na guia Segurança do repositório. Quando um pull request que corrigirá a dependência vulnerável foi gerado, o alerta inclui um link para esse pull request.
Há vários motivos pelos quais um alerta pode não ter um link de solicitação de pull:
-
Dependabot security updates não estão habilitadas para o repositório.
-
O alerta é sobre malware e não há nenhuma versão segura do pacote.
-
O alerta é para uma dependência indireta ou transitória que não está explicitamente definida em um arquivo de bloqueio.
-
Um erro impediu Dependabot de criar um pull request.
Se um erro impediu que Dependabot criasse um pull request, você pode exibir os detalhes do erro clicando no alerta.
Investigar erros com Dependabot version updates
Quando o Dependabot é impedido de criar uma solicitação de pull para atualizar uma dependência em um ecossistema, você pode exibir a lista de logs de trabalho para saber mais sobre o erro .
A lista de logs de trabalho pode ser acessada no gráfico de dependências de um repositório. No gráfico de dependências, clique na guia do Dependabot e à direita do arquivo de manifesto afetado, clique em Trabalhos de atualização recentes.
Para exibir os arquivos de logs completos de um trabalho específico, à direita da entrada de log na qual você está interessado, clique em exibir logs.
Para obter mais informações, confira "Exibir logs de trabalho do Dependabot".
Entender os erros de Dependabot
Pull requests para atualizações de segurança atuam para atualizar uma dependência vulnerável à versão mínima que inclui uma correção para a vulnerabilidade. Em contrapartida, os pull requests para atualizações de versão agem para atualizar uma dependência da versão mais recente permitida pelo manifesto do pacote e pelos arquivos de configuração de Dependabot. Consequentemente, alguns erros são específicos para um tipo de atualização.
Dependabot não pode atualizar a DEPENDÊNCIA para uma versão não vulnerável
Somente atualizações de segurança. O Dependabot não pode criar uma solicitação de pull para atualizar a dependência vulnerável para uma versão segura sem desfazer outras dependências no grafo de dependência desse repositório.
Cada aplicativo com dependências tem um gráfico de dependências, ou seja, um gráfico direcionado acíclico de cada versão de pacote da qual o aplicativo depende direta ou indiretamente. Toda vez que uma dependência é atualizada, este gráfico deve ser resolvido. Caso contrário, o aplicativo não será criado. Quando um ecossistema tem um gráfico de dependência profundo e complexo, por exemplo, npm e RubyGems, geralmente é impossível atualizar uma única dependência sem atualizar todo o ecossistema.
A melhor maneira de evitar esse problema é manter-se atualizado com as versões mais recentes, habilitando, por exemplo, as atualizações de versões. Isso aumenta a probabilidade de que uma vulnerabilidade em uma dependência possa ser resolvida por meio de uma atualização simples que não afete o gráfico de dependência. Para obter mais informações, confira "Configurando a versão das atualizações do Dependabot".
Dependabot tenta atualizar dependências sem um alerta
Somente atualizações de segurança. Dependabot atualiza dependências transitivas definidas explicitamente que são vulneráveis para todos os ecossistemas. Para npm, Dependabot gerará uma solicitação de pull que também atualizará a dependência pai se for a única maneira de corrigir a dependência transitiva.
Por exemplo, um projeto com uma dependência no A
versão ~2.0.0
que tem uma dependência transitiva no B
versão ~1.0.0
que foi resolvido para 1.0.1
.
my project
|
--> A (2.0.0) [~2.0.0]
|
--> B (1.0.1) [~1.0.0]
Se uma vulnerabilidade de segurança for lançada para o B
versões <2.0.0
e um patch estiver disponível em 2.0.0
, então Dependabot tentará atualizar B
, mas descobrirá que não é possível, devido à restrição em vigor pelo A
, que só permite versões vulneráveis mais baixas. Para corrigir a vulnerabilidade, Dependabot procurará atualizações na dependência A
, que permitem que seja usada a versão corrigida de B
.
Dependabot gera automaticamente uma solicitação de pull que atualiza as dependências transitivas pai e filho bloqueados.
Dependabot não consegue atualizar para a versão necessária, pois já existe um pull request aberto para a última versão
Somente atualizações de segurança. O Dependabot não criará uma solicitação de pull para atualizar a dependência vulnerável para uma versão segura porque já há uma solicitação de pull em aberto para atualizar essa dependência. Você verá este erro quando uma vulnerabilidade for detectada em uma única dependência e já houver um pull request aberto para atualizar a dependência para a última versão.
Existem duas opções: você pode revisar o pull request aberto e fazer o merge assim que estiver confiante de que a mudança é segura, ou fechar o pull request e acionar um novo pull request de atualização de segurança. Para obter mais informações, confira "Como disparar uma solicitação de pull do Dependabot manualmente".
O Dependabot esgotou o tempo durante esta atualização
Dependabot demorou mais do que o tempo máximo permitido para avaliar a atualização necessária e preparar um pull request. Em geral, esse erro é visto apenas em repositórios grandes com muitos arquivos de manifesto, por exemplo, projetos de repositório único do npm ou do YARN com centenas de arquivos package.json. As atualizações no ecossistema do Composer também levam mais tempo para ser avaliadas e podem expirar.
Este erro é difícil de ser corrigido. Se uma atualização de versão atingir o tempo limite, você poderá especificar as dependências mais importantes para atualização usando o parâmetro allow
ou, como alternativa, usar o parâmetro ignore
para excluir algumas dependências das atualizações. Atualizar sua configuração pode permitir que Dependabot revise a atualização da versão e gere o pull request no tempo disponível.
Se uma atualização de segurança expirar, você pode reduzir as chances de isso acontecer mantendo as dependências atualizadas, por exemplo, habilitando atualizações de versão. Para obter mais informações, confira "Configurando a versão das atualizações do Dependabot".
Dependabot não consegue abrir mais nenhum pull request
Há um limite no número de pull requests abertos que Dependabot irá gerar. Quando este limite é atingido, nenhum pull request novo será aberto e este erro será relatado. A melhor maneira de resolver este erro é revisar e fazer merge alguns dos pull requests abertos.
Existem limites separados para solicitações de atualização de versões e segurança, para que os pull requests de atualização de versão aberta não possam bloquear a criação de uma solicitação de atualização de segurança. O limite para pull requests de atualização de segurança é 10. Por padrão, o limite para as atualizações de versão é 5, mas você pode alterá-lo usando o parâmetro open-pull-requests-limit
no arquivo de configuração. Para obter mais informações, confira "Opções de configuração para o arquivo dependabot.yml".
A melhor maneira de resolver este erro é fazer o merge ou fechar alguns dos pull requests existentes e acionar um novo pull request manualmente. Para obter mais informações, confira "Como disparar uma solicitação de pull do Dependabot manualmente".
Dependabot não pode resolver ou acessar suas dependências
Se Dependabot tentar verificar se as referências de dependências precisam ser atualizadas em um repositório, mas não puder acessar um ou mais arquivos referenciados, a operação irá falhar com a mensagem de erro "Dependabot can't resolve your LANGUAGE dependency files." O tipo de erro da API é git_dependencies_not_reachable
.
Da mesma forma, se Dependabot não pode acessar um registro de pacote privado em que uma dependência está localizada, gera-se um dos erros a seguir:
- "O Dependabot não pode acessar uma dependência em um registro de pacote privado"
(Tipo de erro da API:private_source_not_reachable
) - "O Dependabot não pode se autenticar em um registro de pacote privado"
(Tipo de erro da API:private_source_authentication_failure
) - "O Dependabot atingiu o tempo limite enquanto aguardava um registro de pacote privado"
(Tipo de erro da API:private_source_timed_out
) - "O Dependabot não pôde validar o certificado para um registro de pacote privado"
(Tipo de erro da API:private_source_certificate_failure
)
Para permitir que Dependabot atualize as referências de dependências com sucesso, certifique-se de que todas as dependências referenciadas estejam hospedadas em locais acessíveis.
Somente atualizações de versão. Ao executar atualizações de segurança ou versão, alguns ecossistemas devem ser capazes de resolver todas as dependências de sua fonte para verificar se as atualizações foram bem-sucedidas. Se o seu manifesto ou arquivos de bloqueio contiverem dependências privadas, Dependabot deverá ser capaz de acessar o local em que essas dependências estão hospedadas. Os proprietários da organização podem conceder a Dependabot acesso a repositórios privados que contêm dependências para um projeto dentro da mesma organização. Para obter mais informações, confira "Gerenciando as configurações de segurança e de análise da sua organização". Você pode configurar o acesso a registros privados no arquivo de configuração dependabot.yml
de um repositório. Para obter mais informações, confira "Opções de configuração para o arquivo dependabot.yml". Adicionalmente, Dependabot não é compatível com dependências privadas GitHub para todos os gerenciadores de pacote. Para obter mais informações, confira "Sobre as atualizações da versão do Dependabot".
Dependabot falha ao agrupar um conjunto de dependências em uma única solicitação de pull
Só é possível criar grupos de Dependabot version updates. Dependabot security updates não dão suporte a atualizações agrupadas. Além disso, se houver uma solicitação de pull agrupada para um pacote vulnerável, Dependabot security updates sempre tentarão criar uma solicitação de pull separada, mesmo se a solicitação de pull de grupo existente for uma atualização da mesma versão ou uma versão posterior.
Você deve configurar grupos por ecossistema de pacotes. Recomendamos conferir os logs para depurar o problema. Para obter informações sobre como acessar os logs de um manifesto, consulte "Investigar erros com Dependabot version updates" acima.
Você pode ter criado grupos vazios acidentalmente. Isso acontece, por exemplo, ao definir um dependency-type
na chave allow
do trabalho geral.
allow:
dependency-type: production
# this restricts the entire job to production dependencies
groups:
development-dependencies:
dependency-type: "development"
# this group will always be empty
Neste exemplo, Dependabot:
- Confira a lista de dependências e restrinja o trabalho às dependências usadas apenas em
production
. - Tente criar um grupo chamado
development-dependencies
, que é um subconjunto dessa lista reduzida. - Determine se o grupo
development-dependencies
está vazio, pois todas as dependênciasdevelopment
foram removidas na etapa 1. - Atualize individualmente todas as dependências que não estão no grupo. Como o grupo de dependências em produção está vazio, Dependabot ignorará o grupo e criará uma solicitação de pull separada para cada dependência.
Você precisa garantir que as configurações não se cancelem mutuamente e atualizá-las como necessário no arquivo de configuração.
Para saber mais sobre como configurar grupos de Dependabot version updates, confira "Opções de configuração para o arquivo dependabot.yml".
Dependabot falha ao atualizar uma das dependências em uma solicitação de pull agrupada
**Apenas atualizações de versão.**Dependabot mostrará a falha na atualização em seus logs, bem como no resumo do trabalho no final de seus logs. Você deve usar o comentário @dependabot recreate
na solicitação de pull para compilar o grupo novamente. Para obter mais informações, confira "Gerenciar pull requests para atualizações de dependências".
Se a dependência ainda não for atualizada, você deverá usar a configuração de exclude-patterns
para que a dependência seja excluída do grupo. Dependabot gerará uma solicitação de pull separada para atualizar a dependência.
Se a atualização da dependência ainda falhar, pode haver um problema com a própria dependência ou com Dependabot nesse ecossistema específico.
Se você desejar ignorar as atualizações de versão para a dependência, siga um destes procedimentos.
- Configure uma regra
ignore
para a dependência no arquivodependabot.yml
. Para obter mais informações, confira "Opções de configuração para o arquivo dependabot.yml". - Use o comando de comentário
@dependabot ignore
para a dependência na solicitação de pull para as atualizações agrupadas. Para obter mais informações, confira "Gerenciar pull requests para atualizações de dependências".
Falha na CI (integração contínua) na minha solicitação de pull agrupada
Somente atualizações de versão. Se a falha ocorrer por causa de uma única dependência, você deve utilizar a configuração de exclude-patterns
para que a dependência seja excluída do grupo. Dependabot gerará uma solicitação de pull separada para atualizar a dependência.
Se você desejar ignorar as atualizações de versão para a dependência, siga um destes procedimentos.
- Configure uma regra
ignore
para a dependência no arquivodependabot.yml
. Para obter mais informações, confira "Opções de configuração para o arquivo dependabot.yml". - Use o comando de comentário
@dependabot ignore
para a dependência na solicitação de pull para as atualizações agrupadas. Para obter mais informações, confira "Gerenciar pull requests para atualizações de dependências".
Se continuar vendo falhas de CI, você deverá remover a configuração do grupo para que Dependabot volte a gerar solicitações de pull individuais para cada dependência. Em seguida, você deve verificar e confirmar se a atualização está funcionando corretamente para cada solicitação de pull individual.
Acionar um pull request de Dependabot manualmente
Se você desbloquear Dependabot, você poderá iniciar manualmente uma nova tentativa de criar um pull request.
- Atualizações de segurança – Veja o alerta do Dependabot que mostra o erro corrigido e clique em Criar atualização de segurança do Dependabot .
- Atualizações de versão – Na guia Insights do repositório, clique em Grafo de dependência e clique na guia Dependabot. Clique em HORA da última verificação para ver o arquivo de log gerado pelo Dependabot durante a última verificação em busca das atualizações de versão. Clique em Procurar atualizações.