# 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.

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 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](/pt/code-security/supply-chain-security/understanding-your-software-supply-chain/dependency-graph-supported-package-ecosystems).

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](/pt/code-security/supply-chain-security/understanding-your-software-supply-chain/configuring-automatic-dependency-submission-for-your-repository).

##

```
          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](/pt/code-security/how-tos/secure-your-supply-chain/manage-your-dependency-security/configuring-access-to-private-registries-for-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.

> \[!NOTE]
> 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.

> \[!NOTE]
> 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](/pt/code-security/supply-chain-security/understanding-your-software-supply-chain/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](/pt/rest/dependency-graph/dependency-submission).
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.
   ```