2026-01-27 17:40:15 +08:00
|
|
|
#!/bin/bash
|
2026-03-27 09:50:23 +08:00
|
|
|
set -euo pipefail
|
2026-01-27 17:40:15 +08:00
|
|
|
|
2026-03-27 09:50:23 +08:00
|
|
|
REGISTRY="crpi-8s2ierii2xan4klg.cn-beijing.personal.cr.aliyuncs.com/texpixel/doc_ai_backend"
|
|
|
|
|
BUILD_HOST="ubuntu"
|
|
|
|
|
BUILD_DIR="~/Dev/doc_ai_backed"
|
2026-01-27 17:40:15 +08:00
|
|
|
|
2026-03-27 09:50:23 +08:00
|
|
|
# --- 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}"
|