Skip to main content

Compatibility

What CI/lock is built for, tested against, and known to interoperate with.

Sources: rookery/cilock/go.mod, rookery/.github/workflows/release.yml, rookery/cilock/cmd/cilock/main.go.

Toolchain​

Version
Go (build)1.26.0+ (per go.mod)
Build flagsCGO_ENABLED=0, GOWORK=off, -trimpath
FIPS modeOn by default (//go:debug fips140=on in main.go)

Released platforms​

The official rookery release pipeline produces static binaries for:

OSArchitecturesNotes
Linuxamd64, arm64Full feature set including --trace (ptrace)
macOS (Darwin)amd64, arm64All attestors except --trace (ptrace is Linux-only)
Windowsamd64Shipped as a .zip since v3.2.0. No omnitrail attestor (not supported on Windows) and no --trace backend.

macOS and Windows binaries are not OS code-signed (no Apple Developer ID or notarization, no Authenticode); see Verify the cilock binary.

Container image​

Registryghcr.io/aflock-ai/cilock
Tags<version> (current: v1.1.0) and latest
Built withChainguard melange + apko
Architecturesx86_64, aarch64
Signed bycosign (keyless OIDC)

CI platforms​

Tested integrations from the cilock-action ecosystem:

PlatformIntegrationSource
GitHub Actionsaflock-ai/[email protected] (also @v1)cilock-action
GitLab CIReusable template at cilock-action/gitlab/cilock.gitlab-ci.ymlSame repo
JenkinsVia the jenkins attestor + raw cilock binaryrookery/plugins/attestors/jenkins
AWS CodeBuildVia the aws-codebuild attestorrookery/plugins/attestors/aws-codebuild

Signers​

The default cilock binary blank-imports two signer providers — file and fulcio (verified from cilock/cmd/cilock/main.go):

SignerModuleIn default binary?
Sigstore Fulcioplugins/signers/fulcio✅ default
File (PEM)plugins/signers/file✅ default
KMS (--signer-kms-ref: awskms://, gcpkms://, azurekms://, hashivault://)plugins/signers/kms/{aws,gcp,azure}⚙️ flag present, provider opt-in
debug-signerplugins/signers/debug-signerbuilder opt-in
SPIFFE/SPIREplugins/signers/spiffebuilder opt-in
HashiCorp Vaultplugins/signers/vault, vault-transitbuilder opt-in

The --signer-kms-ref flag is present in the default binary, but no KMS provider is compiled in — passing it errors with no kms provider found until you build a variant that imports plugins/signers/kms/{aws,gcp,azure}. The other "builder opt-in" signers likewise exist as Go modules in rookery but aren't blank-imported by default. Add the import to cilock/cmd/cilock/main.go (or use rookery-builder --with …) and rebuild — see build a custom CI/lock.

Timestamp authorities​

RFC 3161 compatible TSAs. Tested against:

  • Sigstore TSA (Sigstore-operated public TSA, the cilock-action default)
  • Self-hosted TSAs reachable over HTTPS

URL pattern: TSAs are passed via --timestamp-servers <url> (repeatable) or under run.timestamp-servers in the config file.

Evidence storage​

SinkNotes
File outputDefault; via --outfile.
OCI registryVia the oci attestor + downstream cosign/oras push.
ArchivistaTested against the in-toto/archivista reference server. URL pattern <platform-url>/archivista; auth via static --archivista-headers or OIDC (--archivista-oidc + --archivista-audience).

Witness compatibility​

CI/lock shares witness's DSSE + in-toto envelope format, but interop is asymmetric — witness → CI/lock, not fully the reverse:

  • CI/lock attestation type URLs use the https://aflock.ai/attestations/<name>/v0.1 namespace.
  • Legacy witness URLs (https://witness.dev/attestations/<name>/v0.1) are accepted via aliases registered in attestation/legacy.go, called from main.go at startup via attestation.RegisterLegacyAliases().
  • Witness-signed policies (DSSE payload type https://witness.testifysec.com/policy/v0.1) work with cilock verify.
  • Witness-produced attestations verify under cilock verify.
  • The reverse holds only for the shared base attestors. CI/lock's v0.3 Merkle-tree product/material attestations (tree:products root + inline leaves), standalone inclusion proofs, and trace records use predicates and verification logic witness doesn't implement, so witness verify cannot validate most CI/lock attestations.

Predicate types in scope​

PredicateNotes
in-toto Statement v1 (with versioned predicate URLs)Native format for all CI/lock attestations.
DSSE envelopeWraps every signed attestation.
SLSA Provenance v1Emitted by the slsa attestor.
CycloneDX, SPDXEmbedded by the sbom attestor when found in products.
SARIFEmbedded by the sarif attestor when found in products.
VEXEmitted by the vex attestor.

Version pinning recommendations​

DependencyPin to
aflock-ai/cilock-action in workflowsA commit SHA (not a floating tag like @v1), see the defending-against-supply-chain-attacks tutorial for why.
cilock binaryA specific release version, not :latest, in any production-bound workflow.
Custom binaries built via the rookery builderPin every plugin module to a path-prefixed tag.

What's not covered​

  • Real-time network egress monitoring. CI/lock observes file/syscall activity, not network traffic. Pair with StepSecurity Harden-Runner for that gap.
  • Developer laptop or production server protection. CI/lock operates in CI/CD only.
  • Windows attestor coverage. The released Windows binary has no omnitrail attestor and no --trace backend, so a Windows runner cannot produce evidence that needs either.