#!/bin/bash set -euo pipefail REGISTRY="crpi-8s2ierii2xan4klg.cn-beijing.personal.cr.aliyuncs.com/texpixel/doc_ai_backend" BUILD_HOST="ubuntu" BUILD_DIR="~/Dev/doc_ai_backed" # --- Guard: must be on main/master --- BRANCH=$(git rev-parse --abbrev-ref HEAD) if [[ "${BRANCH}" != "main" && "${BRANCH}" != "master" ]]; then echo "ERROR: must be on main or master branch (current: ${BRANCH})" exit 1 fi VERSION=$(git rev-parse --short HEAD) IMAGE_VERSIONED="${REGISTRY}:${VERSION}" IMAGE_LATEST="${REGISTRY}:latest" echo "==> [1/3] Pulling latest code on Ubuntu" ssh ${BUILD_HOST} " set -e cd ${BUILD_DIR} git fetch origin git checkout master 2>/dev/null || git checkout main git pull " echo "==> [2/3] Building & pushing image on Ubuntu" ssh ${BUILD_HOST} " set -e cd ${BUILD_DIR} docker build --platform linux/amd64 \ -t ${IMAGE_VERSIONED} \ -t ${IMAGE_LATEST} \ . docker push ${IMAGE_VERSIONED} docker push ${IMAGE_LATEST} docker rmi ${IMAGE_VERSIONED} ${IMAGE_LATEST} 2>/dev/null || true " echo "==> [3/3] Deploying on ECS" ssh ecs " set -e echo '--- Pulling image' docker pull ${IMAGE_VERSIONED} echo '--- Stopping old container' docker stop doc_ai 2>/dev/null || true docker rm doc_ai 2>/dev/null || true echo '--- Starting new container' docker run -d \ --name doc_ai \ -p 8024:8024 \ --restart unless-stopped \ ${IMAGE_VERSIONED} \ -env=prod echo '--- Removing old doc_ai images (keeping current)' docker images --format '{{.Repository}}:{{.Tag}} {{.ID}}' \ | grep '^${REGISTRY}' \ | grep -v ':${VERSION}' \ | grep -v ':latest' \ | awk '{print \$2}' \ | xargs -r docker rmi || true " echo "==> Done. Running version: ${VERSION}"