name: 构建并部署前端到生产环境

on:
  push:
    branches:
      - main
      - dev
      - test

env:
  REGISTRY: registry.boss160.cn
  IMAGE_NAME: registry.boss160.cn/junhong/c-xmot-iot
  DEPLOY_DIR: /opt/device_voice_h5

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

    steps:
      - name: 检出代码
        run: |
          export PATH="$HOME/.nix-profile/bin:/usr/local/bin:/usr/bin:/bin:$PATH"
          export GIT_SSL_NO_VERIFY=1
          git clone https://git.boss160.cn/luo/c-xmot-iot.git .
          git checkout ${{ github.sha }}

      - name: 设置镜像标签
        id: tag
        run: |
          if [ "${{ github.ref }}" = "refs/heads/main" ]; then
            echo "tag=latest" >> $GITHUB_OUTPUT
          elif [ "${{ github.ref }}" = "refs/heads/dev" ]; then
            echo "tag=dev" >> $GITHUB_OUTPUT
          elif [ "${{ github.ref }}" = "refs/heads/test" ]; then
            echo "tag=test" >> $GITHUB_OUTPUT
          else
            echo "tag=unknown" >> $GITHUB_OUTPUT
          fi

      - name: 登录 Docker Registry
        run: |
          echo "${{ secrets.REGISTRY_PASSWORD }}" | docker login "${{ env.REGISTRY }}" --username "${{ secrets.REGISTRY_USERNAME }}" --password-stdin

      - name: 构建前端镜像
        run: |
          docker build -t ${{ env.IMAGE_NAME }}:${{ steps.tag.outputs.tag }} .
          docker tag ${{ env.IMAGE_NAME }}:${{ steps.tag.outputs.tag }} ${{ env.IMAGE_NAME }}:${{ github.sha }}

      - name: 推送镜像到 Registry
        run: |
          docker push ${{ env.IMAGE_NAME }}:${{ steps.tag.outputs.tag }}
          docker push ${{ env.IMAGE_NAME }}:${{ github.sha }}

      - name: 部署到本地（仅 main 分支）
        if: github.ref == 'refs/heads/main'
        run: |
          mkdir -p ${{ env.DEPLOY_DIR }}

          echo "更新部署配置文件..."
          cp -v docker-compose.prod.yml ${{ env.DEPLOY_DIR }}/

          cd ${{ env.DEPLOY_DIR }}

          echo "拉取最新镜像..."
          docker compose -f docker-compose.prod.yml pull

          echo "重启服务..."
          docker compose -f docker-compose.prod.yml up -d

          echo "等待服务启动..."
          sleep 5

          echo "部署完成！"
          docker compose -f docker-compose.prod.yml ps

      - name: 构建结果通知
        if: always()
        run: |
          if [ "${{ job.status }}" = "success" ]; then
            echo "构建成功: ${{ steps.tag.outputs.tag }}"
            echo "镜像标签: ${{ github.sha }}"
          else
            echo "构建失败"
          fi
