Cleanup Old Releases #1
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: 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 清理完成" |