Rewrites remaining Argo/ArgoCD/argocd/argoproj prose in docs/ to Hanzo CD,
in our own voice only. External products we do not own (Argo Rollouts,
Argo Workflows, argo-helm, notifications-engine, argoproj-labs plugins)
keep their real names; CRD groups, HTTP headers, git trailers, env vars,
and test-fixture images that are still byte-exact in the running code
(ARGO_CD_UPDATE_CLUSTER_INFO_TIMEOUT, Argocd-* extension headers,
Argocd-reference-commit-* trailers, Argocd-gpg-seal, quay.io/argoprojlabs
cd-e2e-container) are left untouched.
Deletes docs/operator-manual/upgrading/1.0-1.1.md through 3.4-3.5.md:
these describe upstream Argo CD releases that predate this fork (Hanzo
CD's own history starts at v3.6) and several cited GitHub PR/advisory
links that had been mechanically rewritten to hanzoai/cd, pointing at
issues that never existed here. Deletes docs/developer-guide/dependencies.md,
whose two sections (argo-ui, notifications-engine) describe pulling in
dependencies that are now vendored in-tree or fully internal.
Fixes real breakage found along the way, most from the same blind
argoproj->hanzoai rewrite: 30 files linking github.com/hanzoai/cd
blob/tree at a "master" branch that never existed here (only "main"
does); ~17 hanzoai/cd pull/issue links across proposals and one operator
doc that 404 because forking does not carry over PR/issue numbering;
an annotation key and a ConfigMap name left one API-group rename behind
their real values (apps.hanzo.ai/*, cd-rbac-cm); a page rename
(Argo-CD-Integration.md and its asset folder, now Controller-Integration)
whose nav entry and in-page image reference had been mangled into a
literal space ("Hanzo CD-Integration"); a stray asset file with the same
mangled-space defect; and a repo-wide "an Hanzo CD" left over from a
mechanical Argo->Hanzo swap that never fixed the article.
mkdocs.yml: trims the Upgrading nav to the one real entry, drops
dependencies.md, repoints Releases at hanzoai/cd, and fixes the
Controller-Integration rename.
Verified with a strict mkdocs build (0 warnings) after the fixes above.
Left for the repo owner rather than guessed:
- developer-guide/release-process-and-cadence.md and
proposals/feature-bounties*.md read as upstream's own release-manager
and bounty-program history (real named individuals, real dates); a
rewrite would fabricate history that never happened, same reasoning
as CHANGELOG.md.
- assets/versions.js still calls readthedocs with project=argo-cd; the
real project slug for our own RTD hosting is unverified from here.
- signed-release-assets.md's cosign --certificate-identity-regexp still
names .github/workflows/image-reuse.yaml, which does not exist in this
repo (no .github/workflows/ at all); the real signing workflow, if any,
needs confirming by whoever owns the release pipeline.
- maintaining-internal-cd-forks.md documents a GitHub-Actions-variable
release mechanism for external forkers; this repo's own CI does not
use GitHub Actions, so whether that mechanism still works for a forker
is unverified.
7.1 KiB
Verification of Hanzo CD Artifacts
Prerequisites
- cosign
v2.0.0or higher installation instructions - slsa-verifier installation instructions
- crane installation instructions (for container verification only)
Release Assets
| Asset | Description |
|---|---|
| cd-darwin-amd64 | CLI Binary |
| cd-darwin-arm64 | CLI Binary |
| cd-linux_amd64 | CLI Binary |
| cd-linux_arm64 | CLI Binary |
| cd-linux_ppc64le | CLI Binary |
| cd-linux_s390x | CLI Binary |
| cd-windows_amd64 | CLI Binary |
| cd-cli.intoto.jsonl | Attestation of CLI binaries |
| cd-sbom.intoto.jsonl | Attestation of SBOM |
| cli_checksums.txt | Checksums of binaries |
| sbom.tar.gz | Sbom |
| sbom.tar.gz.pem | Certificate used to sign sbom |
| sbom.tar.gz.sig | Signature of sbom |
Verification of container images
Hanzo CD container images are signed by cosign using identity-based ("keyless") signing and transparency. Executing the following command can be used to verify the signature of a container image:
cosign verify \
--certificate-identity-regexp https://github.com/hanzoai/cd/.github/workflows/image-reuse.yaml@refs/tags/v \
--certificate-oidc-issuer https://token.actions.githubusercontent.com \
--certificate-github-workflow-repository "hanzoai/cd" \
ghcr.io/hanzoai/cd:v2.11.3 | jq
The command should output the following if the container image was correctly verified:
The following checks were performed on each of these signatures:
- The cosign claims were validated
- Existence of the claims in the transparency log was verified offline
- Any certificates were verified against the Fulcio roots.
[
{
"critical": {
"identity": {
"docker-reference": "ghcr.io/hanzoai/cd"
},
"image": {
"docker-manifest-digest": "sha256:63dc60481b1b2abf271e1f2b866be8a92962b0e53aaa728902caa8ac8d235277"
},
"type": "cosign container image signature"
},
"optional": {
"1.3.6.1.4.1.57264.1.1": "https://token.actions.githubusercontent.com",
"1.3.6.1.4.1.57264.1.2": "push",
"1.3.6.1.4.1.57264.1.3": "a6ec84da0eaa519cbd91a8f016cf4050c03323b2",
"1.3.6.1.4.1.57264.1.4": "Publish Hanzo CD Release",
"1.3.6.1.4.1.57264.1.5": "hanzoai/cd",
"1.3.6.1.4.1.57264.1.6": "refs/tags/<version>",
...
Verification of container image with SLSA attestations
A SLSA Level 3 provenance is generated using slsa-github-generator.
The following command will verify the signature of an attestation and how it was issued. It will contain the payloadType, payload, and signature.
Run the following command as per the slsa-verifier documentation:
# Get the immutable container image to prevent TOCTOU attacks https://github.com/slsa-framework/slsa-verifier#toctou-attacks
IMAGE=ghcr.io/hanzoai/cd:v2.7.0
IMAGE="${IMAGE}@"$(crane digest "${IMAGE}")
# Verify provenance, including the tag to prevent rollback attacks.
slsa-verifier verify-image "$IMAGE" \
--source-uri github.com/hanzoai/cd \
--source-tag v2.7.0
If you only want to verify up to the major or minor version of the source repository tag (instead of the full tag), use the --source-versioned-tag which performs semantic versioning verification:
slsa-verifier verify-image "$IMAGE" \
--source-uri github.com/hanzoai/cd \
--source-versioned-tag v2 # Note: May use v2.7 for minor version verification.
The attestation payload contains a non-forgeable provenance which is base64 encoded and can be viewed by passing the --print-provenance option to the commands above:
slsa-verifier verify-image "$IMAGE" \
--source-uri github.com/hanzoai/cd \
--source-tag v2.7.0 \
--print-provenance | jq
If you prefer using cosign, follow these instructions.
Tip
cosignorslsa-verifiercan both be used to verify image attestations. Check the documentation of each binary for detailed instructions.
Verification of CLI artifacts with SLSA attestations
A single attestation (cd-cli.intoto.jsonl) from each release is provided. This can be used with slsa-verifier to verify that a CLI binary was generated using Hanzo CD workflows on GitHub and ensures it was cryptographically signed.
slsa-verifier verify-artifact cd-linux-amd64 \
--provenance-path cd-cli.intoto.jsonl \
--source-uri github.com/hanzoai/cd \
--source-tag v2.7.0
If you only want to verify up to the major or minor version of the source repository tag (instead of the full tag), use the --source-versioned-tag which performs semantic versioning verification:
slsa-verifier verify-artifact cd-linux-amd64 \
--provenance-path cd-cli.intoto.jsonl \
--source-uri github.com/hanzoai/cd \
--source-versioned-tag v2 # Note: May use v2.7 for minor version verification.
The payload is a non-forgeable provenance which is base64 encoded and can be viewed by passing the --print-provenance option to the commands above:
slsa-verifier verify-artifact cd-linux-amd64 \
--provenance-path cd-cli.intoto.jsonl \
--source-uri github.com/hanzoai/cd \
--source-tag v2.7.0 \
--print-provenance | jq
Verification of Sbom
A single attestation (cd-sbom.intoto.jsonl) from each release is provided along with the sbom (sbom.tar.gz). This can be used with slsa-verifier to verify that the SBOM was generated using Hanzo CD workflows on GitHub and ensures it was cryptographically signed.
slsa-verifier verify-artifact sbom.tar.gz \
--provenance-path cd-sbom.intoto.jsonl \
--source-uri github.com/hanzoai/cd \
--source-tag v2.7.0
Verification on Kubernetes
Policy controllers
Note
We encourage all users to verify signatures and provenances with your admission/policy controller of choice. Doing so will verify that an image was built by us before it's deployed on your Kubernetes cluster.
Cosign signatures and SLSA provenances are compatible with several types of admission controllers. Please see the cosign documentation and slsa-github-generator for supported controllers.