Working with Debian / APT
CodeScoring.Save implements an APT-compatible repository with the /deb/<project>/<repository>/ prefix. It is compatible with standard apt, apt-get, and aptitude clients on Debian, Ubuntu, and derived distributions.
Proxy Repository
A proxy repository does not generate its own indices. The InRelease, Release, Release.gpg, and Packages* files are proxied from upstream byte for byte, so signatures and checksums remain valid. Packages from pool/ 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 stable suite with the main component, so apt-get update works before the first package is uploaded. The indices (Packages, Packages.gz, Release) are regenerated automatically after every package upload or deletion.
URL Scheme
Client Configuration
apt (signed repository)
If metadata signing is enabled on the server (METADATA_SIGNING_ENABLED), Save publishes InRelease and Release.gpg, and the public key is available at <repo>/repository.key:
apt (unsigned repository)
If metadata signing is not enabled, use [trusted=yes]:
apt requests InRelease first and falls back to the Release + Release.gpg pair on 404. This is expected behavior: a 404 on InRelease for an unsigned repository is not an error.
For CI/CD, use a robot account: login = sa$<robot-name>, password = <api-key> in /etc/apt/auth.conf.d/save.conf. For details, see Authentication.
Publishing Packages (hosted)
Uploads are performed with a PUT request to the canonical pool path. The suite and the component are passed as query parameters and default to stable and main:
The file name must follow the <name>_<version>_<arch>.deb scheme. Save validates the package control structure and normalizes the path to the canonical form pool/<component>/<first-letter>/<name>/<name>_<version>_<arch>.deb. The resulting path is returned in the response.
An alternative is a multipart POST to the repository root:
Packages with the all architecture are automatically published into every concrete architecture of the suite (fan-out). The all pseudo-architecture itself is not advertised as a separate entry in Release.
Forcing Index Regeneration
Repository URL Migration
Use case: migrating an APT repository from Nexus / Artifactory to CodeScoring.Save.
Suites and components remain unchanged. For a proxy repository, Save serves upstream signatures verbatim, so existing signed-by keys, such as the Debian key, keep working.
Troubleshooting
Checking Release
The response contains the Suite, Components, and Architectures fields and a SHA256 section with references to the Packages indices.
Checking the Packages Index
If a package is uploaded but missing from the index, wait a few seconds because indexing is asynchronous, or run rebuild-index.
