Files
cleanup-release-action/readme.md
Jeffery 177416c85d
All checks were successful
/ CD > 發布專案 (push) Successful in 3s
first commit
2025-09-18 14:28:37 +08:00

119 lines
3.5 KiB
Markdown
Raw Permalink 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.

# Cleanup Old Releases Action
這是一個自動清理舊版本 releases 的 GitHub Action可以保留指定數量的最新版本刪除多餘的舊版本。
## 功能特色
- 🗑️ 自動清理舊版本 releases
- 🔢 可配置保留的版本數量
- 🔍 支援模擬執行模式
- 📊 詳細的執行報告
- 🛡️ 安全的錯誤處理
## 輸入參數
| 參數名稱 | 必要 | 預設值 | 描述 |
|---------|------|--------|------|
| `gitea-server` | ✅ | - | Gitea 伺服器 URL |
| `repository` | ✅ | - | 儲存庫名稱 (格式: owner/repo) |
| `token` | ✅ | - | Gitea API Token |
| `keep-count` | ❌ | `2` | 保留的最新版本數量 |
| `dry-run` | ❌ | `false` | 是否為模擬執行 (只顯示會刪除的版本,不實際刪除) |
## 輸出參數
| 參數名稱 | 描述 |
|---------|------|
| `deleted-count` | 已刪除的版本數量 |
| `deleted-releases` | 已刪除的版本列表 (JSON 格式) |
## 使用範例
### 基本用法 (保留最新2個版本)
```yaml
- name: 清理舊版本
uses: ./.gitea/actions/cleanup-releases
with:
gitea-server: ${{ gitea.server_url }}
repository: ${{ gitea.repository }}
token: ${{ secrets.GITEA_TOKEN }}
```
### 自定義保留數量
```yaml
- name: 清理舊版本 (保留最新5個)
uses: ./.gitea/actions/cleanup-releases
with:
gitea-server: ${{ gitea.server_url }}
repository: ${{ gitea.repository }}
token: ${{ secrets.GITEA_TOKEN }}
keep-count: '5'
```
### 模擬執行模式
```yaml
- name: 檢查要清理的版本
id: check-cleanup
uses: ./.gitea/actions/cleanup-releases
with:
gitea-server: ${{ gitea.server_url }}
repository: ${{ gitea.repository }}
token: ${{ secrets.GITEA_TOKEN }}
keep-count: '3'
dry-run: 'true'
- name: 顯示模擬結果
run: |
echo "模擬執行會刪除 ${{ steps.check-cleanup.outputs.deleted-count }} 個版本"
```
### 使用輸出結果
```yaml
- name: 清理舊版本
id: cleanup
uses: ./.gitea/actions/cleanup-releases
with:
gitea-server: ${{ gitea.server_url }}
repository: ${{ gitea.repository }}
token: ${{ secrets.GITEA_TOKEN }}
keep-count: '2'
- name: 報告清理結果
run: |
echo "清理完成,刪除了 ${{ steps.cleanup.outputs.deleted-count }} 個舊版本"
echo "刪除的版本詳情: ${{ steps.cleanup.outputs.deleted-releases }}"
```
## 運作邏輯
1. **獲取版本列表**:從 Gitea API 獲取所有 releases按創建時間排序
2. **計算刪除範圍**:保留最新的 `keep-count` 個版本,標記其餘版本為待刪除
3. **執行清理**
- 模擬模式:只顯示會刪除的版本,不實際執行
- 正常模式:逐一刪除標記的版本
4. **回報結果**:提供刪除數量和詳細列表
## 安全特性
-**防護機制**:如果總版本數 ≤ 保留數量,則不執行任何刪除
-**錯誤處理**API 請求失敗時會顯示錯誤訊息並停止執行
-**模擬模式**:可以先模擬執行,確認要刪除的版本無誤
-**詳細日誌**:每個步驟都有清楚的日誌輸出
## 注意事項
- 需要有 `GITEA_TOKEN` secret 且具備刪除 releases 的權限
- 刪除操作是不可逆的,建議先使用模擬模式確認
- Action 按照創建時間排序,保留最新的版本
- 建議在 release 創建之後執行此 action
## 錯誤處理
- 如果無法連接到 Gitea APIaction 會失敗並顯示錯誤訊息
- 如果某個版本刪除失敗,會記錄錯誤但繼續處理其他版本
- 如果 token 權限不足,會顯示相應的 HTTP 錯誤狀態