feat: filter cleanup by package names
This commit is contained in:
@@ -7,6 +7,7 @@
|
||||
- 依序嘗試取得 Gitea API token。
|
||||
- 預設每個套件保留最新 `2` 個版本。
|
||||
- 直接刪除超出保留數量的舊版本。
|
||||
- 只處理你指定的 NuGet 套件名稱,可一次指定多個。
|
||||
- 輸出可搜尋的 log,包含 API status、request id 與 summary。
|
||||
|
||||
## Token 來源順序
|
||||
@@ -25,6 +26,7 @@ Action 會依序嘗試以下來源:
|
||||
| --- | --- | --- | --- |
|
||||
| `RUNNER_TOKEN` | string | - | Gitea API token,優先順序最高 |
|
||||
| `KEEP_COUNT` | integer string | `2` | 每個套件要保留的最新版本數,必須是整數且 `>= 0` |
|
||||
| `PACKAGE_NAMES` | string | - | 要清理的 NuGet 套件名稱,逗號分隔,可一次指定多個 |
|
||||
|
||||
## Log 行為
|
||||
|
||||
@@ -33,6 +35,7 @@ Action 會依序嘗試以下來源:
|
||||
- `Trying token from ...`
|
||||
- `Using token from ...`
|
||||
- `keep_count=...`
|
||||
- `package_names=...`
|
||||
- `GET /api/v1/... -> 200 OK`
|
||||
- `Candidate to delete: ...`
|
||||
- `Deleted package ... -> 204 No Content`
|
||||
@@ -49,6 +52,7 @@ jobs:
|
||||
with:
|
||||
RUNNER_TOKEN: ${{ secrets.GITEA_TOKEN }}
|
||||
KEEP_COUNT: 2
|
||||
PACKAGE_NAMES: package-a,package-b
|
||||
```
|
||||
|
||||
## 相關檔案
|
||||
|
||||
+4
-1
@@ -3,12 +3,15 @@ description: '清理 Nuget 沒用到的資源'
|
||||
author: 'Jeffery'
|
||||
inputs:
|
||||
RUNNER_TOKEN:
|
||||
description: 'GitHub Runner Token'
|
||||
description: 'Gitea API token, highest priority source'
|
||||
required: false
|
||||
KEEP_COUNT:
|
||||
description: '保留的版本數量'
|
||||
required: false
|
||||
default: '2'
|
||||
PACKAGE_NAMES:
|
||||
description: '要清理的 NuGet 套件名稱,逗號分隔,可一次指定多個'
|
||||
required: true
|
||||
runs:
|
||||
using: 'docker'
|
||||
image: 'Dockerfile'
|
||||
|
||||
+37
-1
@@ -10,6 +10,8 @@ fail() {
|
||||
exit 1
|
||||
}
|
||||
|
||||
declare -A TARGET_PACKAGES=()
|
||||
|
||||
resolve_token() {
|
||||
log "Trying token from RUNNER_TOKEN"
|
||||
|
||||
@@ -36,6 +38,30 @@ resolve_keep_versions() {
|
||||
printf '%s' "${raw_value}"
|
||||
}
|
||||
|
||||
resolve_package_names() {
|
||||
local raw_value="${INPUT_PACKAGE_NAMES:-}"
|
||||
local normalized package_name
|
||||
local -a package_name_list
|
||||
|
||||
if [[ -z "${raw_value}" ]]; then
|
||||
fail "Missing PACKAGE_NAMES"
|
||||
fi
|
||||
|
||||
normalized="${raw_value//$'\n'/,}"
|
||||
|
||||
IFS=',' read -r -a package_name_list <<< "${normalized}"
|
||||
for package_name in "${package_name_list[@]}"; do
|
||||
package_name="${package_name#"${package_name%%[![:space:]]*}"}"
|
||||
package_name="${package_name%"${package_name##*[![:space:]]}"}"
|
||||
[[ -n "${package_name}" ]] || continue
|
||||
TARGET_PACKAGES["${package_name}"]=1
|
||||
done
|
||||
|
||||
if (( ${#TARGET_PACKAGES[@]} == 0 )); then
|
||||
fail "Missing PACKAGE_NAMES"
|
||||
fi
|
||||
}
|
||||
|
||||
init_repo_context() {
|
||||
local repository="${GITEA_REPOSITORY:-}"
|
||||
|
||||
@@ -142,12 +168,17 @@ collect_package_candidates() {
|
||||
|
||||
while IFS= read -r group_json; do
|
||||
package_name="$(jq -r '.[0].name' <<<"${group_json}")"
|
||||
|
||||
if [[ -z "${TARGET_PACKAGES["$package_name"]+x}" ]]; then
|
||||
continue
|
||||
fi
|
||||
|
||||
total_versions="$(jq 'length' <<<"${group_json}")"
|
||||
|
||||
PACKAGE_COUNT=$((PACKAGE_COUNT + 1))
|
||||
TOTAL_VERSION_COUNT=$((TOTAL_VERSION_COUNT + total_versions))
|
||||
|
||||
log "Package ${package_name}: total_versions=${total_versions} keep_versions=${keep_versions}"
|
||||
log "Package ${package_name}: total_versions=${total_versions} keep_count=${keep_versions}"
|
||||
log "Package ${package_name} versions (oldest -> newest):"
|
||||
while IFS=$'\t' read -r version created_at; do
|
||||
[[ -z "${version}" ]] && continue
|
||||
@@ -219,6 +250,8 @@ main() {
|
||||
init_repo_context
|
||||
keep_versions="$(resolve_keep_versions)"
|
||||
log "keep_count=${keep_versions}"
|
||||
resolve_package_names
|
||||
log "package_names=${INPUT_PACKAGE_NAMES}"
|
||||
log "Token source resolved successfully"
|
||||
|
||||
CANDIDATES_FILE="$(mktemp)"
|
||||
@@ -230,6 +263,9 @@ main() {
|
||||
trap 'rm -f "${CANDIDATES_FILE}"' EXIT
|
||||
|
||||
collect_package_candidates
|
||||
if (( PACKAGE_COUNT == 0 )); then
|
||||
log "No matching packages found for requested package_names"
|
||||
fi
|
||||
process_candidates
|
||||
log "Stage 4 complete"
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user