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