Skip to main content

Enterprise Server 3.21 está disponível no momento como versão candidata a lançamento.

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 todos os repositórios.

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
API de envio de dependênciaAceita 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.

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.

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 estão disponíveis nos insights de dependência da sua organização.

Para saber mais, confira Using the dependency submission API.

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. 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.
  3. Os resultados da análise estática são usados quando nenhum outro dado está disponível.