diff --git a/RELEASE_NOTES_v2.2.83.md b/RELEASE_NOTES_v2.2.83.md new file mode 100644 index 0000000..30d53c2 --- /dev/null +++ b/RELEASE_NOTES_v2.2.83.md @@ -0,0 +1,14 @@ +# Release Notes v2.2.83 + +Dato: 2026-05-04 + +## Hotfix + +- `updateto.sh` loader nu `.env` sikkert uden `source`. +- Deploy fejler ikke laengere med shell-fejl som fx `Hub: command not found` ved ugyldige tekstlinjer i `.env`. +- Scriptet giver nu tydelig linjenummer-fejl ved ugyldige `.env` linjer. + +## Berorte filer + +- `updateto.sh` +- `VERSION` diff --git a/VERSION b/VERSION index c08f469..d6a972e 100644 --- a/VERSION +++ b/VERSION @@ -1 +1 @@ -2.2.82 +2.2.83 diff --git a/updateto.sh b/updateto.sh index 383f2d9..c903d32 100755 --- a/updateto.sh +++ b/updateto.sh @@ -68,10 +68,58 @@ if grep -q '^STACK_NAME=' .env; then sed -i.bak '/^STACK_NAME=/d' .env fi -# Load environment variables (DB credentials) -set -a -source .env -set +a +# Load environment variables safely (without executing arbitrary shell from .env) +load_env_file() { + local env_file="$1" + local line="" + local trimmed="" + local key="" + local value="" + local first_char="" + local last_char="" + local line_no=0 + + while IFS= read -r line || [ -n "$line" ]; do + line_no=$((line_no + 1)) + line="${line%$'\r'}" + trimmed="${line#"${line%%[![:space:]]*}"}" + + if [ -z "$trimmed" ] || [[ "$trimmed" == \#* ]]; then + continue + fi + + if [[ "$line" != *=* ]]; then + echo "❌ Fejl: Ugyldig linje i .env ($line_no): $line" + echo " Forventet format: KEY=VALUE" + exit 1 + fi + + key="${line%%=*}" + value="${line#*=}" + + # Trim whitespace around key only. + key="${key#"${key%%[![:space:]]*}"}" + key="${key%"${key##*[![:space:]]}"}" + + if [[ ! "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]]; then + echo "❌ Fejl: Ugyldigt variabelnavn i .env ($line_no): $key" + exit 1 + fi + + # Remove one level of wrapping quotes from value. + if [ "${#value}" -ge 2 ]; then + first_char="${value:0:1}" + last_char="${value: -1}" + if { [ "$first_char" = '"' ] && [ "$last_char" = '"' ]; } || { [ "$first_char" = "'" ] && [ "$last_char" = "'" ]; }; then + value="${value:1:${#value}-2}" + fi + fi + + export "$key=$value" + done < "$env_file" +} + +load_env_file .env STACK_NAME="${STACK_NAME:-$DEFAULT_STACK_NAME}" POSTGRES_CONTAINER="bmc-hub-postgres-${STACK_NAME}"