apply/up ever runs, not after.
Static checks, on every pull request
Terraform:fmt -check catches style drift, validate catches syntax and type errors, both without touching the API or needing a real token. The optional community linter tflint adds general HCL best-practice rules; there’s no biznetgio-specific plugin, so it only checks universal Terraform patterns.
Pulumi: a preview already is your dry run, it computes a real diff against a valid token (needed for read-only data source calls) but never mutates anything. On top of that, your program is just code in your language, so its own tools apply: tsc --noEmit, mypy, go vet, dotnet build.
The diff is the real safety check
Never merge a pull request whose plan or preview you haven’t read. That’s the entire point of posting it as a PR comment in the CI/CD tutorial: review happens in the same place as the code review, not as a separate step someone skips.Guardrails specific to these providers
- Test with
pay_with_credit_card = false/payWithCreditCard: false. The resource is created but staysPendinguntil paid in the portal, so a whole plan-to-apply cycle can be rehearsed without a real charge landing. See the billing guide. - Read one-shot triggers and create-only fields as irreversible in review.
rebuild_os,reset_trigger, and the other triggers fire destructively the moment their value changes, and Terraform’sfmt/validateor a Pulumi type checker cannot warn you that a plan reinstalls an OS; a human reviewing the diff has to catch that. - Preview a destroy before running one for real.
terraform plan -destroyandpulumi preview --diffshow exactly what disappears, beforedestroy/downmakes it permanent.
Policy as code, once manual review isn’t enough
For a team that’s outgrown “someone reads every diff,” both ecosystems support enforcing rules automatically: Pulumi CrossGuard (pulumi policy new) or Terraform’s Sentinel/OPA tooling (Terraform Cloud’s paid tiers, or the open-source conftest against terraform show -json) can reject a plan that violates a rule, for example “production stacks must never set payWithCreditCard to false,” or “no bare-metal resources in the dev environment.” Worth adopting once manual review becomes the bottleneck, not before.
Next steps
- Capstone: a production stack on Biznet GIO - put every tutorial in this track together into one real deployment