feat: filter cleanup by package names

This commit is contained in:
2026-05-15 02:33:20 +00:00
parent 5336737073
commit 3305b57ac0
3 changed files with 45 additions and 2 deletions
+37 -1
View File
@@ -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"
}