Skip to content

Cleanup Old Releases #1

Cleanup Old Releases

Cleanup Old Releases #1

Workflow file for this run

name: Cleanup Old Releases
on:
workflow_dispatch:
inputs:
keep_days:
description: "保留最近多少天(默认 7)"
required: false
default: "7"
jobs:
cleanup_releases:
runs-on: ubuntu-latest
permissions:
contents: write # 必须有权限删除 release
steps:
- name: 安装 jq
run: |
sudo apt-get update
sudo apt-get install -y jq
- name: 删除指定天数前的 Release
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
KEEP_DAYS: ${{ github.event.inputs.keep_days }}
run: |
: "${KEEP_DAYS:=30}"
THRESHOLD="$(date -u -d "${KEEP_DAYS} days ago" '+%Y-%m-%dT%H:%M:%SZ')"
echo "阈值时间(UTC):$THRESHOLD"
RELEASE_IDS=$(gh api -X GET "repos/${GITHUB_REPOSITORY}/releases" \
--paginate -F per_page=100 \
--jq '.[] | select(.created_at < "'"$THRESHOLD"'") | .id')
if [ -z "$RELEASE_IDS" ]; then
echo "✅ 没有可删除的 Release"
exit 0
fi
echo "待删除 Release 数量:$(wc -w <<< "$RELEASE_IDS")"
for ID in $RELEASE_IDS; do
NAME=$(gh api -X GET "repos/${GITHUB_REPOSITORY}/releases/${ID}" --jq '.name')
echo "🗑 删除 Release: $NAME (ID: $ID)"
gh api -X DELETE "repos/${GITHUB_REPOSITORY}/releases/${ID}" || {
echo "⚠️ 删除失败:$ID(继续删除下一个)"
}
sleep 0.5
done
echo "🎉 Release 清理完成"