Get your first preview note
This takes about ten minutes on GitHub, GitLab or Forgejo. You need a repository with a Pulumi program and at least one stack.
Install
Section titled “Install”npm i -D @intentius/plywood
npx plywood initinit finds each Pulumi.yaml and its stacks and writes plywood.yml. It renders the pipeline for the forge your origin remote points at, and prints the secrets and settings left for you to add.
Give the jobs their credentials
Section titled “Give the jobs their credentials”With pulumi_cloud.org and the identity.preview.pulumi and identity.up.pulumi keys in plywood.yml, each job trades its OIDC token for its own Pulumi Cloud token. Your Pulumi Cloud organization then needs an OIDC issuer for the repository. The other way is two access tokens in your forge’s secrets: PULUMI_ACCESS_TOKEN_PREVIEW for the preview job and PULUMI_ACCESS_TOKEN_UP for the update job.
Your backend URL goes in plywood.yml as backend:. Cloud access comes from OIDC: the preview job and the update job each assume their own role.
Open a pull request
Section titled “Open a pull request”Commit plywood.yml and the pipeline on a branch, then open a pull request. The preview job runs pulumi preview on each stack and posts one note:
plywood preview: 2 stacks, 3 to update, 1 to create
infra/dev ~ aws:sqs/queue:Queue events messageRetentionSeconds 3600 => 7200
+ aws:sns/topic:Topic alerts
infra/prod ~ aws:sqs/queue:Queue events messageRetentionSeconds 3600 => 7200
Approve: plywood approve up --plan sha256:4be1...The plywood/preview status stays waiting for an approval of that digest.
Your first pull request walks the same loop on a local bench, and Approve a wave covers the update.
Optional: hand this page to your coding agentThe steps work by hand too.
Set up plywood in this repository.
Read https://intentius.io/plywood/llms.txt first, then
https://intentius.io/plywood/getting-started/agents/ and follow it.
Ask me which stacks should wait for an approval before they update.
Open a pull request with the result.
Never run `pulumi up`, `plunge up`, `pulumi destroy` or `plywood approve`, override a policy denial, use `--mode up`, or merge; never touch `.chant/allowed_signers` or `chant/lifecycle`.