Your cart is currently empty!
Automating Proper Terraform Formatting using Git Pre-Hooks
I’ve noticed lately that a lot of Terraform is formatted differently. Some developers utilize two indents, others one indent. As long as the Terraform as functional most people overlook the formatting of their infrastructure as code files.
Personally I don’t think we should ever push messy code into our repositories. How could we solve this problem? Well, Terraform has a built in formatter the terraform fmt
command will automatically format your code.
#!/usr/bin/env bash
# Initialize variables
EXIT_CODE=0
AFFECTED_FILES=()
# Detect OS for cross-platform compatibility
OS=$(uname -s)
IS_WINDOWS=false
if [[ "$OS" == MINGW* ]] || [[ "$OS" == CYGWIN* ]] || [[ "$OS" == MSYS* ]]; then
IS_WINDOWS=true
fi
# Find all .tf files - cross-platform compatible method
if [ "$IS_WINDOWS" = true ]; then
# For Windows using Git Bash
TF_FILES=$(find . -type f -name "*.tf" -not -path "*/\\.*" | sed 's/\\/\//g')
else
# For Linux/Mac
TF_FILES=$(find . -type f -name "*.tf" -not -path "*/\.*")
fi
# Check each file individually for better reporting
for file in $TF_FILES; do
# Get the directory of the file
dir=$(dirname "$file")
filename=$(basename "$file")
# Run terraform fmt check on the specific file - handle both OS formats
terraform -chdir="$dir" fmt -check "$filename" >/dev/null 2>&1
# If format check fails, record the file
if [ $? -ne 0 ]; then
AFFECTED_FILES+=("$file")
EXIT_CODE=1
fi
done
# If any files need formatting, list them and exit with error
if [ $EXIT_CODE -ne 0 ]; then
echo "Error: The following Terraform files need formatting:"
for file in "${AFFECTED_FILES[@]}"; do
echo " - $file"
done
echo ""
echo "Please run the following command to format these files:"
echo "terraform fmt -recursive"
exit 1
fi
echo "All Terraform files are properly formatted"
exit 0
Put this code inside your “.git/hooks/” directory so that it automatically runs when someone does a push. If there is badly formatted Terraform you should see something like:
Running Terraform format check...
Error: The following Terraform files need formatting:
- ./main.tf
Please run the following command to format these files:
terraform fmt -recursive
error: failed to push some refs to 'github.com:avansledright/terraform-fmt-pre-hook.git'
After running the <code>terraform fmt -recursive</code> it should push successfully!
If this was helpful to your or your team please share it across your social media!
Leave a Reply