feat: purge scripts for CI/CD artifacts

This commit is contained in:
Eric Gullickson
2026-01-04 20:05:17 -06:00
parent 453083b7db
commit 4e43f63f4b
2 changed files with 282 additions and 0 deletions

91
scripts/ci/purge-action-runs.sh Executable file
View File

@@ -0,0 +1,91 @@
#!/usr/bin/env bash
set -euo pipefail
# Defaults (override via CLI flags)
GITEA_BASE_URL="https://git.motovaultpro.com"
TOKEN=""
OWNER="egullickson"
REPO="motovaultpro"
PER_PAGE=50
usage() {
cat <<EOF
Usage:
$0 --token=YOUR_TOKEN [--base-url=https://git.motovaultpro.com] [--owner=egullickson] [--repo=motovaultpro] [--per-page=50]
Examples:
# Delete all Actions runs in egullickson/motovaultpro
$0 --token=XXXX
# Different repo
$0 --token=XXXX --owner=someone --repo=otherrepo
# Different server + page size
$0 --token=XXXX --base-url=https://git.example.com --per-page=100
EOF
}
# --- CLI parsing ---
for arg in "$@"; do
case "$arg" in
--token=*) TOKEN="${arg#*=}" ;;
--base-url=*) GITEA_BASE_URL="${arg#*=}" ;;
--owner=*) OWNER="${arg#*=}" ;;
--repo=*) REPO="${arg#*=}" ;;
--per-page=*) PER_PAGE="${arg#*=}" ;;
-h|--help) usage; exit 0 ;;
*)
echo "ERROR: Unknown argument: $arg"
usage
exit 1
;;
esac
done
if [[ -z "$TOKEN" ]]; then
echo "ERROR: --token= is required"
usage
exit 1
fi
# Basic validation
if ! [[ "$PER_PAGE" =~ ^[0-9]+$ ]]; then
echo "ERROR: --per-page must be a number"
exit 1
fi
api() {
curl -fsS \
-H "Authorization: token ${TOKEN}" \
-H "Accept: application/json" \
"$@"
}
page=1
deleted=0
while :; do
echo "Fetching page ${page}..."
json="$(api "${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${REPO}/actions/runs?limit=${PER_PAGE}&page=${page}")"
# Try both common shapes:
# - {"workflow_runs":[...]}
# - {"runs":[...]}
ids="$(echo "$json" | jq -r '(.workflow_runs // .runs // []) | .[].id')"
if [[ -z "${ids}" ]]; then
echo "No more runs found."
break
fi
while read -r id; do
[[ -z "$id" ]] && continue
echo "Deleting run id=${id}"
api -X DELETE "${GITEA_BASE_URL}/api/v1/repos/${OWNER}/${REPO}/actions/runs/${id}" >/dev/null
deleted=$((deleted + 1))
done <<< "${ids}"
page=$((page + 1))
done
echo "Done. Deleted ${deleted} runs."