First signed release 🔏
v1.1.1 is the first release built by the new signed release pipeline (.github/workflows/release.yml). The image content is functionally equivalent to v1.1.0 — what's new is the supply-chain assurance: the published multi-arch image is now built reproducibly in CI and cryptographically signed, with a verifiable SBOM and build provenance.
:latest now resolves to this signed digest.
What's included
- Keyless signature (cosign / Sigstore, via GitHub OIDC — no keys to manage; recorded in the public Rekor transparency log)
- SPDX SBOM attestation (generated by Trivy)
- SLSA v1.0 provenance attestation (source repo + commit + tag + builder + run)
- Native multi-arch build:
linux/amd64+linux/arm64 - A pre-publish Trivy gate (fails the release on a fixable CRITICAL) — publishing tags only after signing succeeds, and a final step that verifies the published tag resolves to the signed digest
Verify it (needs cosign)
IMAGE=neoplanetz/hermes-desktop-docker:1.1.1
IDENTITY='^https://github\.com/Neoplanetz/hermes-agent-desktop-docker/\.github/workflows/release\.yml@refs/tags/v'
ISSUER=https://token.actions.githubusercontent.com
cosign verify "$IMAGE" --certificate-identity-regexp "$IDENTITY" --certificate-oidc-issuer "$ISSUER"
cosign verify-attestation "$IMAGE" --type spdxjson --certificate-identity-regexp "$IDENTITY" --certificate-oidc-issuer "$ISSUER"
cosign verify-attestation "$IMAGE" --type slsaprovenance1 --certificate-identity-regexp "$IDENTITY" --certificate-oidc-issuer "$ISSUER"The same works against :latest. Full instructions: see "Verifying the image" in the README.
Releasing, going forward
Releases are now cut by pushing a tag — git tag vX.Y.Z && git push origin vX.Y.Z — which triggers the pipeline. The old manual buildx publish flow is superseded.
Pull: docker pull neoplanetz/hermes-desktop-docker:1.1.1