#!/usr/bin/env bash
set -euo pipefail
cd "$(dirname "$0")"
TF_BIN=${TF_BIN:-terraform}
HELM_BIN=${HELM_BIN:-helm}
KUBECTL_BIN=${KUBECTL_BIN:-kubectl}
tmp=$(mktemp -d)
trap 'rm -rf "$tmp"' EXIT
# Never use a cluster context or cloud backend in this local demonstration.
export KUBECONFIG="$tmp/no-kubeconfig" TF_DATA_DIR="$tmp/tfdata" CHECKPOINT_DISABLE=1
export HELM_CACHE_HOME="$tmp/helm/cache" HELM_CONFIG_HOME="$tmp/helm/config" HELM_DATA_HOME="$tmp/helm/data"
expect_fail() {
 local name=$1; shift
 set +e
 "$@" >"$tmp/negative.log" 2>&1
 local code=$?
 set -e
 cat "$tmp/negative.log"
 if [ "$code" -eq 0 ]; then echo "ERROR: $name unexpectedly passed"; exit 1; fi
 echo "$name: expected failure (exit=$code)"
}
go version
"$TF_BIN" version
"$HELM_BIN" version --short
"$KUBECTL_BIN" version --client -o json
go test -count=1 ./...
go test -race -count=1 ./...
go vet ./...
go build -o "$tmp/iaccheck" .
"$TF_BIN" -chdir=terraform fmt -check
"$TF_BIN" -chdir=terraform init -backend=false -input=false -no-color
"$TF_BIN" -chdir=terraform validate -no-color
"$TF_BIN" -chdir=terraform plan -input=false -no-color -out="$tmp/plan.bin"
"$TF_BIN" -chdir=terraform show -json "$tmp/plan.bin" > "$tmp/plan.json"
"$tmp/iaccheck" "$tmp/plan.json"
expect_fail terraform-invalid "$TF_BIN" -chdir=terraform plan -input=false -no-color -var=replicas=0
expect_fail replacement "$tmp/iaccheck" fixtures/replace.json
expect_fail unsupported-format "$tmp/iaccheck" fixtures/unknown.json
"$HELM_BIN" lint chart
"$HELM_BIN" template demo chart > "$tmp/helm.yaml"
grep -E 'name: demo$|replicas:|image:' "$tmp/helm.yaml"
expect_fail helm-invalid "$HELM_BIN" template demo chart --set replicas=0
"$KUBECTL_BIN" kustomize kustomize/overlays/prod > "$tmp/kustomize.yaml"
grep -E '^  name:|replicas:|image:' "$tmp/kustomize.yaml"
grep -q 'replicas: 3' "$tmp/kustomize.yaml"
"$KUBECTL_BIN" kustomize kustomize/overlays/unknown-field > "$tmp/unknown-field.yaml"
grep "does-not-exist: 3" "$tmp/unknown-field.yaml"
expect_fail patch-invalid "$KUBECTL_BIN" kustomize kustomize/overlays/bad
echo 'All local checks passed; no apply/install/upgrade/cloud API call performed.'
