Skip to main content

Como o grafo de dependência reconhece dependências

O grafo de dependência analisa automaticamente os arquivos de manifesto. Você pode enviar dados para dependências que não podem ser detectadas automaticamente.

Quem pode usar esse recurso?

O gráfico de dependência está disponível para os seguintes tipos de repositório:

  • Repositórios públicos (ativados por padrão)
  • Repositórios privados
  • Forks

O grafo de dependência pode identificar as dependências do projeto usando os métodos a seguir.

MétodoComo funciona
Análise estáticaAnalisa os arquivos de manifesto e bloqueio em seu repositório
**
          Dependabot tarefas de processamento de grafo** | Usa um DependabotGitHub Actions fluxo de trabalho para criar instantâneos de dependência |

| | | | | Envio automático | Executa um fluxo de trabalho interno GitHub Actions para resolver dependências de tempo de compilação | | | API de envio de dependência | Aceita dados de dependência que você envia programaticamente |

Depois que as dependências estiverem no grafo, você poderá receber Dependabot alerts e Dependabot security updates para quaisquer vulnerabilidades conhecidas.

Análise estática

Quando você habilita o grafo de dependência, GitHub verifica o repositório em busca de arquivos de manifesto com suporte e analisa o nome e a versão de cada pacote. O grafo é atualizado quando você altera um manifesto ou arquivo de bloqueio com suporte em seu branch padrão ou quando uma dependência é alterada em seu próprio repositório.

A análise estática pode identificar:

  • Dependências diretas explicitamente definidas em um arquivo de manifesto ou lock.
  • Dependências indiretas — dependências dessas dependências diretas, também chamadas de "dependências transitivas", mas somente se forem definidas em um manifesto ou arquivo de bloqueio, não quando forem resolvidas no momento da compilação.

Para o grafo mais confiável, você deve usar arquivos de bloqueio (ou seus equivalentes), pois eles definem exatamente quais versões das dependências diretas e indiretas você usa no momento. Os arquivos de bloqueio também garantem que todos os colaboradores do repositório estejam usando as mesmas versões, o que facilitará o teste e a depuração de código. Além disso, as dependências indiretas inferidas dos arquivos de manifesto (em vez de arquivos de bloqueio) são excluídas das verificações de vulnerabilidade.

Envio automático de dependência

Alguns ecossistemas resolvem dependências indiretas em tempo de build, portanto, a análise estática não pode ver a árvore de dependência completa. Quando você habilita o envio automático de dependência para um repositório, GitHub identifica automaticamente as dependências transitivas no repositório para ecossistemas com suporte. Confira Ecossistemas de pacotes com suporte a gráficos de dependência.

Em segundo plano, a submissão automática de dependências executa um GitHub Actions fluxo de trabalho que gera a árvore completa e a envia utilizando o API de envio de dependência. O envio automático de dependência é executado em GitHubexecutores hospedados por padrão e conta para seus GitHub Actions minutos. Opcionalmente, você pode optar por executá-lo em corredores auto-hospedados ou executores avançados.

Para ativar o envio automático de dependências, consulte Configuração do envio automático de dependência para o repositório.

          Dependabot tarefas de grafo

          Dependabot as tarefas de grafo usam um tipo especial de tarefa para criar um instantâneo de dependências e enviá-lo à API de envio de dependências. 
          Dependabot Atualmente, há suporte para os trabalhos de gráfico com dependências **Go** e **Python**.

Para ecossistemas com suporte, Dependabot os trabalhos de grafo fornecem:

  • Cobertura completa de dependência transitiva, o que significa que Dependabot pode alertá-lo sobre vulnerabilidades em dependências indiretas que a análise estática pode não detectar.
  • Acesso ao Registro Privado por meio Dependabot de segredos configurados no nível da organização ou do repositório. Para saber mais, confira Configurando o acesso a registros privados para Dependabot.
  • Pacotes privados que não são acessíveis por meio de segredos configurados Dependabot são normalmente omitidos do grafo de dependência sem causar uma falha.

Essa abordagem assemelha-se à submissão automática de dependências, mas não incorre em encargos por GitHub Actions minutos. Ele também pode acessar configurações de toda a organização para os registros privados que você configurou para Dependabot.

Observação

Dependabot os trabalhos de grafo têm precedência sobre a submissão automática de dependências. Por exemplo, se o repositório Python usava anteriormente a submissão automática de dependências, esses trabalhos não serão mais executados assim que os trabalhos de grafo estiverem ativos. O único requisito é que o grafo de dependência esteja habilitado para seu repositório.

O API de envio de dependência

Você pode chamar o API de envio de dependência no seu próprio script ou fluxo de trabalho. Isso será útil se:

  • Você precisa enviar dependências transitivas que não podem ser detectadas a partir de arquivos de bloqueio.
  • Você precisa criar uma lógica personalizada ou usar um sistema de CI/CD externo.

As dependências são submetidas na forma de um instantâneo para o API de envio de dependência. Esta é uma lista de dependências associadas a um commit SHA e outros metadados, refletindo o estado atual do seu repositório.

Se você estiver chamando a API em um GitHub Actions fluxo de trabalho, poderá usar uma ação pré-feita para seu ecossistema que coleta automaticamente as dependências e as envia à API. Caso contrário, você poderá escrever sua própria ação ou chamar a API de um sistema externo.

As dependências enviadas serão mostradas na revisão de dependência, mas não estão disponíveis nos insights de dependência da sua organização.

Observação

A API de revisão de dependência e API de envio de dependência funcionam em conjunto. Isso significa que a API de revisão de dependência incluirá dependências enviadas por meio de API de envio de dependência.

Para saber mais, confira Usar a API de envio de dependências.

Priorização

Um repositório pode usar vários métodos para submissão de dependências, o que pode resultar no manifesto do mesmo pacote sendo analisado múltiplas vezes, potencialmente produzindo saídas diferentes a cada análise. O grafo de dependência usa a lógica de deduplicação para analisar as saídas, priorizando as informações mais precisas para cada arquivo de manifesto.

O grafo de dependência exibe apenas uma instância de cada arquivo de manifesto usando as regras de precedência a seguir.

  1.        **Os envios de usuário** têm a prioridade mais alta, pois geralmente são criados durante compilações de artefatos que têm as informações mais completas.
    
    • Se houver vários instantâneos manuais de detectores diferentes, eles serão classificados em ordem alfabética por correlator e pelo primeiro usado.
    • Se houver dois correlacionadores com o mesmo detector, as dependências resolvidas serão mescladas. Para obter mais informações sobre correlacionadores e detectores, consulte Pontos de extremidade da API REST para envio de dependências.
  2.        **
           Dependabot os trabalhos de grafo** têm a segunda prioridade mais alta. Para ecossistemas em que Dependabot tarefas de grafo estão disponíveis (atualmente Go e Python), elas têm precedência sobre a submissão automática de dependências.
    
  3.        **Os envios automáticos** têm a próxima prioridade, pois também são criados durante builds de artefato, mas não são enviados pelos usuários.
    
  4.        **Os resultados da análise estática** são usados quando nenhum outro dado está disponível.