Versions de paquets téléchargées
Un résultat de dépendance indique qu’une version est déclarée quelque part. Le recensement des téléchargements dit autre chose : quelles versions de paquets ont réellement été téléchargées, par quel consommateur, et à quand cela remonte. Il est compté à partir du journal d’accès au registre ; il couvre donc vos propres paquets dans le registre fremforge et les paquets que votre organisation télécharge via le proxy de dépendances, y compris les téléchargements depuis une CI extérieure à fremforge qui utilise un robot de registre.
Depuis le 2026-10-13, un téléchargement qu’une tâche Forgejo Actions effectue via le proxy de dépendances, et que le proxy sert depuis son cache, est compté ici directement et n’est pas stocké comme événement dans le journal d’accès (voir journal d’accès au registre). Le recensement est donc la trace de ces téléchargements : par jour UTC, version de paquet et dépôt, avec les exécutions qui les ont effectués.
Ce qui compte comme téléchargement
Un téléchargement est une récupération réussie qui nomme une version : une archive npm, un fichier PyPI, un artefact Maven, un paquet NuGet, un zip de module Go, un fichier générique ou d’un autre registre, ou une image de conteneur tirée par tag. Ne sont pas comptés :
- les lectures de métadonnées, comme un packument npm ou un index simple PyPI ;
- les requêtes refusées ;
- les téléchargements de couches de conteneurs, qui ne nomment qu’un digest.
Un téléchargement qu’une politique en mode observation aurait refusé, mais a laissé passer, compte comme téléchargement.
Consommateurs
Chaque téléchargement est attribué au consommateur enregistré par le journal d’accès :
| Type | Qui | Désigné par |
|---|---|---|
job | Un jeton de tâche Forgejo Actions | Le dépôt de la tâche, <owner>/<repo>. run_ids liste les exécutions Actions qui ont téléchargé la version |
robot | Un robot de registre | Le nom du robot. login contient son utilisateur bot |
bot | Un autre bot système fremforge | Son identifiant |
user | Le jeton ou la session d’une personne | Son identifiant |
anonymous | Une requête sans identifiant | Rien |
Quelles alertes sont rapprochées
- Les versions téléchargées via le proxy de dépendances (npm, PyPI, Maven,
NuGet et Go) sont comparées à l’index d’alertes OSV qu’évalue la
politique de paquets du proxy. Les plages
de versions sont évaluées, et pas seulement les versions exactes.
sourcevautadvisory_index. - Les versions de vos propres paquets du registre portent les résultats
ouverts de ce fichier de paquet, les mêmes résultats que lit la politique de
paquets. Les résultats écartés et résolus sont exclus.
sourcevautpackage_findings. - Les images de conteneurs sont comptées, mais cette liste n’affiche aucune alerte pour elles. Les résultats d’image figurent sur les pages d’analyse des images.
Dans la console
Dans l’administration de l’organisation, ouvrez Sécurité › Composants › Versions téléchargées. La page liste les mêmes versions que l’API, dans le même ordre et avec les mêmes filtres : nom du paquet, période (aujourd’hui, ou les 7, 30, 90 ou 365 derniers jours), gravité minimale, écosystème, source (votre propre registre ou le proxy de dépendances), type de consommateur et consommateur. Cochez Inclure les versions sans avis connu pour voir toutes les versions téléchargées, et pas seulement les vulnérables. Chaque ligne indique la gravité la plus élevée, jusqu’à trois alertes avec une version corrigée, le nombre de téléchargements par type de consommateur, les principaux consommateurs, et la date du dernier et du premier téléchargement de la version. La ligne au-dessus du tableau indique jusqu’à quand les événements d’accès ont été comptés. Page suivante et Première page permettent de parcourir la liste ; Exporter en CSV télécharge toutes les versions correspondant aux filtres actuels, dans les mêmes colonnes que le CSV de l’API.
Lecture avec l’API
Avec un jeton d’API qui porte components:read ou findings:read :
curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/components/pulled?days=30&min_severity=high"Par défaut, la liste ne contient que les versions vulnérables, les plus graves
d’abord, puis les plus récemment téléchargées. Chaque élément comporte la
version et son purl, la severity la plus élevée, les advisories avec
leurs versions corrigées, le total des pulls, les téléchargements par type de
consommateur, first_seen_at et last_seen_at, et jusqu’à dix consumers
avec leurs propres comptes et dates. Un consommateur job a aussi des
run_ids : jusqu’à 20 identifiants d’exécution Actions (GITHUB_RUN_ID) qui
ont téléchargé la version pendant la période, les plus récents d’abord.
| Filtre | Signification |
|---|---|
days | Nombre de jours UTC en arrière, aujourd’hui compris : de 1 à 730, 30 par défaut |
vulnerable | true (par défaut) pour les versions ayant une alerte ouverte ; false pour toutes les versions téléchargées |
min_severity | low, medium, high ou critical |
ecosystem | Le type de paquet : npm, pypi, maven, nuget, go, container, … |
origin | registry (vos propres paquets) ou proxy (le proxy de dépendances) |
name | Un nom de paquet, exact |
consumer_kind | job, robot, bot, user ou anonymous |
consumer | Un dépôt (owner/name), un nom de robot ou un identifiant |
run_id | Un identifiant d’exécution Actions (GITHUB_RUN_ID) : uniquement les versions téléchargées par cette exécution |
Pour voir ce qu’un build a téléchargé, passez son identifiant d’exécution avec
vulnerable=false :
curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/components/pulled?run_id=123456&vulnerable=false&days=7"Passez le next_cursor d’une page comme cursor pour obtenir la page
suivante, avec les mêmes filtres, et arrêtez-vous lorsqu’il vaut null. Une
page contient jusqu’à 500 versions (limit). Ajoutez format=csv pour obtenir
toutes les versions correspondantes au format CSV. Une requête qui correspond à
plus de 50 000 versions répond 413 too-many-rows ; affinez-la. Voir la
référence de l’API pour la forme complète.
Fraîcheur et durée de conservation
Le recensement est agrégé à partir du journal d’accès toutes les heures.
window.rolled_up_to dans la réponse indique jusqu’à quand les événements
d’accès ont été comptés. Les téléchargements de CI servis depuis le cache du
proxy de dépendances sont ajoutés à mesure qu’ils arrivent, sans attendre
l’agrégation horaire.
Le recensement suit la
conservation des preuves du journal
d’accès, et il est supprimé par la même tâche quotidienne : les comptes d’une
journée disparaissent dès que le téléchargement le plus récent qu’ils comptent
dépasse la durée de conservation access_log, ou la durée access_log_ci pour
les téléchargements de CI via le proxy de dépendances. Tant qu’une conservation
légale est en place, rien n’est supprimé.
Dans l’export de données
Chaque export de données contient le recensement sous la
forme metadata/pulled-versions.ndjson, une ligne par jour UTC, version de
paquet et consommateur : les lignes que cette page additionne. Voir
Export schema. Les alertes ne figurent pas
dans le fichier : elles sont rapprochées au moment où vous lisez la liste, à
partir de données d’alertes qui évoluent dans le temps.
Limites
- Un téléchargement n’est pas un déploiement. Une version peut être téléchargée par un build sans jamais être livrée, ou téléchargée une fois et mise en cache pendant des mois.
- Les téléchargements depuis des caches extérieurs à fremforge ne sont pas vus. Seules les requêtes qui atteignent le registre fremforge ou le proxy de dépendances sont comptées.
- Les équipes ne sont pas enregistrées. Le téléchargement d’un utilisateur est attribué à cet utilisateur.
- Les identifiants d’exécution sont conservés depuis le 2026-10-13. Par jour UTC, version de paquet et dépôt, les 100 exécutions les plus récentes sont conservées ; un dépôt qui lance plus de 100 builds par jour téléchargeant la même version conserve le compte de chaque téléchargement, mais uniquement les identifiants des 100 exécutions les plus récentes.
- Le recensement n’enregistre ni quelle tâche d’une exécution a téléchargé une version, ni l’heure exacte de chaque téléchargement, seulement le premier et le dernier de la journée.