O grafo de dependência pode identificar as dependências do projeto usando os métodos a seguir.
| Método | Como funciona |
|---|
**Análise estática** | Analisa os arquivos de manifesto e bloqueio em seu repositório |
| | | Dependabot trabalhos gráficos | Utiliza um fluxo de trabalho Dependabot GitHub Actions para gerar snapshots de dependências. | | | | | | Envio automático | Executa um fluxo de trabalho GitHub Actions interno para resolver dependências 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 gráfico, 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 gráfico é atualizado quando você altera um arquivo de manifesto ou bloqueio compatível em seu branch padrão, ou quando uma dependência muda 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. Ao ativar o envio automático de dependências para um repositório, o GitHub identifica automaticamente as dependências transitivas no repositório para ecossistemas suportados. Confira Ecossistemas de pacotes com suporte a gráficos de dependência.
Em segundo plano, o envio automático de dependências executa um fluxo de trabalho GitHub Actions que gera a árvore completa e a carrega usando a API de envio de dependência. O envio automático de dependências é executado em runners hospedados no GitHub por padrão e conta para seus GitHub Actions minutos. Opcionalmente, você pode optar por executá-lo em runners auto-hospedados ou em 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 trabalhos gráficos
Esse método usa um tipo especial de tarefa Dependabot que cria um instantâneo de dependência e o carrega na API de submissão de dependência. Atualmente, há suporte apenas para dependências de Go.
Essa abordagem é semelhante ao envio automático de dependências, mas não gera cobranças por GitHub Actions minutos. Ele também pode acessar configurações de toda a organização para registros privados que você configurou para Dependabot.
A API de envio de dependência
Você pode chamar o API de envio de dependência em 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 enviadas para API de envio de dependência na forma de um instantâneo. 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 fluxo de trabalho GitHub Actions, poderá usar uma ação pré-configurada para seu ecossistema que coleta automaticamente as dependências e as envia para a 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.
-
**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.
-
**Os envios automáticos** têm a segunda prioridade mais alta, pois também são criados durante compilações de artefato, mas não são enviados pelos usuários. -
**Os resultados da análise estática** são usados quando nenhum outro dado está disponível.