Skip to main content

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

DirectoryWhat'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 (40 attestors today).
plugins/signers/Each signer as its own Go module. Default binary ships file, fulcio; 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 + file + fulcio).
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 docs-website/Markdown content and the Docusaurus-style 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.0

Each 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 inspec, kube-bench, nessus, oscap, or prowler for compliance-heavy environments. 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 and two signers (file, fulcio). 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 rookery
  • presets/cicd — the CI/CD-relevant subset (attestors + file signer)
  • presets/minimalcommandrun, environment, git, material, product + file signer

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.

Licensing

CI/lock uses an open-core split:

  • The stock cilock CLI is Apache 2.0 — fully open source, no strings attached. cilock license on a stock binary prints the Apache 2.0 text.
  • The rookery builder, its derivative works, and the binaries it produces are licensed under the Business Source License 1.1 (BUSL). BUSL is source-available: each release converts to GPL 2.0 four years after publication, and production use is granted free while you hold a valid TestifySec platform license. A builder-produced binary's cilock license reports BUSL.

So you can read, build, and self-use the builder source; commercial production use of builder-composed binaries is covered by a TestifySec platform license until the Change Date.

Contributing

Both CI/lock and witness changes land here. See the rookery CONTRIBUTING guide for the workflow.