pre-commit-opentofu/terraform_validate.sh
Nick M 7694fb9b9a
fix: Change terraform_validate hook functionality for subdirectories with terraform files (#100)
* Update terraform_validate.sh:
-Change to the directory before running terraform validate to use the Terraform
 configuration for the appropriate working directory.

* Neglected to change the terraform validate call to use the default of the
current directory.

* Several changes to improve functionality:
- Switch to checking the path for '*.tf' instead of always checking the current
  directory.
- Try to find a '.terraform' directory (which indicates a `terraform init`) and
  change to that directory before running `terraform validate`.

* Fix the description for the terraform_validate hook to reflect changes that were
made in:
35e0356188

* - Clean up comments.
- Adjust variable names to better reflect what they are holding.
2020-04-04 08:17:25 +02:00

50 lines
1.2 KiB
Bash
Executable file

#!/usr/bin/env bash
set -e
declare -a paths
index=0
error=0
for file_with_path in "$@"; do
file_with_path="${file_with_path// /__REPLACED__SPACE__}"
paths[index]=$(dirname "$file_with_path")
(("index+=1"))
done
for path_uniq in $(echo "${paths[*]}" | tr ' ' '\n' | sort -u); do
path_uniq="${path_uniq//__REPLACED__SPACE__/ }"
if [[ -n "$(find $path_uniq -maxdepth 1 -name '*.tf' -print -quit)" ]]; then
starting_path=$(realpath "$path_uniq")
terraform_path="$path_uniq"
# Find the relevant .terraform directory (indicating a 'terraform init'),
# but fall through to the current directory.
while [[ "$terraform_path" != "." ]]; do
if [[ -d "$terraform_path/.terraform" ]]; then
break
else
terraform_path=$(dirname "$terraform_path")
fi
done
validate_path="${path_uniq#"$terraform_path"}"
# Change to the directory that has been initialized, run validation, then
# change back to the starting directory.
cd "$(realpath "$terraform_path")"
if ! terraform validate $validate_path; then
error=1
echo
echo "Failed path: $path_uniq"
echo "================================"
fi
cd "$starting_path"
fi
done
if [[ "${error}" -ne 0 ]]; then
exit 1
fi