#!/usr/bin/env bash set -eo pipefail # This script accepts the filename and an array of options for tflint. # To call it, e.g. # rules=( # "--enable-rule=terraform_deprecated_interpolation" # "--enable-rule=terraform_deprecated_index" # ) # ./.ci/scripts/validate-terraform-file.sh "$filename" "${rules[@]}" filename=$1 shift rules=( "$@" ) exit_code=0 block_number=0 while IFS= read -r block ; do ((block_number+=1)) start_line=$(echo "$block" | jq '.start_line') end_line=$(echo "$block" | jq '.end_line') text=$(echo "$block" | jq --raw-output '.text') td=$(mktemp -d) tf="$td/main.tf" echo "$text" > "$tf" # We need to capture the output and error code here. We don't want to exit on the first error set +e tflint_output=$(tflint --config .ci/.tflint.hcl "${rules[@]}" "$tf" 2>&1) tflint_exitcode=$? set -e if [ $tflint_exitcode -ne 0 ]; then echo "ERROR: File \"$filename\", block #$block_number (lines $start_line-$end_line):" echo "$tflint_output" echo exit_code=1 fi done < <( terrafmt blocks --json "$filename" | jq --compact-output '.blocks[]?' ) exit $exit_code