Merge pull request #122 from imysen/patch-2 #13
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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 |