Skip to main content

Cómo reconoce el gráfico de dependencias las dependencias

El grafo de dependencias analiza automáticamente los archivos de manifiesto. Puede enviar datos para las dependencias que no se pueden detectar automáticamente.

¿Quién puede utilizar esta característica?

El gráfico de dependencias está disponible para los siguientes tipos de repositorio:

  • Repositorios públicos (activado de manera predeterminada)
  • Los repositorios privados
  • Horquillas

El gráfico de dependencias puede identificar las dependencias del proyecto mediante los métodos siguientes.

MétodoCómo funciona
Análisis estáticoAnaliza los archivos de manifiesto y de bloqueo en tu repositorio
Dependabot trabajos de gráficoUsa un DependabotGitHub Actions flujo de trabajo para generar instantáneas de dependencia
Envío automáticoEjecuta un flujo de trabajo integrado GitHub Actions para resolver las dependencias en tiempo de compilación.
API de envío de dependenciasAcepta los datos de dependencia que envíe mediante programación.

Una vez que las dependencias están en el gráfico, puede recibir Dependabot alerts y Dependabot security updates para cualquier vulnerabilidad conocida.

Análisis estático

Al habilitar el gráfico de dependencias, GitHub examina el repositorio para ver los archivos de manifiesto admitidos y analiza el nombre y la versión de cada paquete. El gráfico se actualiza al cambiar un manifiesto compatible o un archivo de bloqueo en la rama predeterminada, o cuando cambia una dependencia en su propio repositorio.

El análisis estático puede identificar:

  • Dependencias directas definidas explícitamente en un manifiesto o archivo de bloqueo
  • Dependencias indirectas: dependencias de estas dependencias directas, también denominadas "dependencias transitivas", pero solo si se definen en un manifiesto o archivo de bloqueo, no si se resuelven en tiempo de compilación.

Para obtener el gráfico más fiable, debe utilizar archivos de bloqueo (o su equivalente), ya que estos definen exactamente qué versiones de las dependencias directas e indirectas está utilizando actualmente. Los archivos de bloqueo también garantizan que todos los colaboradores del repositorio usen las mismas versiones, lo que le permitirá probar y depurar código. Además, las dependencias indirectas inferidas de los archivos de manifiesto (en lugar de los archivos de bloqueo) se excluyen de las comprobaciones de vulnerabilidad.

Envío automático de dependencias

Algunos ecosistemas resuelven dependencias indirectas en tiempo de compilación, por lo que el análisis estático no puede ver el árbol de dependencias completo. Al habilitar el envío automático de dependencias para un repositorio, GitHub identifica automáticamente las dependencias transitivas del repositorio para los ecosistemas admitidos. Consulta Ecosistemas de paquetes que soportan el gráfico de dependencias.

En segundo plano, el envío automático de dependencias ejecuta un GitHub Actions flujo de trabajo que genera el árbol completo y lo carga mediante el uso de API de envío de dependencias. El envío automático de dependencias se ejecuta en GitHubejecutores hospedados de forma predeterminada y cuenta hacia los GitHub Actions minutos. Opcionalmente, puede optar por ejecutarlo en ejecutores autohospedados o ejecutores más grandes.

Para habilitar el envío automático de dependencias, consulte Configuración del envío automático de dependencias para el repositorio.

Dependabot tareas de procesamiento de grafos

Dependabot Los trabajos de grafo utilizan un tipo especial de Dependabot trabajo para crear un resumen de dependencias y cargarlo en la API para la presentación de dependencias. Dependabot Los trabajos de grafos se admiten actualmente para las dependencias de Go y Python.

En el caso de los ecosistemas admitidos, los trabajos de grafos de Dependabot proporcionan:

  • Cobertura completa de dependencias transitivas, lo que significa que Dependabot puede avisarle de vulnerabilidades en dependencias indirectas que el análisis estático puede pasar por alto.
  • Acceso privado al registro a través Dependabot de secretos configurados en el nivel de organización o repositorio. Para más información, consulta Configuración del acceso a registros privados para Dependabot.
  • Los paquetes privados que no son accesibles a través de secretos configurados Dependabot se omiten correctamente del gráfico de dependencias sin provocar un error.

Este método es similar al envío automático de dependencias, pero no incurre en cargos por GitHub Actions minutos. También puede acceder a configuraciones de toda la organización para los registros privados que ha configurado para Dependabot.

Nota:

Dependabot Los procesos de trabajos de grafo tienen prioridad sobre la presentación automática de dependencias. Por ejemplo, si el repositorio de Python solía utilizar la presentación automática de dependencias, esos trabajos ya no se ejecutarán una vez que los trabajos de grafo estén activos. El único requisito es que el gráfico de dependencias esté habilitado para el repositorio.

El API de envío de dependencias

Puede llamar a API de envío de dependencias en su propio script o flujo de trabajo. Esto es útil si:

  • Debe enviar dependencias transitivas que no se puedan detectar desde archivos de bloqueo.
  • Debe crear lógica personalizada o usar un sistema de CI/CD externo.

Las dependencias se envían a API de envío de dependencias en forma de instantánea. Se trata de una lista de dependencias asociadas a un SHA de confirmación y otros metadatos, que reflejan el estado actual de su repositorio.

Si llama a la API en un GitHub Actions flujo de trabajo, puede usar una acción realizada previamente para el ecosistema que recopila automáticamente las dependencias y las envía a la API. De lo contrario, puede escribir su propia acción o llamar a la API desde un sistema externo.

Las dependencias enviadas se mostrarán en la revisión de dependencias, pero no están disponibles en la información de dependencias de la organización.

Nota:

La API de revisión de dependencias y la API de envío de dependencias funcionan conjuntamente. Esto significa que la API de revisión de dependencias incluirá las dependencias enviadas a través de la API de envío de dependencias.

Para más información, consulta Uso de la Dependency submission API.

Establecimiento de prioridades

Un repositorio puede utilizar múltiples métodos para la presentación de dependencias, lo que puede hacer que el mismo manifiesto de paquete se analice varias veces, potencialmente con resultados diferentes de cada análisis. El gráfico de dependencias usa lógica de desduplicación para analizar las salidas y priorizar la información más precisa para cada archivo de manifiesto.

El gráfico de dependencias muestra solo una instancia de cada archivo de manifiesto mediante las siguientes reglas de precedencia.

  1. Los envíos de usuario tienen la prioridad más alta, ya que normalmente se crean durante las compilaciones de artefactos que tienen la información más completa.
    • Si hay varias instantáneas manuales de diferentes detectores, se ordenan alfabéticamente por correlación y la primera usada.
    • Si hay dos correladores con el mismo detector, se combinan las dependencias resueltas. Para obtener más información sobre los correladores y detectores, consulte Puntos de conexión de la API de REST para el envío de dependencias.
  2. ** Dependabot los trabajos de grafo** tienen la segunda prioridad más alta. En los ecosistemas en los que los trabajos de grafos están disponibles (actualmente Go y Python), tienen prioridad sobre el envío automático de dependencias.
  3. Los envíos automáticos tienen la siguiente prioridad, ya que también se crean durante las compilaciones de artefactos, pero los usuarios no los envían.
  4. Los resultados de análisis estáticos se usan cuando no hay otros datos disponibles.