#!/usr/bin/env bash set -euo pipefail script_dir="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" repo_root="$(cd "$script_dir/../.." && pwd)" die() { printf 'ERROR: %s\n' "$*" >&2 exit 1 } require_env() { local key="$1" [[ -n "${!key:-}" ]] || die "Missing required env: $key" } host_from_url() { local value="$1" value="${value#https://}" value="${value#http://}" printf '%s' "${value%%/*}" } require_env IMAGE_TAG require_env IMAGE_DEPLOY_ENV require_env IMAGE_DEPLOY_PORT_PREFIX require_env IMAGE_DEPLOY_PUBLIC_URL require_env ADMINFRONT_URL require_env DEVFRONT_URL require_env ORGFRONT_URL require_env VITE_OIDC_AUTHORITY require_env HARBOR_HOSTNAME if ! printf '%s' "$IMAGE_TAG" | grep -Eq '^v[0-9]+\.[0-9]{4}\.[0-9a-f]{4}$'; then die "IMAGE_TAG must look like vX.YYMM.ab12 (got: $IMAGE_TAG)" fi case "$IMAGE_DEPLOY_ENV" in stage | staging) app_env="stage" default_instance_name="stage" ;; production | prod) app_env="production" default_instance_name="prod" ;; *) die "IMAGE_DEPLOY_ENV must be stage or production" ;; esac instance_name="${IMAGE_DEPLOY_INSTANCE_NAME:-$default_instance_name}" bundle_dir="${IMAGE_DEPLOY_BUNDLE_DIR:-$PWD/${instance_name}-image-deploy-bundle}" bundle_file="${IMAGE_DEPLOY_BUNDLE_FILE:-$PWD/${instance_name}-image-deploy-bundle.tgz}" compose_template="${IMAGE_DEPLOY_COMPOSE_TEMPLATE:-$repo_root/deploy/templates/docker-compose.images.yaml}" rm -rf "$bundle_dir" TARGET_DIR="$bundle_dir" bash "$repo_root/deploy/create-instance.sh" "$instance_name" "$IMAGE_DEPLOY_PORT_PREFIX" cp "$compose_template" "$bundle_dir/docker-compose.yml" public_host="$(host_from_url "$IMAGE_DEPLOY_PUBLIC_URL")" admin_host="$(host_from_url "$ADMINFRONT_URL")" dev_host="$(host_from_url "$DEVFRONT_URL")" org_host="$(host_from_url "$ORGFRONT_URL")" cat >"$bundle_dir/.env" <