ROOSTby Axowl

Docs

CI/CD integration

Run the simulator in your pipeline, sign with temporary keys in a temporary partition, and let everything disappear when the run ends. The simulator enforces the same policies as the appliance, so a test that passes here passes in production.

Pipeline

# GitHub Actions
services:
  roost:
    image: ghcr.io/axowl/roost-sim:1
    ports: ["8080:8080"]
steps:
  - run: roost partition create ci-$GITHUB_RUN_ID --ttl 30m
  - run: roost key create --purpose code-signing --name ci-$GITHUB_RUN_ID-sign --partition ci-$GITHUB_RUN_ID
  - run: ./build && roost sign ci-$GITHUB_RUN_ID-sign dist/app.bin
  - run: roost verify ci-$GITHUB_RUN_ID-sign dist/app.bin dist/app.sig
  # purge: the partition expires on its own

Test data lifecycle

StepWhat happensWho does it
ProvisionA partition for this run, with a lifetimeOne command
FixturesKeys named after the run, for example ci-build-842-signOne command per key
ExecuteTests sign, verify, wrap and unwrapYour tests
ValidateReceipts and envelopes are checkedYour tests
PurgePartition and keys expireRoost, automatically

Release signing with approval

The release job sends the artifact hash with the approval it received from the approvals inbox. Without it, the production key refuses with a reason, and the refusal is on record. Rules can run in record-only mode during a rollout. See Approvals and policies.

axowl.com/dashboard/acme/roost/ci
AxowlacmeRoostM

CI/CD

2runs active
184runs this week
0keys left behind
RunPartitionKeysStartedExpiresResult
build-843ci-build-843ci-build-843-sign09:3110:01Running
build-842ci-build-842ci-build-842-sign09:1209:42Passed · released
build-841ci-build-841ci-build-841-sign08:50expiredRefused · no approval
Simulator: ghcr.io/axowl/roost-sim:1 · same policy code as ROOST-26-0001 (1.1.0)
CI/CD: every run gets a partition that expires, and a release without approval is refused.