name: Clean ESA Versions on Main

on:
  push:
    branches: [ main ]

permissions:
  contents: read

jobs:
  clean-esa-versions:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      # 下载阿里云CLI https://help.aliyun.com/zh/cli/
      - name: Download Aliyun Cli
        run: |
          set -euo pipefail
          /bin/bash -c "$(curl -fsSL https://aliyuncli.alicdn.com/install.sh)"

      # 配置阿里云CLI
      - name: Configure Aliyun CLI
        run: |
          aliyun configure set \
            --profile AkProfile \
            --mode AK \
            --access-key-id ${{ secrets.ALIYUN_ACCESS_KEY_ID }} \
            --access-key-secret ${{ secrets.ALIYUN_ACCESS_KEY_SECRET }} \
            --region "cn-hangzhou"

      # 获取Pages名称（可配置）
      - name: Get Pages Name
        id: get-pages-name
        run: |
          # 从配置中读取Pages名称，这里使用默认值blog，可根据需要修改
          echo "pages_name=fuwari" >> $GITHUB_OUTPUT

      # 获取所有代码版本并清理旧版本
      - name: Clean ESA Code Versions
        env:
          PAGES_NAME: ${{ steps.get-pages-name.outputs.pages_name }}
          # 配置保留的版本数，默认为1（只保留最新版本）
          RETAIN_VERSIONS: ${{ vars.RETAIN_VERSIONS || '1' }}
        run: |
          set -euo pipefail

          echo "开始清理阿里云ESA版本..."
          echo "目标Pages: $PAGES_NAME"
          echo "保留版本数: $RETAIN_VERSIONS"

          # 获取所有版本信息
          VERSIONS_JSON=$(aliyun esa ListRoutineCodeVersions --region cn-hangzhou --Name $PAGES_NAME)

          # 解析版本数量
          TOTAL_COUNT=$(echo $VERSIONS_JSON | jq -r '.TotalCount')
          echo "当前共有 $TOTAL_COUNT 个版本"

          # 如果版本数不超过保留数量，不需要清理
          if [ "$TOTAL_COUNT" -le "$RETAIN_VERSIONS" ]; then
            echo "版本数 ($TOTAL_COUNT) 未超过保留数量 ($RETAIN_VERSIONS)，无需清理"
            echo "ESA会自动检测main分支更新并部署"
            exit 0
          fi

          # 计算需要删除的版本数（保留指定数量的最新版本）
          DELETE_COUNT=$((TOTAL_COUNT - RETAIN_VERSIONS))
          echo "需要删除 $DELETE_COUNT 个旧版本，保留最新的 $RETAIN_VERSIONS 个版本"

          # 解析版本列表，按创建时间排序（最早的在前）
          VERSIONS_TO_DELETE=$(echo $VERSIONS_JSON | jq -r '.CodeVersions | sort_by(.CreateTime) | .[0:'$DELETE_COUNT'] | .[].CodeVersion')

          echo "将要删除的版本: $VERSIONS_TO_DELETE"

          # 删除旧版本
          DELETED_COUNT=0
          for VERSION in $VERSIONS_TO_DELETE; do
            echo "正在删除版本: $VERSION"
            DELETE_RESULT=$(aliyun esa DeleteRoutineCodeVersion --region cn-hangzhou --Name $PAGES_NAME --CodeVersion $VERSION)
            STATUS=$(echo $DELETE_RESULT | jq -r '.Status')

            if [ "$STATUS" = "OK" ]; then
              echo "版本 $VERSION 删除成功"
              DELETED_COUNT=$((DELETED_COUNT + 1))
            else
              echo "版本 $VERSION 删除失败: $DELETE_RESULT"
              exit 1
            fi
          done

          echo "版本清理完成！成功删除 $DELETED_COUNT 个旧版本"

      # 验证清理结果
      - name: Verify Clean Result
        env:
          PAGES_NAME: ${{ steps.get-pages-name.outputs.pages_name }}
          RETAIN_VERSIONS: ${{ vars.RETAIN_VERSIONS || '1' }}
        run: |
          set -euo pipefail

          echo "验证清理结果..."
          RESULT_JSON=$(aliyun esa ListRoutineCodeVersions --region cn-hangzhou --Name $PAGES_NAME)
          REMAINING_COUNT=$(echo $RESULT_JSON | jq -r '.TotalCount')

          echo "清理后剩余版本数: $REMAINING_COUNT"

          if [ "$REMAINING_COUNT" -le "$RETAIN_VERSIONS" ]; then
            echo "版本清理成功，当前版本数: $REMAINING_COUNT (保留设置: $RETAIN_VERSIONS)"
            echo "ESA会自动检测main分支更新并开始部署"
          else
            echo "版本清理失败，仍有 $REMAINING_COUNT 个版本，期望保留: $RETAIN_VERSIONS"
            exit 1
          fi