Skip to content

Commit 8184ac8

Browse files
committed
delete untagged images
1 parent 9debb9b commit 8184ac8

2 files changed

Lines changed: 60 additions & 4 deletions

File tree

.github/scripts/delete_unused_images.sh

Lines changed: 58 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
DRY_RUN=false
44
DELETE_PR=false
55
DELETE_CI=false
6+
DELETE_UNTAGGED=false
67

78
while [[ $# -gt 0 ]]; do
89
case "$1" in
@@ -18,13 +19,17 @@ while [[ $# -gt 0 ]]; do
1819
DELETE_CI=true
1920
shift
2021
;;
22+
--delete-untagged)
23+
DELETE_UNTAGGED=true
24+
shift
25+
;;
2126
--help|-h)
22-
echo "Usage: $0 [--dry-run] [--delete-pr] [--delete-ci]"
27+
echo "Usage: $0 [--dry-run] [--delete-pr] [--delete-ci] [--delete-untagged]"
2328
exit 0
2429
;;
2530
*)
2631
echo "Unknown option: $1" >&2
27-
echo "Usage: $0 [--dry-run] [--delete-pr] [--delete-ci]" >&2
32+
echo "Usage: $0 [--dry-run] [--delete-pr] [--delete-ci] [--delete-untagged]" >&2
2833
exit 1
2934
;;
3035
esac
@@ -166,7 +171,37 @@ delete_ci_images() {
166171
done <<<"${tags}"
167172
}
168173

174+
delete_untagged_images() {
175+
local container_name=$1
176+
local package_name
177+
local versions_json
169178

179+
if [[ -z "${container_name}" ]]; then
180+
echo "Container name is required" >&2
181+
return 1
182+
fi
183+
184+
package_name=$(get_container_package_name "${container_name}")
185+
versions_json=$(get_container_versions_json "${container_name}")
186+
187+
jq -r '.[] | select(((.metadata.container.tags // []) | length) == 0) | .id' \
188+
<<<"${versions_json}" \
189+
| while IFS= read -r version_id; do
190+
if [[ -n "${version_id}" ]]; then
191+
if [[ "${DRY_RUN}" == "true" ]]; then
192+
echo "[DRY RUN] Would delete untagged image version ID ${version_id} from container ${container_name}."
193+
else
194+
echo "Deleting untagged image version ID ${version_id} from container ${container_name}..."
195+
gh api \
196+
-H "Accept: application/vnd.github+json" \
197+
-X DELETE \
198+
"/orgs/nhsdigital/packages/container/${package_name}/versions/${version_id}"
199+
fi
200+
fi
201+
done
202+
}
203+
204+
base_node_folders=$(find src/base_node -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | jq -R -s -c 'split("\n")[:-1]')
170205
language_folders=$(find src/languages -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | jq -R -s -c 'split("\n")[:-1]')
171206
project_folders=$(find src/projects -mindepth 1 -maxdepth 1 -type d -printf '%f\n' | jq -R -s -c 'split("\n")[:-1]')
172207

@@ -177,6 +212,21 @@ for container_name in $(jq -r '.[]' <<<"${project_folders}"); do
177212
if [[ "${DELETE_CI}" == "true" ]]; then
178213
delete_ci_images "${container_name}"
179214
fi
215+
if [[ "${DELETE_UNTAGGED}" == "true" ]]; then
216+
delete_untagged_images "${container_name}"
217+
fi
218+
done
219+
220+
for container_name in $(jq -r '.[]' <<<"${base_node_folders}"); do
221+
if [[ "${DELETE_PR}" == "true" ]]; then
222+
delete_pr_images "${container_name}"
223+
fi
224+
if [[ "${DELETE_CI}" == "true" ]]; then
225+
delete_ci_images "${container_name}"
226+
fi
227+
if [[ "${DELETE_UNTAGGED}" == "true" ]]; then
228+
delete_untagged_images "${container_name}"
229+
fi
180230
done
181231

182232
for container_name in $(jq -r '.[]' <<<"${language_folders}"); do
@@ -186,6 +236,9 @@ for container_name in $(jq -r '.[]' <<<"${language_folders}"); do
186236
if [[ "${DELETE_CI}" == "true" ]]; then
187237
delete_ci_images "${container_name}"
188238
fi
239+
if [[ "${DELETE_UNTAGGED}" == "true" ]]; then
240+
delete_untagged_images "${container_name}"
241+
fi
189242
done
190243

191244
if [[ "${DELETE_PR}" == "true" ]]; then
@@ -194,3 +247,6 @@ fi
194247
if [[ "${DELETE_CI}" == "true" ]]; then
195248
delete_ci_images "base"
196249
fi
250+
if [[ "${DELETE_UNTAGGED}" == "true" ]]; then
251+
delete_untagged_images "base"
252+
fi

.github/workflows/delete_old_images.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ name: "Delete old images"
44
on:
55
workflow_dispatch:
66
schedule:
7-
- cron: "0 1,13 * * *"
7+
- cron: "0 1 * * 6"
88
push:
99
branches: [main]
1010

@@ -30,7 +30,7 @@ jobs:
3030
if [[ "${{ github.event_name }}" == "workflow_dispatch" ]]; then
3131
.github/scripts/delete_unused_images.sh --delete-pr
3232
elif [[ "${{ github.event_name }}" == "schedule" ]]; then
33-
.github/scripts/delete_unused_images.sh --delete-ci
33+
.github/scripts/delete_unused_images.sh --delete-ci --delete-untagged
3434
else
3535
.github/scripts/delete_unused_images.sh
3636
fi

0 commit comments

Comments
 (0)