66import requests
77
88
9- def get_package_versions (package_name , package_type ):
10- print ("get_package_versions" , package_name , package_type )
11- # https://docs.github.com/en/rest/reference/packages#get-all-package-versions-for-a-package-owned-by-the-authenticated-user
9+ def get_package_versions (package_name , package_type , org ):
10+ print ("get_package_versions" , package_name , package_type , org )
1211 result = []
1312 done = False
1413 page = 1
1514
15+ if org :
16+ # https://docs.github.com/en/rest/packages#list-packages-for-an-organization=
17+ package_url = f"https://api.github.com/orgs/{ org } /packages/{ package_type } /{ package_name } /versions"
18+ else :
19+ # https://docs.github.com/en/rest/reference/packages#get-all-package-versions-for-a-package-owned-by-the-authenticated-user
20+ package_url = f"https://api.github.com/user/packages/{ package_type } /{ package_name } /versions"
21+
1622 while not done :
17- response = session .get (f"https://api.github.com/user/packages/ { package_type } / { package_name } /versions" , params = {"per_page" : 100 , "page" : page })
23+ response = session .get (package_url , params = {"per_page" : 100 , "page" : page })
1824 response .raise_for_status ()
1925 json = response .json ()
2026 result .extend (json )
@@ -24,46 +30,55 @@ def get_package_versions(package_name, package_type):
2430 return result
2531
2632
27- def delete_package_version (package_name , package_type , id ):
28- print ("delete_package_version" , package_name , package_type , id )
29-
30- # https://docs.github.com/en/rest/reference/packages#delete-a-package-version-for-the-authenticated-user
31- response = session .delete (f"https://api.github.com/user/packages/{ package_type } /{ package_name } /versions/{ id } " )
33+ def delete_package_version (package_name , package_type , id , org ):
34+ print ("delete_package_version" , package_name , package_type , id , org )
35+
36+ if org :
37+ # https://docs.github.com/en/rest/packages#delete-package-version-for-an-organization=
38+ delete_url = f"https://api.github.com/orgs/{ org } /packages/{ package_type } /{ package_name } /versions/{ id } "
39+ else :
40+ # https://docs.github.com/en/rest/reference/packages#delete-a-package-version-for-the-authenticated-user
41+ delete_url = f"https://api.github.com/user/packages/{ package_type } /{ package_name } /versions/{ id } "
42+ response = session .delete (delete_url )
3243 response .raise_for_status ()
3344
3445
35- def get_tagged_container (package_name , tag ):
36- print ("get_tagged_container" , package_name , tag )
37- packages = get_package_versions (package_name , "container" )
46+ def get_tagged_container (package_name , tag , org ):
47+ print ("get_tagged_container" , package_name , tag , org )
48+ packages = get_package_versions (package_name , "container" , org )
3849 return [version for version in packages if tag in version ["metadata" ]["container" ]["tags" ]]
3950
4051
41- def delete_tagged_container (package_name , tag ):
42- print ("delete_tagged_container" , package_name , tag )
43- tags = get_tagged_container (package_name , tag )
52+ def delete_tagged_container (package_name , tag , org ):
53+ print ("delete_tagged_container" , package_name , tag , org )
54+ tags = get_tagged_container (package_name , tag , org )
4455
4556 if tags :
4657 for tag in tags :
47- delete_package_version (package_name , "container" , tag ["id" ])
58+ delete_package_version (package_name , "container" , tag ["id" ], org )
4859 else :
49- raise Exception (f"No containers to delete: { package_name } { tag } " )
60+ raise Exception (f"No containers to delete: { package_name } { tag } " )
5061
5162
5263################################
5364
5465import sys
5566
56- if len (sys .argv ) != 4 :
57- raise SystemExit (f"Usage: docker-cleanup.py <package_name> <tag> <github_token>\n Args: { sys .argv } " )
67+ if len (sys .argv ) < 4 or len ( sys . argv ) > 5 :
68+ raise SystemExit (f"Usage: docker-cleanup.py <package_name> <tag> <github_token> <github-org (optional)> \n Args: { sys .argv } " )
5869
5970package_name = sys .argv [1 ]
6071tag = sys .argv [2 ]
6172token = sys .argv [3 ]
6273
74+ org = None
75+ if len (sys .argv ) == 5 :
76+ org = sys .argv [4 ]
77+
6378print ("package_name = " , package_name )
6479print ("tag = " , tag )
80+ print ("org = " , org )
6581
6682session = requests .Session ()
6783session .headers .update ({"Authorization" : f"token { token } " , "Accept" : "application/vnd.github.v3+json" })
68- delete_tagged_container (package_name , tag )
69-
84+ delete_tagged_container (package_name , tag , org )
0 commit comments