Files
blog/.github/workflows/del-esa-code.yml
meowrain 7b7e32ddd4
Some checks failed
Clean ESA Versions on Main / clean-esa-versions (push) Has been cancelled
init
2026-01-02 00:03:49 +08:00

113 lines
4.2 KiB
YAML
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
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