Supply Chain Integrity

Reproducible Builds

DevGuard OCI images are built with Nix. Given identical source and dependency closures, it deterministically yields bit-for-bit identical output, satisfying the formal definition established by reproducible-builds.org.

Why reproducible builds matter

GitHub Actions runs on infrastructure in the United States — openCode runs on sovereign German governmental infrastructure. When both independent build environments produce the same SHA-256 digest, it constitutes cryptographic evidence that no build-time tampering occurred — directly addressing the SLSA supply-chain threat model for build-level compromise.

Tamper evidence

Any build-time injection — compiler backdoor, compromised dependency, or tampered CI runner — would alter the output binary and produce a diverging SHA-256 digest. Matching digests across independent environments are cryptographic evidence of an unmodified build.

Independent verification

Two independent build environments under separate administrative control constitute an N-of-M verification model: a supply-chain attacker would need to compromise both infrastructure providers simultaneously, across different jurisdictions, to go undetected.

Nix-powered

Nix models each build as a pure function over a content-addressed input closure. Every dependency is pinned to a cryptographic hash in the Nix store, eliminating non-determinism from timestamps, locale settings, and floating dependency resolution.

Live digest verification

OCI image digests are fetched live from both registries and compared. A matching SHA-256 digest across independent build environments is a necessary condition for build integrity.

Checked at 19:33:04 · refresh each 30 seconds

Signatures and attestations

Every published image is signed via Sigstore/Cosign . Each release additionally carries SLSA provenance attestations in the in-toto predicate format, a VEX attestation, and a CycloneDX SBOM attestation — enabling independent verification of what was built, from which source revision, under which build environment, and what known vulnerabilities apply.

Signed images

Each image digest is signed with Cosign against a static public key. Verifying the signature cryptographically binds the digest to the key holder, making unauthorized image substitution detectable.

Build provenance

SLSA provenance attestations, encoded in the in-toto predicate format, record the exact source revision, build platform, and entry-point invocation. They allow a verifier to reason about the full build provenance chain — from source commit to published digest.

VEX and SBOM

Each image carries a CycloneDX SBOM attestation enumerating all transitive dependencies with their cryptographic hashes, and an CycloneDX VEX attestation asserting the exploitability status of known CVEs — enabling precise, machine-readable vulnerability impact analysis.

Verify the image signature
cosign verify \
  --key https://raw.githubusercontent.com/l3montree-dev/devguard/main/cosign.pub \
  ghcr.io/l3montree-dev/devguard:main-amd64

Verify manually

Pull both images independently and compare their SHA-256 digests. Digest equality is a sufficient condition for byte-for-byte output identity — no external trust anchor required.

1

Pull both images

Fetch the images from both registries independently.

shell
docker pull ghcr.io/l3montree-dev/devguard:main-amd64
docker pull registry.opencode.de/oci-community/images/l3montree/devguard/devguard:main-amd64
2

Compare the digests

Inspect the cryptographic digest of each image. Both must be identical.

shell
docker inspect --format='{{index .RepoDigests 0}}' \
  ghcr.io/l3montree-dev/devguard:main-amd64

docker inspect --format='{{index .RepoDigests 0}}' \
  registry.opencode.de/oci-community/images/l3montree/devguard/devguard:main-amd64
3

Alternatively: use skopeo

skopeo lets you inspect remote images without pulling them first.

shell
skopeo inspect \
  docker://ghcr.io/l3montree-dev/devguard:main-amd64 | jq '.Digest'

skopeo inspect \
  docker://registry.opencode.de/oci-community/images/l3montree/devguard/devguard:main-amd64 | jq '.Digest'

Where images are built

Both pipelines build from the same Git revision on every push to main. The workflow definitions are publicly auditable — inspect them to confirm the build inputs, toolchain version, and push targets are identical.

GitHubGitHub Actions

Builds and pushes all images to ghcr.io on every commit to main.

openCodeopenCode CI

Mirror pipeline on openCode, German governmental infrastructure hosted in Germany, builds and pushes to registry.opencode.de.