Skip to content

Snapshot Cleanup

Snapshot Cleanup #12

name: Snapshot Cleanup
on:
schedule:
- cron: '12 5 * * 6'
workflow_dispatch:
jobs:
cleanup:
runs-on: ubuntu-latest
permissions:
packages: write
contents: read
timeout-minutes: 15
steps:
- name: Cleanup
env:
ORG: ${{ github.repository_owner }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
run: |
echo "Organization is $ORG"
PACKAGES_VISIBILITY=public
PACKAGES_PER_PAGE=100
VERSIONS_PER_PAGE=100
MAX_SNAPSHOT_AGE=`date +%Y-%m-%d'T'%H:%M:%S'Z' -d "7 days ago"`
packages_page=1
while true; do
packages_response=$(curl -sL \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/orgs/$ORG/packages?package_type=maven&visibility=$PACKAGES_VISIBILITY&per_page=$PACKAGES_PER_PAGE&page=$packages_page")
readarray -t names < <(jq -r '.[].name' <<< "$packages_response")
# If no packages
(( ! ${#names[@]} )) && break
for name in "${names[@]}"; do
echo "Checking $name"
sleep 1 # Throttle
versions_page=1
while true; do
versions_response=$(curl -sL \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
"https://api.github.com/orgs/$ORG/packages/maven/$name/versions?per_page=$VERSIONS_PER_PAGE&page=$versions_page")
readarray -t versions < <(jq -r '.[].name' <<< "$versions_response")
# If no versions
(( ! ${#versions[@]} )) && break
for version in "${versions[@]}"; do
echo "$version"
done
readarray -t snapshot_ids < <(jq -r --arg date "$MAX_SNAPSHOT_AGE" \
'.[] | select (.updated_at < $date) | select(.name | endswith("-SNAPSHOT")) | .id ' \
<<< "$versions_response")
for snapshot_id in "${snapshot_ids[@]}"; do
echo "Deleting $snapshot_id"
curl -L \
-X DELETE \
-H "Accept: application/vnd.github+json" \
-H "Authorization: Bearer $GITHUB_TOKEN" \
-H "X-GitHub-Api-Version: 2022-11-28" \
https://api.github.com/orgs/$ORG/packages/maven/$name/versions/$snapshot_id
done
versions_page=$((versions_page+1))
done
done
packages_page=$((packages_page+1))
done