blob: aac6254e3b68db333dc351234f2972e909093b5f [file]
#!/usr/bin/env bash
#
# Delete ALL CodeQL Actions caches.
#
# CodeQL's default setup creates a new cache per commit and never reaps old
# ones. We reclaim the entire CodeQL slice of the 10 GiB per-repo budget.
# CodeQL continues to work without a cache — it just re-fetches on each run.
#
# Requires GH_TOKEN with `actions: write`. Default is dry-run; pass --delete
# to actually remove caches.
set -euo pipefail
DELETE=0
if [[ "${1:-}" == "--delete" ]]; then
DELETE=1
fi
mapfile -t rows < <(
gh cache list --key "codeql" --limit 1000 \
--json id,key,createdAt \
--jq '.[] | [.id, .key, .createdAt] | @tsv'
)
echo "CodeQL caches found: ${#rows[@]}"
deleted=0
for row in "${rows[@]}"; do
IFS=$'\t' read -r id key created <<<"$row"
if (( DELETE )); then
if out=$(gh cache delete "$id" 2>&1); then
echo "deleted id=$id key=$key"
elif printf '%s' "$out" | grep -qi 'not found\|HTTP 404'; then
echo "already gone id=$id key=$key"
else
echo "::warning::failed to delete id=$id: $out"
continue
fi
else
echo "would delete id=$id key=$key ($created)"
fi
deleted=$((deleted + 1))
done
echo
echo "Total $( (( DELETE )) && echo removed || echo to remove ): $deleted"
(( DELETE )) || echo "(dry run — re-run with --delete to apply)"