Working with RPM
CodeScoring.Save implements an RPM repository in the createrepo format with the /rpm/<project>/<repository>/ prefix. It is compatible with standard dnf and yum clients on RHEL, Rocky Linux, AlmaLinux, Fedora, CentOS, and derived distributions.
Proxy Repository
In remote_url, specify the same URL you would use as baseurl in a .repo file: the directory that contains repodata/repomd.xml.
A proxy repository does not generate its own indices. The repomd.xml file, the hash-named repodata files, and repomd.xml.asc are proxied from upstream byte for byte, so signatures and checksums remain valid. Packages are cached as immutable artifacts; metadata is revalidated after cache_ttl expires. If upstream is unavailable, Save serves the last cached copy of the metadata. Uploads to a proxy repository are rejected: it is read-only.
Hosted Repository
When a hosted repository is created, Save immediately publishes an empty repodata/repomd.xml, so dnf makecache works before the first package is uploaded. The indices (primary, filelists, other) are regenerated automatically after every package upload or deletion.
URL Scheme
Client Configuration
dnf / yum
Create /etc/yum.repos.d/codescoring.repo:
dnf / yum with Metadata Signature Verification
If metadata signing is enabled on the server (METADATA_SIGNING_ENABLED), Save publishes the detached signature repodata/repomd.xml.asc, and the public key is available at <repo>/repository.key. Enable repo_gpgcheck=1:
repo_gpgcheck=1 enables verification of the repository metadata signature (repomd.xml.asc). This is the counterpart of apt's signed-by, and this is the signature Save creates. gpgcheck=1 verifies per-package signatures, which Save never creates or modifies. Enable gpgcheck=1 only if the uploaded packages are signed at build time.
For CI/CD, use a robot account: username = sa$<robot-name>, password = <api-key> in the .repo file. The file structure remains the same; only values change. For details, see Authentication.
Publishing Packages (hosted)
Uploads are performed with a PUT request to the canonical Packages/<first-letter-of-name>/ path:
The file name must follow the <name>-<version>-<release>.<arch>.rpm scheme. Save validates the package headers and normalizes the path to the canonical form. The resulting path is returned in the response.
An alternative is a multipart POST to the repository root:
Forcing repodata Regeneration
The rebuild also removes stale hash-named repodata files left over from previous publications.
Repository URL Migration
Use case: migrating an RPM repository from Nexus / Artifactory to CodeScoring.Save.
Authentication parameters (username / password) in the .repo file remain unchanged. For a proxy repository, Save serves the upstream repomd.xml.asc verbatim, so existing distribution gpgkey keys keep working with repo_gpgcheck=1.
Troubleshooting
Checking repomd.xml
The response is XML with data type="primary", filelists, and other sections and hash-named href references.
Checking That a Package Is in the primary Index
If a package is uploaded but missing from the index, wait a few seconds because indexing is asynchronous, or run rebuild-index.
