diff --git a/scripts/deploy-prod.sh b/scripts/deploy-prod.sh index 3a906b3..a625109 100755 --- a/scripts/deploy-prod.sh +++ b/scripts/deploy-prod.sh @@ -64,12 +64,28 @@ EXPECTED_COMMIT="${EXPECTED_COMMIT:-}" load_env_docker() { local env_file="$ROOT/.env.docker" - if [ -f "$env_file" ]; then - set -a - # shellcheck disable=SC1090 - source "$env_file" - set +a - fi + [ -f "$env_file" ] || return 0 + # Parse ligne par ligne (ne crashe pas sur une valeur avec quote mal fermée, + # contrairement à `source` qui exécute le fichier comme du bash). + local line key val + while IFS= read -r line || [ -n "$line" ]; do + case "$line" in + ''|\#*) continue ;; # vide / commentaire + *=*) ;; # doit contenir = + *) continue ;; + esac + key="${line%%=*}" + val="${line#*=}" + # strip les guillemets entourants seulement s'ils sont équilibrés + case "$val" in + \"*\") val="${val#\"}"; val="${val%\"}" ;; + \'*\') val="${val#\'}"; val="${val%\'}" ;; + esac + # valide le nom de variable (alnum + underscore, commence par une lettre) + case "$key" in + [A-Za-z_]*|[A-Za-z_]*) export "$key=$val" ;; + esac + done < "$env_file" } wait_for_postgres() {