From a1399a3d7bf6ca810e53dfcd02a1485813626142 Mon Sep 17 00:00:00 2001 From: Antigravity Date: Sun, 28 Jun 2026 09:41:11 +0000 Subject: [PATCH] =?UTF-8?q?fix(deploy):=20parser=20.env.docker=20robuste?= =?UTF-8?q?=20(source=20crashait=20sur=20quote=20non=20ferm=C3=A9e)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Remplace `source .env.docker` par un parse ligne par ligne qui ne crashe pas quand une valeur contient un guillemet mal fermé (erreur: unexpected EOF while looking for matching "). Les variables valides sont quand même exportées. Co-authored-by: Cursor --- scripts/deploy-prod.sh | 28 ++++++++++++++++++++++------ 1 file changed, 22 insertions(+), 6 deletions(-) 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() {