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)
Windows(not shipped)Not shipped: the omnitrail attestor has linux/darwin-only build constraints (per release.yml comment).

To build a Windows binary anyway, fork cilock/cmd/cilock/main.go and remove the omnitrail import.

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. Until the omnitrail build constraint is relaxed or made conditional, Windows requires a custom build.