Hentede pakkeversioner
Et afhængighedsfund siger, at en version er erklæret et eller andet sted. Pull-optællingen siger noget andet: hvilke pakkeversioner der faktisk blev downloadet, af hvilken forbruger, og hvor nylig. Den optælles fra registrets adgangslog, så den dækker dine egne pakker i fremforges registry og de pakker, din organisation henter gennem afhængighedsproxyen, herunder hentninger fra CI uden for fremforge, der bruger en registry-robot.
Siden 2026-10-13 tælles en download, som et Forgejo Actions-job foretager gennem afhængighedsproxyen, og som proxyen leverer fra sin cache, direkte her og gemmes ikke som en hændelse i adgangsloggen (se registrets adgangslog). Optællingen er derfor registreringen af de hentninger: pr. UTC-døgn, pakkeversion og repository, med de kørsler, der hentede dem.
Hvad der tæller som en hentning
En hentning er en vellykket download, der angiver en version: en npm-tarball, en PyPI-fil, en Maven-artefakt, en NuGet-pakke, en Go-modul-zip, en generisk eller anden registry-fil eller et container-image hentet via tag. Disse tælles ikke:
- læsninger af metadata, for eksempel et npm-packument eller et PyPI simple index;
- afviste forespørgsler;
- downloads af container-lag, som kun angiver en digest.
En download, som en politik i skyggetilstand ville have afvist, men lod passere, tæller som en hentning.
Forbrugere
Hver hentning tilskrives den forbruger, adgangsloggen registrerede:
| Type | Hvem | Navngivet ved |
|---|---|---|
job | Et token fra et Forgejo Actions-job | Jobbets repository, <owner>/<repo>. run_ids angiver de Actions-kørsler, der hentede versionen |
robot | En registry-robot | Robottens navn. login indeholder dens bot-bruger |
bot | En anden systembot i fremforge | Dens login |
user | En persons token eller session | Personens login |
anonymous | En forespørgsel uden credential | Intet |
Hvilke advisories der kobles på
- Versioner hentet gennem afhængighedsproxyen (npm, PyPI, Maven, NuGet og
Go) sammenholdes med det OSV-advisory-index, som proxyens
pakkepolitik evaluerer. Versionsintervaller
evalueres, ikke kun præcise versioner.
sourceeradvisory_index. - Versioner af dine egne pakker i registret får de åbne fund for den
pakkefil, altså de samme fund, som pakkepolitikken læser. Afviste og løste
fund udelades.
sourceerpackage_findings. - Container-images tælles med, men denne liste viser ingen advisories for dem. Fund i images står på siderne om image-scanning.
I konsollen
Åbn Sikkerhed › Komponenter › Hentede versioner i organisationens administration. Siden viser de samme versioner som API’et, i samme rækkefølge og med samme filtre: pakkenavn, periode (i dag eller de seneste 7, 30, 90 eller 365 dage), minimumsalvorlighed, økosystem, kilde (dit eget registry eller afhængighedsproxyen), forbrugertype og forbruger. Sæt flueben ved Medtag versioner uden kendt sårbarhed for at se alle hentede versioner, ikke kun de sårbare. Hver række viser den højeste alvorlighed, op til tre advisories med en rettet version, antallet af hentninger pr. forbrugertype, de største forbrugere og hvornår versionen sidst og først blev hentet. Linjen over tabellen angiver, op til hvornår adgangshændelser er talt med. Næste side og Første side bladrer gennem listen; Eksportér CSV downloader alle matchende versioner med de aktuelle filtre, i de samme kolonner som API’ets CSV.
Læs den med API’et
Med et API-token, der har components:read eller findings:read:
curl -sS -H "Authorization: Bearer $FFP_TOKEN" \
"https://frem.sh/_app/api/v1/orgs/acme/components/pulled?days=30&min_severity=high"Som standard indeholder listen kun sårbare versioner, de mest alvorlige først
og derefter de senest hentede. Hvert element har versionen og dens purl, den
højeste severity, advisories med deres rettede versioner, det samlede antal
pulls, hentninger pr. forbrugertype, first_seen_at og last_seen_at samt
op til ti consumers med deres egne antal og tidspunkter. En forbruger af typen
job har også run_ids: op til 20 id’er på Actions-kørsler
(GITHUB_RUN_ID), der hentede versionen i perioden, nyeste først.
| Filter | Betydning |
|---|---|
days | Hvor mange UTC-døgn tilbage, inklusive i dag: 1 til 730, standard 30 |
vulnerable | true (standard) for versioner med en åben advisory; false for alle hentede versioner |
min_severity | low, medium, high eller critical |
ecosystem | Pakketypen: npm, pypi, maven, nuget, go, container, … |
origin | registry (dine egne pakker) eller proxy (afhængighedsproxyen) |
name | Et pakkenavn, præcist |
consumer_kind | job, robot, bot, user eller anonymous |
consumer | Et repository (owner/name), et robotnavn eller et login |
run_id | Id’et på en Actions-kørsel (GITHUB_RUN_ID): kun de versioner, den kørsel hentede |
For at se, hvad ét build hentede, angiver du dets kørsels-id med 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"Send en sides next_cursor som cursor for at få næste side med de samme
filtre, og stop, når den er null. En side indeholder op til 500 versioner
(limit). Tilføj format=csv for at få alle matchende versioner som CSV. En
forespørgsel, der matcher mere end 50.000 versioner, besvares med
413 too-many-rows; indsnævr den. Se API-referencen for den
fulde struktur.
Hvor frisk den er, og hvor længe den gemmes
Optællingen samles fra adgangsloggen hver time. window.rolled_up_to i svaret
angiver, op til hvornår adgangshændelser er talt med. CI-downloads leveret fra
afhængighedsproxyens cache lægges til, efterhånden som de kommer, uden at vente
på den timevise sammentælling.
Optællingen følger adgangsloggens
opbevaring af bevismateriale og slettes af det
samme daglige job: et døgns optællinger forsvinder, når den nyeste download,
de tæller, er ældre end opbevaringsperioden for access_log, eller for
access_log_ci ved CI-hentninger gennem afhængighedsproxyen. Så længe et
retsligt tilbageholdelseskrav (legal hold) er aktivt, slettes intet.
I dataeksporten
Hver dataeksport indeholder optællingen som
metadata/pulled-versions.ndjson, én linje pr. UTC-døgn, pakkeversion og
forbruger, altså de rækker, denne side lægger sammen. Se
Eksportskema. Advisories er ikke med i
filen: de kobles på, når du læser listen, ud fra advisory-data, der ændrer sig
over tid.
Begrænsninger
- En hentning er ikke en udrulning. En version kan være hentet af et build og aldrig være sendt ud, eller hentet én gang og cachet i månedsvis.
- Hentninger fra caches uden for fremforge ses ikke. Kun forespørgsler, der når fremforges registry eller afhængighedsproxy, tælles.
- Teams registreres ikke. En brugers hentning tilskrives brugeren.
- Kørsels-id’er gemmes fra 2026-10-13. Pr. UTC-døgn, pakkeversion og repository gemmes de 100 nyeste kørsler; et repository, der kører mere end 100 builds om dagen, som henter den samme version, beholder antallet af alle hentninger, men kun id’erne på de 100 nyeste kørsler.
- Optællingen registrerer ikke, hvilket job i en kørsel der hentede en version, eller det præcise tidspunkt for hver hentning, kun den første og sidste i døgnet.