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() {
|
load_env_docker() {
|
||||||
local env_file="$ROOT/.env.docker"
|
local env_file="$ROOT/.env.docker"
|
||||||
if [ -f "$env_file" ]; then
|
[ -f "$env_file" ] || return 0
|
||||||
set -a
|
# Parse ligne par ligne (ne crashe pas sur une valeur avec quote mal fermée,
|
||||||
# shellcheck disable=SC1090
|
# contrairement à `source` qui exécute le fichier comme du bash).
|
||||||
source "$env_file"
|
local line key val
|
||||||
set +a
|
while IFS= read -r line || [ -n "$line" ]; do
|
||||||
fi
|
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() {
|
wait_for_postgres() {
|
||||||
|
|||||||
Reference in New Issue
Block a user