Cloud certification
Before a release is announced, the signed image and chart are deployed to a
disposable cluster, certified, and torn down, by the cloud-certification
workflow. It runs on demand with the release version and the two digests.
What a run does, in order:
- Verifies the cosign signatures of the image and chart against this repository’s release workflow.
- Provisions a disposable DigitalOcean Kubernetes or Amazon EKS cluster with Terraform, its state kept remotely per run.
- Starts an in-cluster PostgreSQL and Redis with freshly generated TLS material and secrets, then installs the release with production settings.
- Asserts
/readyon the gateway and admin, seeds the governed-core fixtures, and runs the governed-core end-to-end subset through port-forwards: a governed query with redaction and an audit row on every protocol. - Re-installs the same digest to prove the upgrade path, including the migration job.
- Uploads redacted evidence, releases the cluster’s volumes and destroys everything, whether or not certification passed.
The public beta is gated on a DigitalOcean run; general availability also needs an AWS (EKS) run. The current state of each gate is in the release process.
AWS prerequisites
Section titled “AWS prerequisites”The EKS job assumes an IAM role through GitHub’s OIDC provider, so it holds no long-lived AWS keys. Once per AWS account:
- An S3 bucket for Terraform state: private, versioned and encrypted.
- The IAM OIDC provider for
token.actions.githubusercontent.com, with audiencests.amazonaws.com. - A role the job can assume, trusted only for this repository’s
cloud-certificationenvironment, with a maximum session duration of at least three hours (the job asks for three, so create, certify and destroy run on one session). Check the subject format GitHub issues for the repository withgh api repos/<owner>/<repo>/actions/oidc/customization/sub: withuse_immutable_subject, the subject isrepo:<owner>@<owner_id>/<repo>@<repo_id>:environment:cloud-certification, notrepo:<owner>/<repo>:..., and a trust policy naming only the classic form refuses the job. - In the
cloud-certificationenvironment: the secretAWS_DEPLOY_ROLE_ARNand the variablesTF_STATE_AWS_BUCKETandTF_STATE_AWS_REGION.
Each EKS run uses one Elastic IP for its NAT gateway, so the region needs one free under the account’s quota.