feat: add dry run delete flow
This commit is contained in:
@@ -9,6 +9,10 @@ inputs:
|
|||||||
description: 'Number of recent package versions to keep'
|
description: 'Number of recent package versions to keep'
|
||||||
required: false
|
required: false
|
||||||
default: '2'
|
default: '2'
|
||||||
|
dry_run:
|
||||||
|
description: 'When true, only print delete candidates'
|
||||||
|
required: false
|
||||||
|
default: 'true'
|
||||||
runs:
|
runs:
|
||||||
using: 'docker'
|
using: 'docker'
|
||||||
image: 'Dockerfile'
|
image: 'Dockerfile'
|
||||||
|
|||||||
+54
-2
@@ -47,6 +47,22 @@ resolve_keep_versions() {
|
|||||||
printf '%s' "${raw_value}"
|
printf '%s' "${raw_value}"
|
||||||
}
|
}
|
||||||
|
|
||||||
|
resolve_dry_run() {
|
||||||
|
local raw_value="${INPUT_DRY_RUN:-true}"
|
||||||
|
|
||||||
|
case "${raw_value,,}" in
|
||||||
|
true|1|yes|on)
|
||||||
|
printf 'true'
|
||||||
|
;;
|
||||||
|
false|0|no|off)
|
||||||
|
printf 'false'
|
||||||
|
;;
|
||||||
|
*)
|
||||||
|
fail "Invalid dry_run: ${raw_value}"
|
||||||
|
;;
|
||||||
|
esac
|
||||||
|
}
|
||||||
|
|
||||||
init_repo_context() {
|
init_repo_context() {
|
||||||
local repository="${GITEA_REPOSITORY:-}"
|
local repository="${GITEA_REPOSITORY:-}"
|
||||||
|
|
||||||
@@ -171,8 +187,41 @@ collect_package_candidates() {
|
|||||||
done < <(jq -c 'group_by(.name)[]' <<<"${packages_json}")
|
done < <(jq -c 'group_by(.name)[]' <<<"${packages_json}")
|
||||||
}
|
}
|
||||||
|
|
||||||
|
process_candidates() {
|
||||||
|
local dry_run="$1"
|
||||||
|
local name version created_at
|
||||||
|
local deleted_count=0
|
||||||
|
local skipped_count=0
|
||||||
|
local error_count=0
|
||||||
|
|
||||||
|
if [[ ! -s "${CANDIDATES_FILE}" ]]; then
|
||||||
|
log "No delete candidates found"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
|
||||||
|
while IFS=$'\t' read -r name version created_at; do
|
||||||
|
[[ -z "${name}" ]] && continue
|
||||||
|
|
||||||
|
if [[ "${dry_run}" == "true" ]]; then
|
||||||
|
log "[DRY-RUN] Would delete package ${name} version ${version} (created: ${created_at})"
|
||||||
|
skipped_count=$((skipped_count + 1))
|
||||||
|
continue
|
||||||
|
fi
|
||||||
|
|
||||||
|
if api_request DELETE "/api/v1/packages/${REPO_OWNER}/nuget/${name}/${version}"; then
|
||||||
|
log "Deleted package ${name} version ${version} -> ${API_HTTP_CODE}"
|
||||||
|
deleted_count=$((deleted_count + 1))
|
||||||
|
else
|
||||||
|
log "ERROR: DELETE package ${name} version ${version} -> ${API_HTTP_CODE}"
|
||||||
|
error_count=$((error_count + 1))
|
||||||
|
fi
|
||||||
|
done < "${CANDIDATES_FILE}"
|
||||||
|
|
||||||
|
log "Summary: deleted=${deleted_count} kept=${keep_versions} candidates=$(wc -l < "${CANDIDATES_FILE}") skipped=${skipped_count} errors=${error_count} dry_run=${dry_run}"
|
||||||
|
}
|
||||||
|
|
||||||
main() {
|
main() {
|
||||||
local token keep_versions
|
local token keep_versions dry_run
|
||||||
|
|
||||||
log "Gitea Server Url: ${GITEA_SERVER_URL:-}"
|
log "Gitea Server Url: ${GITEA_SERVER_URL:-}"
|
||||||
log "Gitea Repository: ${GITEA_REPOSITORY:-}"
|
log "Gitea Repository: ${GITEA_REPOSITORY:-}"
|
||||||
@@ -184,7 +233,9 @@ main() {
|
|||||||
export RESOLVED_GITEA_TOKEN="$token"
|
export RESOLVED_GITEA_TOKEN="$token"
|
||||||
init_repo_context
|
init_repo_context
|
||||||
keep_versions="$(resolve_keep_versions)"
|
keep_versions="$(resolve_keep_versions)"
|
||||||
|
dry_run="$(resolve_dry_run)"
|
||||||
log "keep_versions=${keep_versions}"
|
log "keep_versions=${keep_versions}"
|
||||||
|
log "dry_run=${dry_run}"
|
||||||
log "Token source resolved successfully"
|
log "Token source resolved successfully"
|
||||||
|
|
||||||
CANDIDATES_FILE="$(mktemp)"
|
CANDIDATES_FILE="$(mktemp)"
|
||||||
@@ -192,7 +243,8 @@ main() {
|
|||||||
trap 'rm -f "${CANDIDATES_FILE}"' EXIT
|
trap 'rm -f "${CANDIDATES_FILE}"' EXIT
|
||||||
|
|
||||||
collect_package_candidates
|
collect_package_candidates
|
||||||
log "Stage 3 complete"
|
process_candidates "${dry_run}"
|
||||||
|
log "Stage 4 complete"
|
||||||
}
|
}
|
||||||
|
|
||||||
main "$@"
|
main "$@"
|
||||||
|
|||||||
Reference in New Issue
Block a user