43 lines
No EOL
1.6 KiB
YAML
43 lines
No EOL
1.6 KiB
YAML
name: Ryd op i Forgejo Container Registry
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '0 0 * * 0' # Kører hver søndag ved midnat
|
|
workflow_dispatch: # Gør det muligt at køre den manuelt
|
|
|
|
jobs:
|
|
delete-old-images:
|
|
runs-on: almalinux-10
|
|
steps:
|
|
- name: Slet gamle versioner
|
|
run: |
|
|
REGISTRY="forge.pc-rytteren.dk"
|
|
OWNER="${{ github.repository_owner }}"
|
|
IMAGE="my-ostree-os"
|
|
MIN_KEEP=50
|
|
TOKEN="${{ secrets.PACKAGE_TOKEN }}"
|
|
|
|
# Hent alle pakker af typen container med dette navn, sorteret ældste først (via id)
|
|
# API returnerer en liste af package-objekter, hvert med "id" og "version"
|
|
RAW=$(curl -s -H "Authorization: token ${TOKEN}" \
|
|
"https://${REGISTRY}/api/v1/packages/${OWNER}?type=container&q=${IMAGE}&limit=200")
|
|
|
|
# Filtrer kun pakker med korrekt navn og udtræk id + created_at, sorter ældste først
|
|
IDS=$(echo "$RAW" | tr '{' '\n' | grep "\"name\":\"${IMAGE}\"" | \
|
|
sed 's/.*"id":\([0-9]*\).*/\1/' | sort -n)
|
|
|
|
TOTAL=$(echo "$IDS" | grep -c '[0-9]' || true)
|
|
echo "Fundet ${TOTAL} pakker totalt, beholder ${MIN_KEEP}"
|
|
|
|
if [ "$TOTAL" -le "$MIN_KEEP" ]; then
|
|
echo "Ingen pakker at slette"
|
|
exit 0
|
|
fi
|
|
|
|
# Slet de ældste (laveste id'er) ud over MIN_KEEP
|
|
TO_DELETE=$(echo "$IDS" | head -n $(( TOTAL - MIN_KEEP )))
|
|
for ID in $TO_DELETE; do
|
|
echo "Sletter pakke id: ${ID}"
|
|
curl -s -X DELETE -H "Authorization: token ${TOKEN}" \
|
|
"https://${REGISTRY}/api/v1/packages/${OWNER}/${ID}"
|
|
done |