From a7b98d0752e52ef54049078756427ea8e3d50b1c Mon Sep 17 00:00:00 2001 From: aipper Date: Sun, 1 Mar 2026 14:47:21 +0800 Subject: [PATCH] fix: load ACR config from env file --- build-push-acr.sh | 76 ++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 68 insertions(+), 8 deletions(-) diff --git a/build-push-acr.sh b/build-push-acr.sh index 86d1df8..f37b093 100755 --- a/build-push-acr.sh +++ b/build-push-acr.sh @@ -3,16 +3,76 @@ set -euo pipefail script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" -require() { - local name="$1" - if [[ -z "${!name:-}" ]]; then - echo "Missing env: ${name}" >&2 - exit 2 - fi +load_env_file() { + local file="$1" + [[ -f "$file" ]] || return 0 + + while IFS= read -r line || [[ -n "$line" ]]; do + line="${line#${line%%[![:space:]]*}}" + line="${line%${line##*[![:space:]]}}" + [[ -z "$line" ]] && continue + [[ "$line" == \#* ]] && continue + [[ "$line" != *=* ]] && continue + + local key="${line%%=*}" + local val="${line#*=}" + key="${key#${key%%[![:space:]]*}}" + key="${key%${key##*[![:space:]]}}" + [[ "$key" =~ ^[A-Za-z_][A-Za-z0-9_]*$ ]] || continue + + if [[ "$val" =~ ^\".*\"$ ]]; then + val="${val:1:${#val}-2}" + elif [[ "$val" =~ ^\'.*\'$ ]]; then + val="${val:1:${#val}-2}" + fi + + if [[ -z "${!key:-}" ]]; then + export "$key=$val" + fi + done < "$file" } -require ACR_REGISTRY -require ACR_NAMESPACE +usage() { + cat <<'EOF' >&2 +Usage: + ACR_REGISTRY=... ACR_NAMESPACE=... [ACR_USERNAME=... ACR_PASSWORD=...] bash build-push-acr.sh + +Required: + ACR_REGISTRY e.g. registry.cn-hangzhou.aliyuncs.com OR -registry..cr.aliyuncs.com + ACR_NAMESPACE your namespace + +Optional: + ENV_FILE env file to load (default: ../deploy/.env if exists) + IMAGE_REPO default: digital-archive-frontend + IMAGE_TAG default: git sha or timestamp + PKG_MANAGER pnpm|npm (build-arg) + NPM_REGISTRY custom npm registry (build-arg) + ACR_USERNAME / ACR_PASSWORD if set, script will docker login before pushing + +Compatibility: + REPO_URL -> ACR_REGISTRY + NAMESPACE -> ACR_NAMESPACE +EOF +} + +if [[ -n "${ENV_FILE:-}" ]]; then + load_env_file "$ENV_FILE" +else + load_env_file "$script_dir/../deploy/.env" +fi + +if [[ -z "${ACR_REGISTRY:-}" && -n "${REPO_URL:-}" ]]; then + export ACR_REGISTRY="$REPO_URL" +fi +if [[ -z "${ACR_NAMESPACE:-}" && -n "${NAMESPACE:-}" ]]; then + export ACR_NAMESPACE="$NAMESPACE" +fi + +if [[ -z "${ACR_REGISTRY:-}" || -z "${ACR_NAMESPACE:-}" ]]; then + echo "Missing required env: ACR_REGISTRY and/or ACR_NAMESPACE" >&2 + usage + exit 2 +fi image_repo="${IMAGE_REPO:-digital-archive-frontend}" image_tag="${IMAGE_TAG:-}"