|
|
|
@@ -136,6 +136,42 @@ contains_service() { |
|
|
|
return 1 |
|
|
|
} |
|
|
|
|
|
|
|
escape_sed_replacement() { |
|
|
|
local value="$1" |
|
|
|
value="${value//\\/\\\\}" |
|
|
|
value="${value//&/\\&}" |
|
|
|
value="${value//|/\\|}" |
|
|
|
printf '%s\n' "$value" |
|
|
|
} |
|
|
|
|
|
|
|
apply_runtime_env_defaults() { |
|
|
|
local defaults_file="$SCRIPT_DIR/update-env.defaults" |
|
|
|
[[ -f "$defaults_file" ]] || return 0 |
|
|
|
|
|
|
|
local backup_file line key value escaped |
|
|
|
backup_file="${ENV_FILE}.bak-$(date '+%Y%m%d%H%M%S')" |
|
|
|
cp "$ENV_FILE" "$backup_file" |
|
|
|
log "Apply runtime env defaults: $defaults_file" |
|
|
|
log "Runtime env backup: $backup_file" |
|
|
|
|
|
|
|
while IFS= read -r line || [[ -n "$line" ]]; do |
|
|
|
[[ -n "$line" ]] || continue |
|
|
|
[[ "$line" == \#* ]] && continue |
|
|
|
[[ "$line" == *"="* ]] || continue |
|
|
|
|
|
|
|
key="${line%%=*}" |
|
|
|
value="${line#*=}" |
|
|
|
[[ "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || die "Invalid env key in $defaults_file: $key" |
|
|
|
|
|
|
|
escaped="$(escape_sed_replacement "$value")" |
|
|
|
if grep -q "^${key}=" "$ENV_FILE"; then |
|
|
|
sed -i "s|^${key}=.*|${key}=${escaped}|" "$ENV_FILE" |
|
|
|
else |
|
|
|
printf '\n%s=%s\n' "$key" "$value" >> "$ENV_FILE" |
|
|
|
fi |
|
|
|
done < "$defaults_file" |
|
|
|
} |
|
|
|
|
|
|
|
need_cmd docker |
|
|
|
ENV_FILE="$(resolve_runtime_file "$ENV_FILE" ".env")" |
|
|
|
resolve_compose_files |
|
|
|
@@ -147,6 +183,8 @@ mapfile -t UPDATE_SERVICES < <(read_services "$@") |
|
|
|
|
|
|
|
COMPOSE_CMD="$(resolve_compose_cmd)" |
|
|
|
|
|
|
|
apply_runtime_env_defaults |
|
|
|
|
|
|
|
log "Compose files: ${RESOLVED_COMPOSE_FILES[*]}" |
|
|
|
log "Load images: $IMAGE_TAR" |
|
|
|
docker load -i "$IMAGE_TAR" |
|
|
|
|