name: Build and Push Server Docker Image

# 手动触发 workflow：从哪个分支运行，就打包哪个分支的代码
on:
  workflow_dispatch:

jobs:
  build-and-push:
    runs-on: ubuntu-latest

    steps:
      # 1️⃣ Checkout 仓库代码
      - name: Checkout repository
        uses: actions/checkout@v4
        with:
          fetch-depth: 0
          # 需要能 push tag（请在仓库 Secrets 配置 RUNNER_TOKEN）
          token: ${{ secrets.RUNNER_TOKEN }}
          persist-credentials: true

      # 2️⃣ 自动递增 tag 并推送回 Gitea 仓库（默认按 vX.Y.Z 的 patch +1）
      - name: Auto bump tag and push to repository
        shell: bash
        run: |
          set -euo pipefail

          # 配置提交信息（用于创建注释 tag）
          git config user.name "gitea-actions"
          git config user.email "actions@local"

          # 确保本地有最新 tags
          git fetch --tags --force

          # 取最新的 semver tag（vX.Y.Z），按版本号排序
          LATEST_TAG="$(git tag --list 'v*' --sort=-v:refname | head -n 1 || true)"
          echo "LATEST_TAG=${LATEST_TAG}"

          if [[ -z "${LATEST_TAG}" ]]; then
            NEXT_TAG="v1.0.0"
          else
            if [[ "${LATEST_TAG}" =~ ^v([0-9]+)\.([0-9]+)\.([0-9]+)$ ]]; then
              MAJOR="${BASH_REMATCH[1]}"
              MINOR="${BASH_REMATCH[2]}"
              PATCH="${BASH_REMATCH[3]}"
              NEXT_TAG="v${MAJOR}.${MINOR}.$((PATCH + 1))"
            else
              # 如果最新 tag 不符合 vX.Y.Z，回退到 v1.0.0，避免误解析
              NEXT_TAG="v1.0.0"
            fi
          fi

          echo "NEXT_TAG=${NEXT_TAG}"

          # 如果 tag 已存在则直接复用（避免重复运行失败）
          if git rev-parse -q --verify "refs/tags/${NEXT_TAG}" >/dev/null; then
            echo "Tag ${NEXT_TAG} 已存在，跳过创建。"
          else
            git tag -a "${NEXT_TAG}" -m "Release ${NEXT_TAG}"
            git push origin "${NEXT_TAG}"
          fi

          # 输出给后续步骤使用
          if [[ -n "${GITHUB_ENV:-}" ]]; then
            echo "IMAGE_TAG=${NEXT_TAG}" >> "$GITHUB_ENV"
          fi
          # 兼容部分 Gitea Runner 环境变量命名
          if [[ -n "${GITEA_ENV:-}" ]]; then
            echo "IMAGE_TAG=${NEXT_TAG}" >> "$GITEA_ENV"
          fi

      # 3️⃣ 设置镜像仓库与镜像名称（自建 Registry / Docker Hub 都可）
      - name: Set image variables
        shell: bash
        run: |
          # 直接写死：推送到自建仓库
          IMAGE_NAME="docker.damer.fun/damer/mindfulness-server"

          if [[ -n "${GITHUB_ENV:-}" ]]; then
            echo "IMAGE_NAME=$IMAGE_NAME" >> "$GITHUB_ENV"
          fi
          if [[ -n "${GITEA_ENV:-}" ]]; then
            echo "IMAGE_NAME=$IMAGE_NAME" >> "$GITEA_ENV"
          fi

      # 4️⃣ 登录镜像仓库（自建 Registry / Docker Hub）
      - name: Login to Docker Registry
        uses: docker/login-action@v3
        with:
          # 与 IMAGE_NAME 的 registry 保持一致
          registry: docker.damer.fun
          username: ${{ secrets.DOCKER_USERNAME }}
          password: ${{ secrets.DOCKER_TOKEN }}

      # 5️⃣ 构建 Docker 镜像（使用 server/ 作为构建上下文）
      - name: Build Docker Image
        shell: bash
        run: |
          docker build -f server/Dockerfile -t "$IMAGE_NAME:$IMAGE_TAG" server

      # 6️⃣ 推送 Docker 镜像到镜像仓库
      - name: Push Docker Image
        shell: bash
        run: |
          docker push "$IMAGE_NAME:$IMAGE_TAG"
