CI/lock and rookery
Rookery is the modular attestation monorepo where CI/lock is built. It splits the attestation core, every individual attestor, every signer, and the binary builder into separate Go modules so each can be versioned and consumed independently.
Layout
| Directory | What's there |
|---|---|
attestation/ | Core attestation library (minimal deps), DSSE handling, in-toto statement assembly, the attestor/signer interfaces, factory registration, Archivista client, type-alias registry. |
plugins/attestors/ | Each attestor as its own Go module (57 attestor modules today). |
plugins/signers/ | Each signer as its own Go module. Default binary ships file, fulcio, piv; the remaining seven (debug-signer, kms/{aws,azure,gcp}, spiffe, vault, vault-transit) are opt-in via rookery-builder. |
presets/ | Convenience modules that blank-import curated plugin sets — all, cicd, minimal. |
builder/ | rookery-builder — generates a real cilock binary with a custom plugin set from a manifest or CLI flags. Output binary is a drop-in CI/lock with the full run/verify/sign surface. Also supports branded distribution via --customer/--tenant ldflag injection. See Build a custom CI/lock. |
cilock/ | The cilock CLI binary; cmd/cilock/main.go blank-imports the cilock-default plugin set (every attestor except sinkhole-flows, vsa and the AWS attestors (aws-iid, aws-codebuild, aws-config; build with -tags aws_attestors), plus the file, fulcio and piv signers). |
lockctl/ | A separate CLI binary (own go.mod) for control-plane operations, lives alongside CI/lock in the monorepo. |
compat/ | Compatibility shims (notably compat/go-witness/) so go-witness consumers can pin to rookery without re-importing every plugin path. |
deploy/ | Packaging recipes (melange / apko / similar) for producing release-shape binaries. |
docs/ and site/ | Reference Markdown and the Docusaurus site source for the CI/lock docs. |
The monorepo also hosts other CLIs that consume the same attestation core; this page focuses only on CI/lock.
Versioning
Rookery uses standard Go path-prefixed multi-module tags:
attestation/v0.1.0
plugins/attestors/git/v0.1.0
plugins/signers/file/v0.1.0Each module can be released independently, so a fix to the git attestor doesn't force a release of the whole tree.
Why this matters for CI/lock
Because CI/lock is just main.go with a curated set of blank imports, you can build your own cilock binary with a different mix of attestors or signers — for example, adding kms/aws for an AWS-native pipeline, dropping cloud signers entirely for an air-gapped build, or adding sinkhole-flows or vsa, the two attestors the default binary leaves out. The rookery-builder generates a real CI/lock with your chosen plugins; the release pipeline is the template for a full multi-arch signed release build.
The default cilock binary ships every attestor except sinkhole-flows, vsa and the AWS attestors (aws-iid, aws-codebuild, aws-config; build with -tags aws_attestors), and three signers (file, fulcio, piv). The remaining seven signers (debug-signer, kms/aws, kms/gcp, kms/azure, spiffe, vault, vault-transit) are opt-in via rookery-builder --with <signer-module>. This keeps the prebuilt binary's transitive dependency tree about 600 Go packages smaller.
Presets
The presets/ modules are the easiest way to grab a curated set without writing imports yourself:
presets/all— every attestor and signer in rookerypresets/cicd— the CI/CD-relevant subset (attestors +filesigner). This Go module is not the builder's--preset cicd, which is smaller:minimalplusgithub,gitlabandslsa, with no build-tool attestors such asmavenordocker(see Presets)presets/minimal—commandrun,environment,git,material,product+filesigner
The builder accepts a preset name (--preset cicd) and then layers --with <module> flags on top, so the typical "I need cicd plus KMS" build is one command. Add every attestor your steps name that the preset lacks, and check the result with cilock attestors list.
Licensing
Everything in rookery is Apache 2.0: the stock cilock CLI, the rookery builder, the builder's source, and every binary the builder produces. The repository has one LICENSE file at its root.
cilock license prints the Apache 2.0 text on every binary. A binary built with rookery-builder --customer <id> --tenant <id> also prints those values as branding lines under the license text; the license itself does not change.
A TestifySec platform subscription covers the hosted platform, not the CLI. You need no license from TestifySec to build, run, or redistribute a cilock binary.
Contributing
Both CI/lock and witness changes land here. See the rookery CONTRIBUTING guide for the workflow.
Reference generated from the product documentation. Match commands and support details to your installed release.