Fedora COPR
copr.fedorainfracloud.org · Storage · 1 record · JSON
Fedora COPR (copr.fedorainfracloud.org) Storage
caveatemail?card?Rretention-clamped
| Free tier | No published byte quota. Official docs FAQ: 'We keep one build for each package in one project indefinitely. All other builds (old packages, failed builds) are deleted after 14 days.' Unlimited projects and builds for Fedora Account holders. Storage is therefore effectively 'one build per package per project, forever', multiplied by packages and projects. unit unlimited; metered on stored-bytes |
|---|---|
| Price | none stated |
| Per-object cap | not stated |
| Retention | All other builds (old packages, failed builds) are deleted after 14 days.' Unlimited projects and builds for Fedora Account holders (14 days) |
| Egress | Free. Results are served from copr-be.cloud.fedoraproject.org and the Fedora CDN; there is no billing or bandwidth meter anywhere in COPR. |
| Identity | email (placeholder) not published |
| Limits | retention: 14 days for all but the newest build of each package (Pulp backend exception: count-based - keeps the 5 most recent successful builds per package, and 'the 14-day preservation period is not guaranteed'). per-object-cap: src.rpm upload is the write path; no published byte limit found. request-rate: not documented. Build timeout default 5 h, max 50 h. Projects that opted into manual repository creation are exempt from the old package removal. |
| Binding | retention-clamped a clock, not a quota: bytes leave whether or not the client is finished with them |
| Interface | rest, rclone, cli rest |
| Tooling | copr-cli (create/build/upload), copr Python API v3 with Swagger at /api_3/docs/, and plain HTTPS dnf repo access. copr-cli buildscm, copr-cli add-package-*. No rclone backend. |
| Composes with | unlimited COPR projects x unlimited packages per project x (one retained build each, indefinitely). Because retention is per *RPM Name* within a *repository*, the documented route is: 'Create a separate Copr project for each version' - and the pruner explicitly only groups by RPM Name, so distinct Name: values (golang1.24 / golang1.25 / golang1.26 are named as the alternative route) each keep their own build forever. That is an unlimited-cardinality, indefinite-retention store, and each further Fedora account carries the same allowance again. |
| Reliability | The 14-day pruner is the whole story: anything but the newest build of a package evaporates, and on the Pulp backend it is even stricter (keeps only 5, time-based guarantee dropped). Copr is a *build* service - content must arrive as a buildable src.rpm, so arbitrary files require wrapping in a spec with %install/%files. Already covered in round 1 B-B5 as 'no published storage quota'; the retention mechanics above are the new detail. |
| Notes | No published byte quota. Official docs FAQ: 'We keep one build for each package in one project indefinitely. All other builds (old packages, failed builds) are deleted after 14 days.' Unlimited projects and builds for Fedora Account holders. Storage is therefore effectively 'one build per package per project, forever', multiplied by packages and projects. |
| Evidence rung | reported One page read moves it to documented. |
| Checked | 2026-10-21 (inherited); stale on 2026-11-04 |
Evidence (4)
| date | source | what it proved |
|---|---|---|
| 2026-10-21 | raw.githubusercontent.com/fedora-copr/copr/main/doc/user_doc | lines 1026-1027 - 'We keep one build for each package in one project indefinitely. All other builds (old packages, failed builds) are deleted after 14 days.' |
| 2026-10-21 | withheld | same file lines 1067-1069 - Pulp backend: 'retention is count-based: Copr keeps the 5 most recent successful builds ... the 14-day preservation period is not guaranteed' |
| 2026-10-21 | withheld | same file lines 1057-1063 - 'Create a separate Copr project for each version' (the multiplication path) |
| 2026-10-21 | copr-be.cloud.fedoraproject.org/results/@copr/PyPI/fedora-40 | probe: GET -> 301 (CDN redirect, repo live) |
Unknown or withheld values (8)
$.evidence[1].urlprivate-url$.evidence[2].urlprivate-url$.free_tier.notesprocess$.identity_cost.detaildefaulted$.identity_cost.kindidentity-defaulted$.per_object_cap.notesnot-extracted$.per_object_cap.statednot-extracted$.retention.notesnot-extracted