Eksportskjema
Denne siden er skjemaet for den fullstendige dataeksporten: hva pakken inneholder, og hvilken form hver post har. Hvordan du starter en eksport, verifiserer den, og hvilke grenser som gjelder, står på siden om dataeksport. Databehandleravtalen §9 viser hit.
Pakkens oppbygning
export-<your-org-slug>-<YYYY-MM-DDTHH-MM-SS-mmmZ>.tar.gz
├── VERIFY.md — step-by-step verification recipe
├── manifest.json — every file below, SHA-256 and size
├── manifest.json.intoto.jsonl — DSSE-signed in-toto Statement over manifest.json
├── audit.ndjson — your org's audit events, last 90 days
├── access-log.ndjson — your registry access log (package and container downloads, uploads and deletes; CI cache hits are in pulled-versions.ndjson)
├── bundles/
│ ├── <repo>.bundle — git bundle: full history, every ref
│ └── <repo>.empty — instead of a bundle, for a repository with no commits (zero bytes)
├── findings/ — scan findings, see "Scan findings, policy, attestations and SBOMs" below
├── policy/ — package policy, verdicts, exceptions and scanner settings
├── attestations/ — build provenance and release attestations, with their signatures
├── sboms/ — repository and container-image SBOMs, with an index
└── metadata/
├── packages.ndjson — package inventory, see "Packages" below
├── packages-files.ndjson — every file of every package version
├── packages-container-tags.ndjson — container image tag → manifest digest
├── components.ndjson — third-party component inventory, see "Component inventory" below
├── deployments.ndjson — deployments your CI/CD reported, see "Deployments" below
├── pulled-versions.ndjson — package versions pulled per day and consumer, see "Pulled versions" below
└── <repo>/
├── repo.ndjson — repository settings, description, topics
├── issues.ndjson — every issue, open and closed
├── pulls.ndjson — every pull request, open and closed
├── comments.ndjson — issue and pull-request comments
├── labels.ndjson
├── milestones.ndjson — open and closed
├── releases.ndjson — release metadata; see "Release assets" below
└── lfs-manifest.ndjson — LFS object inventory, see "LFS content" belowRepositorynavn med tegn utenfor a-z 0-9 . _ - vises med disse tegnene erstattet av _.
Standarder som brukes:
- Repositoryer: Gits eget
git bundle-format.git clone <bundle>gjenoppbygger hele repositoryet, med historikk, brancher og tagger. Et repository uten commits har ingenting å pakke, og vises i stedet som en tom<repo>.empty-fil. - Issues, pull requests og de andre
metadata/-filene: NDJSON, ett JSON-objekt per linje, i samme form som Forgejo-API-et returnerer for hvert objekt. - Revisjonslogg: NDJSON, én hendelse per linje (
id,action,actor,fields_json,created_at). Samme form som fremforges interne revisjonsstrøm. - Tilgangslogg for registeret: NDJSON, eldste først, én hendelse per linje i formen som
GET /orgs/{slug}/access-logreturnerer, med klient-IP-er og innlogginger slik de ble registrert. Den dekker alt som fortsatt oppbevares innenfor oppbevaringsperioden for revisjonsloggen din. Se Tilgangslogg for registeret. - Integritet:
manifest.jsonlister hver fil med SHA-256-hash og størrelse. Manifestet er DSSE-signert med fremforges Ed25519-byggenøkkel. Signaturen ligger imanifest.json.intoto.jsonlog verifiseres mot den offentlige tillitsroten påhttps://www.frem.sh/.well-known/slsa-trust-root.jsonmedopenssl,jq,python3ogcurl, uten noe fremforge-verktøy. Hele oppskriften står iVERIFY.mdinne i pakken og i §«Verifisere det signerte manifestet» på siden om dataeksport. Dette er den samme tillitsroten som publiseres for SLSA-byggeattesteringer: én nøkkel, to predikattyper, null avhengighet av Sigstore.
Ingen proprietære formater. Alt i pakken kan leses med vanlige åpen kildekode-verktøy. Ingen fremforge-CLI kreves.
Pakker
metadata/packages.ndjson er oversikten over organisasjonens pakkeregister: én linje per pakkeversjon, med type (container, npm, maven, pypi, generic, …), name og version, slik Forgejos pakke-API lister dem.
metadata/packages-files.ndjson lister hver fil i hver av disse versjonene, én linje per fil:
| Felt | Betydning |
|---|---|
owner, type, name, version | pakkeversjonen filen hører til |
file_id, file_name | filens identifikator og navn i registeret |
size | størrelse i byte |
sha256 | SHA-256 for filen; i tillegg sha512 der registeret registrerer en |
download_path | stien på frem.sh som laster ned akkurat denne filen med et API-token (Authorization: token …); registeret kan svare med en omdirigering til objektlagring. null for registertyper der fil-URL-en ikke kan utledes fra oversikten alene (for eksempel Maven); bruk web_path for disse |
web_path | nedlastingslenken til filen på pakkesiden, for en innlogget nettleser |
For containerimager er en pakkeversjon en tag (eller, for et manifest uten tag, som én plattform i et multi-arch-image, selve digesten). metadata/packages-container-tags.ndjson kobler hver tag til manifestets digest (owner, name, tag, manifest_digest), som er det docker pull <image>@sha256:… og andre OCI-verktøy bruker. Imagets lag og konfigurasjon vises i packages-files.ndjson som filer navngitt etter digesten, med download_path som peker til registerets endepunkter /v2/…/blobs/… og /v2/…/manifests/….
Sjekk en nedlastet fil mot oversikten:
row=$(jq -c 'select(.name=="@acme/lib" and .version=="1.2.0")' metadata/packages-files.ndjson)
curl -sSL -H "Authorization: token $TOKEN" -o pkg.bin "https://frem.sh$(jq -r .download_path <<<"$row")"
echo "$(jq -r .sha256 <<<"$row") pkg.bin" | sha256sum -c -Oversikten ligger alltid i pakken. Selve pakkefilene kommer bare på forespørsel, som et eget arkiv: se §«Innholdet i pakkene».
Komponentoversikt
metadata/components.ndjson er organisasjonens oversikt over tredjepartskomponenter: én linje per komponent og sted den brukes eller ble brukt, de samme radene som GET /orgs/{slug}/components/usages svarer med. Bruk som er avsluttet, beholdes i 180 dager og er med, slik at historikken følger med deg.
| Felt | Betydning |
|---|---|
purl, ecosystem, name, version | komponenten, som en package URL og delene av den |
licence, licence_source | lisensuttrykket, og hvor det ble lest fra |
subject_kind, subject_name, subject_ref | hvor den brukes: repositoryet, pakken eller imaget, og ref eller digest |
image_tags | for et image, taggene som peker på det; ellers tom |
source_repo | repositoryet som bygde den, der det er kjent |
is_direct | true for en direkte avhengighet, false for en transitiv, null der SBOM-en ikke sier noe |
environment, environment_source | miljøklassen (sandbox, development, test eller production) og hvordan den ble satt |
is_current, first_seen_at, last_seen_at, removed_at | om bruken er gjeldende, og når den først og sist ble sett og ble fjernet |
Utrullinger
metadata/deployments.ndjson inneholder hver utrulling CI/CD-en din rapporterte med POST /orgs/{slug}/repos/{repo}/deployments, én linje per utrulling, eldste først etter identifikator.
| Felt | Betydning |
|---|---|
id | utrullingens identifikator |
repository, environment, environment_class | repositoryet (owner/name), miljønavnet du oppga, og klassen (sandbox, development, test, staging eller production) |
ref, sha, task, description | ref og commit som ble rullet ut, oppgaven (deploy hvis du ikke oppga en annen) og beskrivelsen din |
image_digests, packages | image-digestene og pakke-URL-ene utrullingen nevner |
state | siste status: pending, queued, in_progress, success, failure, error eller inactive |
creator_kind, creator, run_id | hvem som rapporterte den (job, robot, user eller token), navnet, og Actions-kjøringen for en jobb |
created_at, updated_at | når den ble rapportert og sist endret |
statuses | hver status, nyeste først: state, description, log_url, environment_url, creator_kind, creator, created_at |
Pullede versjoner
metadata/pulled-versions.ndjson er pull-tellingen: én linje per UTC-døgn, pakkeversjon og forbruker, for dagene som fortsatt oppbevares innenfor oppbevaringsperioden for tilgangsloggen din. Siden 2026-10-13 er den eneste oversikt over nedlastingene en CI-jobb gjorde gjennom avhengighetsproxyen og som ble levert fra bufferen; disse står ikke i access-log.ndjson. Dette er radene som GET /orgs/{slug}/components/pulled summerer; sårbarhetsvarslene det endepunktet kobler på, er ikke med i filen.
| Felt | Betydning |
|---|---|
day | UTC-døgnet, YYYY-MM-DD |
origin | registry for dine egne pakker, proxy for avhengighetsproxyen |
ecosystem, name, version | pakketypen (npm, pypi, maven, nuget, go, container, …), navn og versjon |
consumer | hvem som pullet den: kind (job, robot, bot, user eller anonymous), name (jobbens repository, robotens navn eller innloggingen; null for anonym), id, for en robot dens login, og for en jobb run_ids, Actions-kjøringene som pullet den det døgnet (nyeste først, høyst 100; tom før 2026-10-13) |
pulls | vellykkede nedlastinger det døgnet |
first_seen_at, last_seen_at | den første og siste av dem, i UTC med mikrosekunder |
Skannefunn, policy, attesteringer og SBOM-er
Hver eksport inneholder sikkerhetsdataene fremforge har om organisasjonen din, som NDJSON (ett JSON-objekt per linje), dekket av det signerte manifestet som alle andre filer. Hver linje er hele posten fremforge lagrer, unntatt den interne kunde-ID-en og lagringsstier. Avviste funn er med, sammen med hvem som avviste dem, hvorfor og til når. Rader som gjelder en pakke i registeret, har et package-objekt (type, owner, name, version, file, blob_sha256).
findings/
├── sast.ndjson — static analysis (rule, file, line, severity)
├── dependencies.ndjson — dependency vulnerabilities, with CVSS and EPSS where known
├── dependency-dismissals.ndjson — repository-wide dependency dismissals
├── licences.ndjson — licence findings, each with its licence policy decision
├── container-images.ndjson — container image vulnerabilities
├── container-image-dismissals.ndjson
├── secrets.ndjson — rule, file, line and fingerprint; the secret value is never stored
├── malware-uploads.ndjson — malware found in uploads
├── malware-dependencies.ndjson — known-malicious dependencies
├── malware-container-layers.ndjson — per image manifest, each layer's malware verdict
├── packages.ndjson — vulnerabilities found in your registry packages
├── package-licences.ndjson — declared and detected licences of your registry packages
└── sha-pinning.ndjson — workflow actions not pinned to a commit
policy/
├── package-policy.ndjson — your package policy (mode, thresholds, licence lists, minimum age)
├── package-policy-rules.ndjson — allow and deny rules
├── package-policy-approvers.ndjson
├── package-policy-verdicts.ndjson — the current verdict for each package file, with reasons
├── package-gate-decisions.ndjson — downloads blocked, or that would have been blocked in shadow mode
├── exceptions.ndjson — policy exceptions, who requested and who approved them
├── malware-overrides.ndjson
├── package-access-packages.ndjson — per-package access: each configured package (mode, inheritance)
├── package-access-grants.ndjson — per-package access grants (teams, Actions repositories)
├── package-protection-rules.ndjson — protected package names
├── scan-overrides.ndjson — per-repository scanner mode overrides
└── settings/ — each scanner's org settings (sast, dependencies, licences, container-images, secrets),
and licence-repo-overrides.ndjson: per-repository licence policy overrides
and package-access.ndjson: the per-package access default
and retention.ndjson: one line per evidence retention class, with what you set,
what applies, the default, the bounds and whether a legal hold is active
attestations/
├── build-provenance.ndjson — one line per build provenance attestation
├── build-provenance/<id>.intoto.jsonl — its DSSE envelope (the Ed25519 signature)
├── build-provenance/<id>.sigstore.json — its keyless Sigstore bundle, where one was made
├── releases.ndjson — release attestations: subjects, the frozen release manifest, status, and envelope_path
├── sbom-ingest.ndjson — attestations uploaded together with an SBOM
└── sbom-ingest/<sbom id>.intoto.jsonl
sboms/
├── index.ndjson — one line per SBOM, see below
├── repos/<id>.cdx.json — a repository SBOM, CycloneDX (<id>.spdx.json for SPDX)
└── images/<id>.cdx.json — a container image SBOM- Signaturene følger med attesteringene. Hver konvolutt verifiseres mot den samme tillitsroten som pakken, med skriptet i §«Verifisere det signerte manifestet» rettet mot konvolutten i stedet for
manifest.json.intoto.jsonl(hopp over sjekkene avmanifestSha256ogpredicateType, som bare gjelder eksportpakker). Sigstore-bundlene er signert mot fremforges egen Fulcio og tidsstempeltjeneste, ikke offentlig Sigstore; se SLSA-proveniens. - En manglende signatur vises, den skjules ikke. En linje med
"envelope_status": "missing"er en attestering der signaturobjektet ikke lenger fantes i lagringen da eksporten kjørte. Alle andre lagringsfeil får eksporten til å feile. - Containerlag. Skadevarevurderingen av et lag hører til innholdet, så et lag som deles med et annet image, listes med vurderingen under hvert av manifestene dine som bruker det. Imager som er pullet gjennom avhengighetsproxyen, listes bare så lenge organisasjonen din har ClamAV-skanning av proxyhentinger slått på. Når den er av (standard), skannes de ikke med ClamAV og har ingen lagvurderinger.
- Utgivelsesattesteringer finnes for repositoryer med uforanderlige utgivelser. En utgivelse med en
statussom ikke ersigned, har ingen konvolutt (envelope_pathernull). - SBOM-er.
sboms/inneholder hver SBOM fremforge lagrer for repositoryene dine (utgivelses- og standardbranch-bygg, enten de er lastet opp eller laget av den sentrale skanningen) og for containerimagene dine (registerets oversikt per manifest), som selve dokumentet. Et repository-bygg har som regel både et CycloneDX- og et SPDX-dokument; se SBOM-er. Hver linje isboms/index.ndjsoner den lagrede SBOM-posten (id,subject_kindrepoellerimage,format,repo_full_nameellerartifact_name,release_tag,image_tags,manifest_digest,created_at,sha256_digestog resten av den lagrede posten, uten lagringsstier) pluss tre felter om filen i denne pakken:document_path,document_sha256ogdocument_status, som eroknår dokumentet stemmer med SHA-256 som ble registrert da det ble lagret,digest_mismatchnår det ikke gjør det (bytene eksporteres likevel, og begge digestene står på linjen), ogmissingnår dokumentet ikke lenger fantes i lagringen. Alle andre lagringsfeil får eksporten til å feile. - Pakke-SBOM-er ligger ikke i
sboms/. SBOM-en for hver pakkefil i registeret følger med ved siden av filen i arkivet med innholdet i pakkene, som du må be om.