#!/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_PUBLIC_URL require_env IMAGE_DEPLOY_BACKEND_PORT require_env ADMINFRONT_URL require_env DEVFRONT_URL require_env ORGFRONT_URL require_env VITE_OIDC_AUTHORITY 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}" port_prefix="${IMAGE_DEPLOY_PORT_PREFIX:-${IMAGE_DEPLOY_BACKEND_PORT%???}}" [[ -n "$port_prefix" ]] || die "IMAGE_DEPLOY_PORT_PREFIX is empty and could not be derived from IMAGE_DEPLOY_BACKEND_PORT." 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" "$port_prefix" cp "$compose_template" "$bundle_dir/docker-compose.yml" mkdir -p "$bundle_dir/scripts/docker-image" "$bundle_dir/scripts/backup/lib" cp "$repo_root/scripts/docker-image/download_works_drive.sh" "$bundle_dir/scripts/docker-image/download_works_drive.sh" cp "$repo_root/scripts/backup/lib/common.sh" "$bundle_dir/scripts/backup/lib/common.sh" chmod +x "$bundle_dir/scripts/docker-image/download_works_drive.sh" sed "s/{{BACKEND_PORT}}/${IMAGE_DEPLOY_BACKEND_PORT}/g" \ "$repo_root/deploy/templates/gateway/nginx.conf" >"$bundle_dir/gateway/nginx.conf" sed "s/{{BACKEND_PORT}}/${IMAGE_DEPLOY_BACKEND_PORT}/g" \ "$repo_root/deploy/templates/ory/oathkeeper/rules.json" >"$bundle_dir/ory/templates/oathkeeper/rules.json" cp "$bundle_dir/ory/templates/oathkeeper/rules.json" "$bundle_dir/ory/templates/oathkeeper/rules.stage.json" cp "$bundle_dir/ory/templates/oathkeeper/rules.json" "$bundle_dir/ory/templates/oathkeeper/rules.prod.json" cp "$bundle_dir/ory/templates/oathkeeper/rules.json" "$bundle_dir/ory/templates/oathkeeper/rules.active.json" 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")" backend_log_level="${IMAGE_DEPLOY_BACKEND_LOG_LEVEL:-${BACKEND_LOG_LEVEL:-info}}" client_log_debug="${IMAGE_DEPLOY_CLIENT_LOG_DEBUG:-${CLIENT_LOG_DEBUG:-false}}" backend_public_url="${IMAGE_DEPLOY_BACKEND_PUBLIC_URL:-${BACKEND_PUBLIC_URL:-${BACKEND_URL:-$IMAGE_DEPLOY_PUBLIC_URL}}}" backend_url="${IMAGE_DEPLOY_BACKEND_URL:-${BACKEND_URL:-$backend_public_url}}" cat >"$bundle_dir/.env" <