#!/usr/bin/env node import { spawnSync } from "node:child_process"; import path from "node:path"; import { fileURLToPath } from "node:url"; const ROOT = path.resolve(path.dirname(fileURLToPath(import.meta.url)), ".."); const TERRAFORM = process.env.TERRAFORM_BIN || "terraform"; const TERRAFORM_ROOT = path.join(ROOT, "terraform"); function run(args, cwd = TERRAFORM_ROOT, env = process.env) { const result = spawnSync(TERRAFORM, args, { cwd, encoding: "utf8", stdio: "inherit", env, }); if (result.error) { throw new Error(`could not start Terraform: ${result.error.message}`, { cause: result.error, }); } if (result.status !== 0) { throw new Error(`terraform ${args.join(" ")} failed with exit code ${result.status}`); } } run(["fmt", "-check", "-recursive", TERRAFORM_ROOT], ROOT); // -backend=false never touches HCP state; -lockfile=readonly refuses to // silently rewrite the committed provider lock. run(["init", "-backend=false", "-input=false", "-lockfile=readonly", "-no-color"]); run(["validate", "-no-color"], TERRAFORM_ROOT, { ...process.env, TF_VAR_environment: "dev", }); run(["validate", "-no-color"], TERRAFORM_ROOT, { ...process.env, TF_VAR_environment: "staging", }); console.log("Terraform formatting and validation passed for terraform/.");