56 lines
1.8 KiB
Python
Executable File
56 lines
1.8 KiB
Python
Executable File
#!/usr/bin/python3
|
|
from datetime import datetime, timezone
|
|
import requests
|
|
import sys
|
|
|
|
|
|
ORG = 'INTI-CMNB'
|
|
PKGS = {'kicad_auto', 'kicad5_auto', 'kicad6_auto', 'kicad7_auto'}
|
|
PKG = 'kicad5_auto'
|
|
HEADER = {'Accept': 'application/vnd.github+json',
|
|
'Authorization': 'Bearer '+sys.argv[1],
|
|
'X-GitHub-Api-Version': '2022-11-28'}
|
|
|
|
|
|
def erase(name):
|
|
url = f'https://api.github.com/orgs/{ORG}/packages/container/{PKG}/versions/{name}'
|
|
r = requests.delete(url, timeout=20, allow_redirects=True, headers=HEADER)
|
|
assert r.status_code == 204, r.status_code
|
|
|
|
|
|
deleted = 0
|
|
for PKG in PKGS:
|
|
url = f'https://api.github.com/orgs/{ORG}/packages/container/{PKG}/versions'
|
|
page = 1
|
|
received = 100
|
|
vers = []
|
|
while received == 100:
|
|
r = requests.get(url, timeout=20, allow_redirects=True, headers=HEADER, params={'per_page': 100, 'page': page})
|
|
assert r.status_code == 200
|
|
page = page+1
|
|
res = r.json()
|
|
vers.extend(res)
|
|
received = len(res)
|
|
|
|
now = datetime.now(timezone.utc)
|
|
for v in vers:
|
|
# How old is this version?
|
|
date_str = v["updated_at"]
|
|
parsed_date = datetime.fromisoformat(date_str.replace('Z', '+00:00'))
|
|
days_ago = (now - parsed_date).days
|
|
# Leave anything with 15 or less days
|
|
if days_ago < 15:
|
|
continue
|
|
# Analyze the tags
|
|
tags = v["metadata"]["container"]["tags"]
|
|
if len(tags) == 0:
|
|
print(f"Deleting {v['html_url']} UNTAGGED {days_ago} days ago")
|
|
erase(v["id"])
|
|
deleted += 1
|
|
elif len(tags) == 1 and tags[0].startswith('dev_'):
|
|
# Is dev_* and isn't tagged as the last dev
|
|
print(f"Deleting {v['html_url']} {tags[0]} {days_ago} days ago")
|
|
erase(v["id"])
|
|
deleted += 1
|
|
print(f"Deleted {deleted} versions")
|