Les résultats de la détection des dépendances signalés par GitHub Enterprise Cloud peuvent être différents des résultats renvoyés par d’autres outils. Il existe de bonnes raisons à cela et il est utile de comprendre comment GitHub détermine les dépendances pour votre projet.
Le graphe de dépendances ne trouve-t-il des dépendances que dans les manifestes et les fichiers de verrouillage ?
Le graphe des dépendances inclut automatiquement des informations sur les dépendances qui sont explicitement déclarées dans votre environnement. Autrement dit, les dépendances spécifiées dans un manifeste ou un fichier de verrouillage. En outre, le graphe de dépendances inclut généralement les dépendances transitives, même si elles ne sont pas spécifiées dans un fichier de verrouillage, en examinant les dépendances des dépendances dans un fichier manifeste.
Le graphe des dépendances n'inclut pas automatiquement les dépendances « non structurées ». Les dépendances « lâches » sont des fichiers individuels qui sont copiés à partir d’une autre source et archivés directement dans le dépôt ou dans une archive (par exemple, un fichier ZIP ou JAR), plutôt qu’utilisés comme références dans le manifeste ou le fichier de verrouillage d’un gestionnaire de package.
Cependant, vous pouvez utiliser l'option API de soumission de dépendances pour ajouter des dépendances au graphe des dépendances d'un projet. Cette fonctionnalité s'applique même si les dépendances ne sont pas déclarées dans un manifeste ou un fichier de verrouillage, comme les dépendances résolues lors de la construction d'un projet. Les dépendances soumises à un projet avec l’API API de soumission de dépendances indiquent le détecteur qui a été utilisé pour leur soumission et quand elles ont été soumises. Pour plus d'informations sur les API de soumission de dépendances, consultez « Utilisation de l’API de soumission de dépendances. »
Point à vérifier : La dépendance manquante pour un composant qui n’est pas spécifié se trouve-t-elle dans le manifeste ou dans le fichier de verrouillage du dépôt ?
Le graphe de dépendances détecte-t-il les dépendances spécifiées avec des variables ?
Le graphe de dépendances analyse les manifestes à mesure qu’ils sont poussés (push) vers GitHub. Ainsi, le graphe de dépendances n’a pas accès à l’environnement de génération du projet. Il ne peut donc pas résoudre les variables utilisées dans les manifestes. Si vous utilisez des variables dans un manifeste pour spécifier le nom, ou plus communément la version d'une dépendance, alors cette dépendance ne sera pas automatiquement incluse dans le graphe des dépendances.
Cependant, vous pouvez utiliser l'option API de soumission de dépendances pour ajouter des dépendances au graphe des dépendances d'un projet, même si les dépendances ne sont résolues que lorsque le projet est construit. Pour plus d'informations sur l'API API de soumission de dépendances, consultez « Utilisation de l’API de soumission de dépendances. »
Point à vérifier : La dépendance manquante est-elle déclarée dans le manifeste avec une variable pour son nom ou sa version ?
Existe-t-il des limites qui affectent les données du graphe de dépendances ?
Oui, le graphe de dépendances a une catégorie de limites :
-
Limites de traitement
Celles-ci affectent le graphe de dépendances affiché dans GitHub et empêchent également la création d’Dependabot alerts
Les manifestes de plus de 0,5 Mo sont traités uniquement pour les comptes d’entreprise. Pour les autres comptes, les manifestes de plus de 0,5 Mo sont ignorés et ne créent pas d’Dependabot alerts.
Par défaut, GitHub ne traite pas plus de 150 manifestes par dépôt. Les Dependabot alerts ne sont pas créées pour les manifestes au-delà de cette limite, et les Dependabot alerts peuvent se comporter de manière imprévisible si cette limite est dépassée.
Les fichiers manifestes stockés dans des répertoires portant des noms généralement utilisés pour les dépendances placées dans le répertoire vendor ne seront pas traités. Un répertoire dont le nom correspond aux expressions régulières suivantes est considéré comme un répertoire de dépendances placées dans le répertoire vendor :
(3rd|[Tt]hird)[-_]?[Pp]arty/
(^|/)vendors?/
(^|/)[Ee]xtern(als?)?/
(^|/)[Vv]+endor/
Exemples :
- third-party/dependencies/dependency1
- vendors/dependency1
- /externals/vendor1/dependency1