Skip to content

Commit 5ccfd8e

Browse files
committed
packages cleanup
1 parent 75ae554 commit 5ccfd8e

File tree

1 file changed

+82
-0
lines changed

1 file changed

+82
-0
lines changed

.github/workflows/cleanup.yml

Lines changed: 82 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,82 @@
1+
name: Cleanup GHCR package demos/demos
2+
3+
on:
4+
workflow_dispatch:
5+
inputs:
6+
dry_run:
7+
description: "If true, only prints what would be deleted"
8+
required: true
9+
default: "true"
10+
11+
permissions:
12+
contents: read
13+
packages: write
14+
15+
jobs:
16+
cleanup:
17+
runs-on: ubuntu-latest
18+
steps:
19+
- name: Delete all versions of demos/demos
20+
uses: actions/github-script@v7
21+
with:
22+
script: |
23+
const owner = context.repo.owner;
24+
const package_name = 'demos/demos';
25+
const dryRun = (core.getInput('dry_run') || 'true').toLowerCase() === 'true';
26+
27+
const ownerInfo = await github.rest.users.getByUsername({ username: owner });
28+
const isOrg = ownerInfo.data.type === 'Organization';
29+
30+
core.info(`Owner: ${owner} (${isOrg ? 'org' : 'user'})`);
31+
core.info(`Target package: ${package_name}`);
32+
core.info(`Dry run: ${dryRun}`);
33+
34+
const listFn = isOrg
35+
? github.rest.packages.getAllPackageVersionsForContainerOwnedByOrganization
36+
: github.rest.packages.getAllPackageVersionsForContainerOwnedByUser;
37+
38+
const listArgs = isOrg
39+
? { org: owner, package_name, per_page: 100 }
40+
: { username: owner, package_name, per_page: 100 };
41+
42+
const versions = await github.paginate(listFn, listArgs);
43+
44+
if (!versions.length) {
45+
core.info('No versions found. Nothing to delete.');
46+
return;
47+
}
48+
49+
for (const v of versions) {
50+
const tags = v.metadata?.container?.tags?.join(', ') || '';
51+
core.info(`FOUND id=${v.id} tags=[${tags}]`);
52+
}
53+
54+
if (dryRun) {
55+
core.warning('Dry run enabled — nothing deleted.');
56+
return;
57+
}
58+
59+
const deleteFn = isOrg
60+
? github.rest.packages.deletePackageVersionForOrg
61+
: github.rest.packages.deletePackageVersionForUser;
62+
63+
for (const v of versions) {
64+
core.info(`Deleting version id=${v.id}`);
65+
if (isOrg) {
66+
await deleteFn({
67+
org: owner,
68+
package_type: 'container',
69+
package_name,
70+
package_version_id: v.id
71+
});
72+
} else {
73+
await deleteFn({
74+
username: owner,
75+
package_type: 'container',
76+
package_name,
77+
package_version_id: v.id
78+
});
79+
}
80+
}
81+
82+
core.info('Cleanup complete.');

0 commit comments

Comments
 (0)