Configurar o acesso à rede para executores auto-hospedados
Se os executores auto-hospedados operarem atrás de um firewall com acesso restrito à Internet de saída, você deverá adicionar determinadas URLs à lista de permissões para envio automático de dependência. As URLs necessárias dependem dos ecossistemas que seus repositórios usam.
URLs necessárias para todos os ecossistemas
Essas URLs são necessárias para todos os fluxos de trabalho de envio automático de dependências:
https://github.com— Necessário para acessar GitHub e baixar ações.https://api.github.com— Necessário para acesso à GitHub API.https://*.githubusercontent.com– Obrigatório para baixar o código-fonte da ação e de versões (incluindoraw.githubusercontent.com,github-releases.githubusercontent.comeobjects.githubusercontent.com).
URLs específicas do ecossistema
Dependendo dos ecossistemas usados, talvez seja necessário permitir a lista de URLs adicionais.
Go
https://go.dev– Para baixar a cadeia de ferramentas do Go.https://golang.org— Domínio alternativo para downloads do Go.https://proxy.golang.org– Proxy oficial do módulo Go para baixar módulos Go durante a detecção de dependências.
Observação
O repositório actions/go-versions é acessado por meio do https://raw.githubusercontent.com, que já está coberto pelos requisitos gerais.
Java (Maven e Gradle)
https://repo.maven.apache.org– Repositório do Maven Central para baixar dependências.https://api.adoptium.net— Para baixar distribuições do JDK do Adoptium/Temurin (distribuição padrão usada poractions/setup-java).
Para projetos do Gradle, você também precisa de acesso ao Portal do Plug-in do Gradle, em que a ação de autosubmissão github-dependency-graph-gradle-plugin baixa por padrão:
https://plugins.gradle.org— Serve o marcador de plug-in emaven-metadata.xml.https://plugins-artifacts.gradle.org— Serve o POM do plug-in, os metadados do módulo e o JAR. O Portal do Plug-in do Gradle redireciona downloads de artefato para esse host, portanto, a lista de permissões resolve apenasplugins.gradle.orgos metadados e, em seguida, falha quando o artefato do plug-in é baixado.
Se os executores não conseguirem acessar o Portal do Plug-in do Gradle ou se desejarem evitar, dependendo dos hosts que podem ser alterados ao longo do tempo, resolva o plug-in de um repositório interno que você controla. Para obter mais informações, consulte projetos do Gradle.
Se você usar uma distribuição JDK diferente, também poderá precisar:
https://aka.msehttps://download.microsoft.com— Para Microsoft Build do OpenJDK (observação:aka.mstambém é usado para downloads .NET).https://download.oracle.com— Para o Oracle JDK.https://api.azul.com— Para Azul Zulu OpenJDK.
.NET (C#, F#, Visual Basic)
https://aka.ms— um encurtador de URL da Microsoft que redireciona para os locais de download do .NET.https://builds.dotnet.microsoft.com– Feed primário para downloads do SDK e do runtime do .NET.https://ci.dot.net— um feed secundário para compilações de .NET.
Observação
A ferramenta microsoft/component-detection usada pelo .NET autosubmission é baixada dos releases GitHub, que já estão cobertos pelos requisitos gerais (https://github.com e https://*.githubusercontent.com).
Python
https://python.org— para baixar interpretadores de Python.
Observação
O repositório actions/python-versions e as versões microsoft/component-detection são acessados por meio de URLs já abordadas nos requisitos gerais (https://*.githubusercontent.com e https://github.com).
Use GitHubhospedado executores avançados para envio automático de dependência
GitHub Team ou GitHub Enterprise Cloud, os usuários podem usar executores avançados para executar os trabalhos automáticos de submissões de dependências.
- Realize o provisionamento de executores avançados no nível da organização com o nome
dependency-submission. Para obter mais informações, consulte Adicionando um executor avançado a uma organização. - Conceda ao seu repositório acesso ao executor. Para obter mais informações, consulte Permitir que os repositórios acessem executores avançados.
- Em “Grafo de dependência”, clique no menu suspenso próximo a “Envio automático de dependência” e, em seguida, selecione Habilitado para executores rotulados.
Solucionar problemas relacionados à submissão automática de dependências
O envio automático de dependência faz o melhor esforço para armazenar em cache downloads de pacotes entre execuções usando a ação Cache para acelerar os fluxos de trabalho. Para os executores auto-hospedados, talvez você queira gerenciar esse cache em sua infraestrutura. Para fazer isso, você poderá desabilitar o cache interno definindo uma variável de ambiente GH_DEPENDENCY_SUBMISSION_SKIP_CACHE como true. Para saber mais, confira Armazenar informações em variáveis.
Eliminação de duplicação de manifesto
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.
- ** 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.
- 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.
- Os resultados da análise estática são usados quando nenhum outro dado está disponível.
Informações específicas do ecossistema do pacote
Projetos Maven
Para projetos do Maven, o envio automático de dependências executa uma bifurcação de software livre do Envio de dependências de árvore de dependências do Maven. A bifurcação permite GitHub manter a sincronização com o repositório upstream e também preservar algumas alterações aplicáveis apenas ao envio automático. A origem da bifurcação está disponível em advanced-security/maven-dependency-submission-action.
Se as dependências do repositório parecerem imprecisas, verifique se o carimbo de data/hora do último build do grafo de dependência corresponde à última alteração no arquivo pom.xml. O carimbo de data/hora é visível na tabela de alertas na guia Dependabot do repositório. Enviar por push uma confirmação que atualiza o pom.xml iniciará uma nova execução da ação Envio de Árvore de Dependência e forçará uma recompilação do gráfico de dependência desse repositório.
Projetos Gradle
Para projetos Gradle, o envio automático de dependências executa uma bifurcação das ações do Gradle de software livre em gradle/actions. A bifurcação está disponível em actions/gradle-build-tools-actions. Você pode exibir os resultados da ação de envio automático na guia Actions do repositório. Cada execução será rotulada como "Automatic Dependency Submission (Gradle)" e sua saída terá o conteúdo JSON que a ação enviou à API.
Resolvendo o plug-in de envio de um repositório interno
Por padrão, a ação baixa o github-dependency-graph-gradle-plugin portal do Plug-in do Gradle (https://plugins.gradle.org). Para executores auto-hospedados em uma rede restrita, hospedar o plug-in em um repositório interno que você controla, como uma instância privada do Artifactory ou nexus, é mais confiável do que permitir a lista de permissões do portal, cujos hosts e CDNs podem ser alterados ao longo do tempo. Você pode apontar a ação para o repositório interno com essas variáveis de ambiente:
GRADLE_PLUGIN_REPOSITORY_URL— A URL do repositório interno do qual resolver o plug-in.GRADLE_PLUGIN_REPOSITORY_USERNAMEeGRADLE_PLUGIN_REPOSITORY_PASSWORD— Credenciais, se o repositório exigir autenticação.
O envio automático de dependência executa um fluxo de trabalho que GitHub gerencia, não um que você cria em seu repositório, portanto, não é possível adicionar um env: bloco a ele. Você pode definir essas variáveis no executor, mas cada trabalho agendado nesse executor, não apenas trabalhos de envio de dependência automática, as herda.
Se o repositório interno permitir acesso de leitura anônimo, você só precisará definir GRADLE_PLUGIN_REPOSITORY_URL e omitir totalmente as variáveis de credencial, evitando essa preocupação. Se o repositório exigir autenticação, use credenciais somente leitura e um executor dedicado. Para executores de nível empresarial ou de organização, também restrinja o acesso de grupo de executores apenas aos repositórios que precisam dessas credenciais. Consulte Gerenciar o acesso a executores auto-hospedados usando grupos.
A resolução do plug-in de um repositório interno é separada da configuração de como o build resolve suas próprias dependências, por exemplo, um init.gradle arquivo que aponta para um registro interno. Essas variáveis controlam somente de onde o plug-in de envio de dependência é baixado.
Para obter os detalhes mais recentes da configuração, consulte a documentação ações/gradle-build-tools-actions .
projetos .NET
A ação de envio automático do .NET usa o projeto de detecção de componentes de software livre como mecanismo para a detecção de dependência. Ele dá suporte a .NET 8.x, 9.x e 10.x. O envio automático do .NET será executado se o dependabot.yml do repositório definir nuget como um package-ecosystem ou quando houver um arquivo de manifesto com suporte no diretório raiz do repositório. Os arquivos de manifesto com suporte incluem .sln, .csproj, packages.config, .vbproj, .vcxproj e .fsproj.
projetos Python
Os repositórios do Python com o grafo de dependência habilitado usam trabalhos de grafo Dependabot para gerar grafos de dependência. Dependabot as tarefas de processamento de grafo têm precedência sobre envios automáticos de dependência, e o fluxo de trabalho de submissão automática descrito abaixo não será mais executado para projetos em Python. Para saber mais, confira Como o grafo de dependência reconhece dependências.
O envio automático de dependências para Python usa o projeto código aberto component-detection como seu mecanismo subjacente de geração de grafo. A ação de autosubmissão só será executada se houver um requirements.txt arquivo no diretório raiz do repositório. Python não suporta atualmente pacotes privados; os pacotes referenciados em requirements.txt que não estão disponíveis publicamente farão a ação de envio automático falhar.
Observação
Essa ação usa actions/setup-python para instalar Python. Você deve incluir um . python arquivo de versão no repositório para especificar a versão Python a ser instalada.