1 unstable release

0.0.1 Jun 25, 2024

#40 in #oci

EUPL-1.2

60KB
368 lines

HA-registry

[!IMPORTANT] HA-registry is in an early stage of development, and not recommened for production usage.

[!NOTE] HA-registry is experimental, and is subject to API changes until stabilized. Many features still aren't implemented, and it's in no way useful yet.

HA-registry, is a highly available, blazingly fast™ OCI container distribution service, written in rust, and leveraging an S3 backend for blob storage and a postgresql database for distributed locking. It's goal is to support being both pull and push available under both update rollout and garbage collection for a n>=2 deployment.

It's designed with automation of garbage collection in mind, and hopes to replace enterprise registry solutions like artifactory, by implementing features like virtual repositories and promotion based garbage collection

Another goal is to be able to standup a database by walking the S3 storage, ensuring the database only needs to be consistent during runtime.

HA-registry is licensed under EUPL-1.2, without a CLA, and seeks to stay REUSE compliant. We also enforce conventional commits, and seek to have a strong semver culture.

Other technologies leveraged in the project includes Axum, Tokio, and Nix for development shells, packaging, and NixOS VM tests.

Limitations

  • Only S3 support

OCI API Compliance

Endpoints

ID Method API Endpoint Success Failure Implemented
end-1 GET /v2/ 200 404/401
end-2 GET / HEAD /v2/<name>/blobs/<digest> 200 404
end-3 GET / HEAD /v2/<name>/manifests/<reference> 200 404
end-4a POST /v2/<name>/blobs/uploads/ 202 404
end-4b POST /v2/<name>/blobs/uploads/?digest=<digest> 201/202 404/400
end-5 PATCH /v2/<name>/blobs/uploads/<reference> 202 404/416
end-6 PUT /v2/<name>/blobs/uploads/<reference>?digest=<digest> 201 404/400
end-7 PUT /v2/<name>/manifests/<reference> 201 404
end-8a GET /v2/<name>/tags/list 200 404
end-8b GET /v2/<name>/tags/list?n=<integer>&last=<tagname> 200 404
end-9 DELETE /v2/<name>/manifests/<reference> 202 404/400/405
end-10 DELETE /v2/<name>/blobs/<digest> 202 404/405
end-11 POST /v2/<name>/blobs/uploads/?mount=<digest>&from=<other_name> 201 404
end-12a GET /v2/<name>/referrers/<digest> 200 404/400
end-12b GET /v2/<name>/referrers/<digest>?artifactType=<artifactType> 200 404/400
end-13 GET /v2/<name>/blobs/uploads/<reference> 204 404

See Also

Dependencies

~32–46MB
~683K SLoC