main applies it for real, gated behind a required approval. This tutorial wires that up for both providers.
This assumes the project structure tutorial’s
infra/ folder, and a token already stored as a GitHub Actions secret per Manage secrets the right way.Terraform
.github/workflows/terraform.yml:
environment: production line on the apply job is what lets you require an approval before it runs: in the repository’s Settings → Environments → production, add required reviewers, and the job pauses until one of them approves it, even though it already passed CI.
Pulumi
Pulumi ships an official action that already knows how to comment a preview onto a pull request, so there’s no manual scripting step. It needs a second secret,PULUMI_ACCESS_TOKEN, a Pulumi Cloud token separate from your Biznet GIO one, because the action logs in to Pulumi Cloud to read and write the stack’s state.
.github/workflows/pulumi.yml:
environment: production on the up job gates it behind required reviewers configured in the repository settings.
Require the check before merge
Turn on branch protection formain, and mark the plan (Terraform) or preview (Pulumi) job as a required status check. That makes it impossible to merge a pull request whose diff nobody has seen.
Next steps
- Reusable modules and components - package the resources this pipeline deploys so staging and production stay in sync