Restore to commit 74e578279624c6045ca440a3459ebfa1f8d54191
This commit is contained in:
92
scripts/validate-env.sh
Executable file
92
scripts/validate-env.sh
Executable file
@@ -0,0 +1,92 @@
|
||||
#!/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
|
||||
Reference in New Issue
Block a user