Skip to main content
The goal: open a pull request, a bot posts the plan/preview as a comment automatically, a human reviews it, and merging to 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:
The 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:
Same trick as Terraform: 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 for main, 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