93 lines
2.8 KiB
Bash
Executable File
93 lines
2.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Validate .env files for common issues including invisible Unicode characters
|
|
# This script can be run before deployment to catch potential problems
|
|
|
|
set -e
|
|
|
|
ENV_FILE="${1:-.env}"
|
|
|
|
if [ ! -f "$ENV_FILE" ]; then
|
|
echo "✓ No $ENV_FILE file found (using environment variables or defaults)"
|
|
exit 0
|
|
fi
|
|
|
|
if [ $# -lt 1 ]; then
|
|
echo "Usage: $(basename "$0") [.env file path]"
|
|
echo "Example: $(basename "$0") .env"
|
|
exit 1
|
|
fi
|
|
|
|
echo "Validating $ENV_FILE..."
|
|
echo ""
|
|
|
|
# Check for invisible Unicode characters
|
|
FOUND_ISSUES=0
|
|
|
|
# Check for U+200E (Left-to-Right Mark) - E2 80 8E
|
|
if grep -q $'\xE2\x80\x8E' "$ENV_FILE" 2>/dev/null; then
|
|
echo "✗ Found U+200E (Left-to-Right Mark) invisible character"
|
|
grep -n $'\xE2\x80\x8E' "$ENV_FILE" | head -5
|
|
FOUND_ISSUES=1
|
|
fi
|
|
|
|
# Check for U+200F (Right-to-Left Mark) - E2 80 8F
|
|
if grep -q $'\xE2\x80\x8F' "$ENV_FILE" 2>/dev/null; then
|
|
echo "✗ Found U+200F (Right-to-Left Mark) invisible character"
|
|
grep -n $'\xE2\x80\x8F' "$ENV_FILE" | head -5
|
|
FOUND_ISSUES=1
|
|
fi
|
|
|
|
# Check for U+200B (Zero Width Space) - E2 80 8B
|
|
if grep -q $'\xE2\x80\x8B' "$ENV_FILE" 2>/dev/null; then
|
|
echo "✗ Found U+200B (Zero Width Space) invisible character"
|
|
grep -n $'\xE2\x80\x8B' "$ENV_FILE" | head -5
|
|
FOUND_ISSUES=1
|
|
fi
|
|
|
|
# Check for BOM (Byte Order Mark) - EF BB BF
|
|
if grep -q $'\xEF\xBB\xBF' "$ENV_FILE" 2>/dev/null; then
|
|
echo "✗ Found BOM (Byte Order Mark) at start of file"
|
|
FOUND_ISSUES=1
|
|
fi
|
|
|
|
# Check for other directional formatting characters
|
|
for code in $'\xE2\x80\xAA' $'\xE2\x80\xAB' $'\xE2\x80\xAC' $'\xE2\x80\xAD' $'\xE2\x80\xAE'; do
|
|
if grep -q "$code" "$ENV_FILE" 2>/dev/null; then
|
|
echo "✗ Found directional formatting invisible character"
|
|
FOUND_ISSUES=1
|
|
break
|
|
fi
|
|
done
|
|
|
|
# Check for Windows line endings (CRLF) if file command is available
|
|
if command -v file >/dev/null 2>&1; then
|
|
if file "$ENV_FILE" | grep -q CRLF 2>/dev/null; then
|
|
echo "⚠ Warning: File has Windows line endings (CRLF)"
|
|
echo " This may cause issues on Linux. Consider converting to LF."
|
|
fi
|
|
fi
|
|
|
|
# Check for trailing spaces on variable definitions
|
|
if grep -E '^[A-Z_]+[[:space:]]+=' "$ENV_FILE" >/dev/null 2>&1; then
|
|
echo "⚠ Warning: Found spaces before '=' in variable definitions"
|
|
grep -n -E '^[A-Z_]+[[:space:]]+=' "$ENV_FILE"
|
|
fi
|
|
|
|
# Check for spaces in variable names
|
|
if grep -E '^[A-Z_]+[[:space:]]+[^=]*=' "$ENV_FILE" >/dev/null 2>&1; then
|
|
echo "⚠ Warning: Possible spaces in variable names"
|
|
fi
|
|
|
|
if [ $FOUND_ISSUES -eq 0 ]; then
|
|
echo "✓ No invisible Unicode characters found"
|
|
echo "✓ File looks clean!"
|
|
exit 0
|
|
else
|
|
echo ""
|
|
echo "----------------------------------------"
|
|
echo "Issues found! Run the following to fix:"
|
|
echo " ./scripts/clean-env.sh $ENV_FILE"
|
|
echo "----------------------------------------"
|
|
exit 1
|
|
fi
|