#!/bin/bash
# cresc-server Cloud Run 日常更新脚本(只换镜像,不触碰 env/网络等既有配置)
# 用法: 在 code 目录下执行 ./deploy/update-cloudrun.sh
# 首次搭建请用 deploy-cloudrun.sh(需要 .env.prod.yaml);本脚本不需要任何密钥文件。
set -e

PROJECT_ID="cresc-prod"
REGION="asia-southeast1"
GAR_REPO="cresc-repo"
IMAGE_NAME="cresc-server"

GIT_COMMIT="$(git rev-parse HEAD)"
GIT_COMMIT_SHORT="$(git rev-parse --short=8 HEAD)"
GIT_COMMIT_DATE="$(git log -1 --format=%cd --date=format:%Y.%-m.%-d)"
VERSION="${GIT_COMMIT_DATE}-${GIT_COMMIT_SHORT}"
IMAGE_URI="${REGION}-docker.pkg.dev/${PROJECT_ID}/${GAR_REPO}/${IMAGE_NAME}:${VERSION}"

echo "==> 构建镜像 ${VERSION}"
gcloud builds submit . --project "$PROJECT_ID" \
    --config deploy/cloudbuild.yaml \
    --substitutions "_IMAGE_URI=${IMAGE_URI},_GIT_COMMIT=${GIT_COMMIT},_GIT_COMMIT_SHORT=${GIT_COMMIT_SHORT},_GIT_COMMIT_DATE=${GIT_COMMIT_DATE}"

# 按版本号打 tag 的镜像天然支持回滚:重跑本脚本部署旧 tag,
# 或 gcloud run services update-traffic cresc-api --to-revisions <旧revision>=100
echo "==> 更新 API"
gcloud run deploy cresc-api --project "$PROJECT_ID" --region "$REGION" \
    --image "$IMAGE_URI"
gcloud run services update-traffic cresc-api \
    --project "$PROJECT_ID" --region "$REGION" --to-latest

echo "==> 更新 Worker"
gcloud run deploy cresc-worker --project "$PROJECT_ID" --region "$REGION" \
    --image "$IMAGE_URI"
gcloud run services update-traffic cresc-worker \
    --project "$PROJECT_ID" --region "$REGION" --to-latest

echo "==> 更新 dailyjob"
gcloud run jobs update cresc-dailyjob --project "$PROJECT_ID" --region "$REGION" \
    --image "$IMAGE_URI"

echo "==> 完成: ${VERSION}"
gcloud run services describe cresc-api --project "$PROJECT_ID" --region "$REGION" \
    --format='value(status.url)' | xargs -I{} curl -s -m 15 "{}/" -o /dev/null -w "API health: HTTP %{http_code}\n"
