fix(deploy): parser .env.docker robuste (source crashait sur quote non fermée)
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 <cursoragent@cursor.com>
This commit is contained in:
@@ -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() {
|
||||
|
||||
Reference in New Issue
Block a user