name: Deploy to Huawei OBS

on:
  push:
    tags:
      - 'v*'
    paths:
      - 'template/tinyvue/**'

  workflow_dispatch:
    inputs:
      version:
        description: 输入您将要发布的版本号(默认使用 template/tinyvue/package.json 中的版本号),例如:`0.1.0`。
        required: false
        type: string

env:
  # 在 GitHub 项目源码仓库 → 项目的 Settings → Secrets(Actions 里的 Repository secrets) 里提前建好以下变量
  HUAWEI_CLOUD_AK: ${{ secrets.HUAWEI_CLOUD_AK }}
  HUAWEI_CLOUD_SK: ${{ secrets.HUAWEI_CLOUD_SK }}
  HUAWEI_CLOUD_ENDPOINT: ${{ secrets.HUAWEI_CLOUD_ENDPOINT }}
  HUAWEI_CLOUD_BUCKET: ${{ secrets.HUAWEI_CLOUD_BUCKET }}

permissions:
  contents: read
  pages: write
  id-token: write

jobs:
  # Build job
  build:
    runs-on: ubuntu-latest
    outputs:
      version: ${{ steps.ver.outputs.value }}
    steps:
      - name: Checkout
        uses: actions/checkout@v4
      - name: Setup pnpm
        uses: pnpm/action-setup@v3
        with:
          version: 9
      - name: Install deps
        run: pnpm i --no-frozen-lockfile
      - name: Get version
        id: ver
        run: |
          # 优先用手动输入的版本号
          if [ -n "${{ inputs.version }}" ]; then
            VERSION="${{ inputs.version }}"
          else
            VERSION="$(node -p "require('./template/tinyvue/package.json').version")"
          fi
          echo "version: $VERSION"
          echo "value=$VERSION" >> $GITHUB_OUTPUT
      - name: Build site
        run: |
          export NODE_OPTIONS="--max-old-space-size=8192"
          pnpm -F tiny-pro-vue build
        env:
          VITE_BASE: //res-static.opentiny.design/tiny-pro-vue/${{ steps.ver.outputs.value }}/vue-pro/pages/
          VITE_OUT_DIR: ../dist/vue-pro/pages
          VITE_CONTEXT: /vue-pro/pages/
          VITE_BASE_API: /tiny-pro-vue/api
          VITE_MOCK_SERVER_HOST: /tiny-pro-vue/api/mock
          # 是否启用设计器
          VITE_LOWCODE_DESIGNER_ENABLED: true
          # 配置设计器链接,部署后使用相对路径 /designer
          VITE_LOWCODE_DESIGNER_URL: https://ai.opentiny.design/designer/
      - name: Build lowcode-designer
        run: |
          export NODE_OPTIONS="--max-old-space-size=8192"
          cd template/lowcode-designer
          pnpm build
        env:
          # 配置设计器的 base 路径,部署到 /designer/ 目录下
          VITE_DESIGNER_BASE: /designer/
      - name: Copy lowcode-designer to vue-pro/designer
        run: |
          # 将 lowcode-designer 的构建产物放入 vue-pro/designer 目录下
          mkdir -p ./template/tinyvue/dist/vue-pro/designer
          cp -r ./template/lowcode-designer/dist/* ./template/tinyvue/dist/vue-pro/designer/
      - name: Copy files
        run: |
          cp ./template/tinyvue/dist/vue-pro/pages/index.html ./template/tinyvue/dist/vue-pro/pages/404.html
      - name: Upload build artifact
        uses: actions/upload-artifact@v4
        with:
          name: dist-artifact
          path: template/tinyvue/dist/
  # Deploy job
  deploy:
    needs: build
    runs-on: ubuntu-latest
    steps:
      - name: Download build artifact
        uses: actions/download-artifact@v4
        with:
          name: dist-artifact
          path: template/tinyvue/dist/
      - name: Show version
        run: |
          echo "Deploying version: ${{ needs.build.outputs.version }}"
      # ===== 下载 obsutil =====
      - name: Install obsutil
        run: |
          curl -o obsutil.tar.gz https://obs-community.obs.cn-north-1.myhuaweicloud.com/obsutil/current/obsutil_linux_amd64.tar.gz
          tar -xzf obsutil.tar.gz
          chmod +x obsutil_linux_amd64_*/obsutil
          sudo mv obsutil_linux_amd64_*/obsutil /usr/local/bin/obsutil

      # ===== 配置并上传 =====
      - name: Upload to OBS
        run: |
          # 一次性配置 AK/SK/endpoint
          obsutil config -i=${{ env.HUAWEI_CLOUD_AK }} \
                         -k=${{ env.HUAWEI_CLOUD_SK }} \
                         -e=${{ env.HUAWEI_CLOUD_ENDPOINT }}

          # 把本地 dist/ 目录整站同步到桶根目录
          echo "needs.build.outputs.version: ${{ needs.build.outputs.version }}"
          mv template/tinyvue/dist ${{ needs.build.outputs.version }}
          obsutil cp ${{ needs.build.outputs.version }} obs://${{ env.HUAWEI_CLOUD_BUCKET }}/tiny-pro-vue/ -r -f