Working with OCI / Docker
CodeScoring.Save implements OCI Distribution Spec under the /v2/ prefix and supports Docker, Helm OCI charts, and other OCI artifacts such as oras.
Proxy Repository
For single-name images without slashes, standard Docker Hub normalization library/<image> is applied.
Hosted Repository
URL Scheme
The base scheme is path-based, as required by Docker / OCI:
Nexus-compatible flat URL routing (flat-alias) is also supported. For compatible repositories, the <project>/<repository> prefix is replaced with a short alias or omitted entirely.
Client Configuration
Docker / Podman
docker login
Endpoint /v2/ always returns 401 with a WWW-Authenticate: Bearer realm=... challenge header, even if the repository allows anonymous read. This is required so the Docker client correctly performs the 401 -> retry -> 200 cycle and then sends Basic Auth if needed. This is an OCI Distribution Spec requirement.
For CI/CD, use a robot account: docker login -u 'sa$<robot-name>' -p '<api-key>' save.example.com. The same approach works for helm registry login and oras login. For details, see Authentication.
Helm
CodeScoring.Save accepts Helm charts as regular OCI artifacts. Push/pull is performed with standard helm commands:
For test stands without TLS, use --plain-http (Helm 3.13+):
oras
oras works with any OCI-compatible artifact: configs, policies, SBOMs, binaries, and others.
containerd / nerdctl
Flat URL Routing
Save supports Nexus-compatible flat namespace for migration from Nexus / Artifactory: a repository can be configured with a prefix alias so that it responds to requests without <project>/<repository> in the path.
Longest-prefix matching is used:
docker pull save.example.com/common/external/golang:1.24.1goes to the repository withflat_alias = common/external/.docker pull save.example.com/johnny-depp:v1goes to a catch-all hosted repository if it is configured.
When creating a repository with a flat alias, use flat_alias_prefix and/or is_catch_all. Prefixes are validated for uniqueness.
Repository URL Migration
Use case: migrating a Docker registry from Nexus / Artifactory to CodeScoring.Save.
The flat-alias option does not require client-side changes: existing scripts with a hardcoded nexus.host.ru/library/nginx path start working after the host is replaced.
Troubleshooting
Checking /v2/
Checking the Token Endpoint
The response is JSON with the token field containing a short-lived Docker v2 JWT.
