Skip to content

Commit 1316a66

Browse files
authored
Merge pull request #4 from eugene-davis/add-org-support
Add organization support
2 parents 137af1c + 6aadec8 commit 1316a66

File tree

2 files changed

+41
-22
lines changed

2 files changed

+41
-22
lines changed

action.yml

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,10 @@ inputs:
1111
github-token:
1212
description: 'GitHub Personal Access Token with package deletion permissions.'
1313
required: true
14+
github-org:
15+
description: 'If hosted in an organization, provide it here'
16+
default: ''
17+
required: true
1418
runs:
1519
using: "composite"
1620
steps:
@@ -21,5 +25,5 @@ runs:
2125
run: pip install requests
2226
shell: bash
2327
- name: Delete image from ghcr.io
24-
run: python ${{ github.action_path }}/docker-cleanup.py ${{ inputs.package-name }} ${{ inputs.tag }} ${{ inputs.github-token }}
28+
run: python ${{ github.action_path }}/docker-cleanup.py ${{ inputs.package-name }} ${{ inputs.tag }} ${{ inputs.github-token }} ${{ inputs.github-org }}
2529
shell: bash

docker-cleanup.py

Lines changed: 36 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -6,15 +6,21 @@
66
import 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

5465
import sys
5566

56-
if len(sys.argv) != 4:
57-
raise SystemExit(f"Usage: docker-cleanup.py <package_name> <tag> <github_token>\nArgs: {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)>\nArgs: {sys.argv}")
5869

5970
package_name = sys.argv[1]
6071
tag = sys.argv[2]
6172
token = sys.argv[3]
6273

74+
org = None
75+
if len(sys.argv) == 5:
76+
org = sys.argv[4]
77+
6378
print("package_name = ", package_name)
6479
print("tag = ", tag)
80+
print("org = ", org)
6581

6682
session = requests.Session()
6783
session.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

Comments
 (0)