Skip to content

Commit 4e592a1

Browse files
authored
Delete unpublished RHEL images before publishing [DI-401][5.4.1] (#873)
Backport #868 Also merged .github/scripts/logging.functions.sh from master to avoid changing code Fixes: [DI-401](https://hazelcast.atlassian.net/browse/DI-401)
1 parent 4d58b84 commit 4e592a1

File tree

3 files changed

+104
-1
lines changed

3 files changed

+104
-1
lines changed

.github/scripts/logging.functions.sh

+22
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,22 @@
1+
#!/usr/bin/env bash
2+
3+
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions
4+
5+
# Prints the given message to stderr
6+
function echoerr() {
7+
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#setting-an-error-message
8+
echo "::error::ERROR - $*" 1>&2;
9+
}
10+
11+
# Create group
12+
function echo_group() {
13+
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#grouping-log-lines
14+
local TITLE=$1
15+
echo "::group::${TITLE}"
16+
}
17+
18+
# Ends group after calling echo_group()
19+
function echo_group_end() {
20+
# https://docs.github.com/en/actions/writing-workflows/choosing-what-your-workflow-does/workflow-commands-for-github-actions#grouping-log-lines
21+
echo "::endgroup::"
22+
}

.github/scripts/publish-rhel.sh

+73
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
set -euo pipefail ${RUNNER_DEBUG:+-x}
44

5+
# shellcheck source=../.github/scripts/logging.functions.sh
6+
. .github/scripts/logging.functions.sh
7+
58
get_image()
69
{
710
local PUBLISHED=$1
@@ -167,3 +170,73 @@ wait_for_container_publish()
167170
fi
168171
done
169172
}
173+
174+
# Marks unpublished images as deleted for given version and then verifies if they were truly deleted
175+
function delete_unpublished_images() {
176+
local RHEL_PROJECT_ID=$1
177+
local VERSION=$2
178+
local RHEL_API_KEY=$3
179+
180+
local IMAGE
181+
local IS_PUBLISHED
182+
183+
UNPUBLISHED_IMAGES=$(get_image not_published "${RHEL_PROJECT_ID}" "${VERSION}" "${RHEL_API_KEY}")
184+
UNPUBLISHED_COUNT=$(echo "${UNPUBLISHED_IMAGES}" | jq -r '.total')
185+
186+
echo "Found '${UNPUBLISHED_COUNT}' unpublished images for '${VERSION}'"
187+
188+
# mark images as deleted
189+
for ((idx = 0 ; idx < $((UNPUBLISHED_COUNT)) ; idx++));
190+
do
191+
local IMAGE_ID=$(echo "${UNPUBLISHED_IMAGES}" | jq -r .data[${idx}]._id)
192+
delete_image "${RHEL_API_KEY}" "${IMAGE_ID}"
193+
done
194+
195+
# verify we have actually deleted the images
196+
if [[ ${UNPUBLISHED_COUNT} -gt 0 ]]; then
197+
verify_no_unpublished_images "${RHEL_PROJECT_ID}" "{$VERSION}" "${RHEL_API_KEY}"
198+
fi
199+
}
200+
201+
# this will actually send request to delete a single unpublished image
202+
function delete_image() {
203+
local RHEL_API_KEY=$1
204+
local IMAGE_ID=$2
205+
206+
echo "Marking image with ID=${IMAGE_ID} as deleted"
207+
208+
# https://catalog.redhat.com/api/containers/docs/endpoints/RESTPatchImage.html
209+
RESPONSE=$( \
210+
curl --silent \
211+
--retry 5 --retry-all-errors \
212+
--request PATCH \
213+
--header "accept: application/json" \
214+
--header "Content-Type: application/json" \
215+
--header "X-API-KEY: ${RHEL_API_KEY}" \
216+
--data '{"deleted": true}' \
217+
"https://catalog.redhat.com/api/containers/v1/images/id/${IMAGE_ID}")
218+
219+
echo "::debug::HTTP response after image deletion"
220+
echo "::debug::${RESPONSE}"
221+
}
222+
223+
# verifies there are no unblished images for given version
224+
function verify_no_unpublished_images() {
225+
local RHEL_PROJECT_ID=$1
226+
local VERSION=$2
227+
local RHEL_API_KEY=$3
228+
229+
UNPUBLISHED_IMAGES=$(get_image not_published "${RHEL_PROJECT_ID}" "${VERSION}" "${RHEL_API_KEY}")
230+
UNPUBLISHED_COUNT=$(echo "${UNPUBLISHED_IMAGES}" | jq -r '.total')
231+
232+
if [[ ${UNPUBLISHED_COUNT} == "0" ]]; then
233+
echo "No unpublished images found for '${VERSION}' after cleanup"
234+
return 0
235+
else
236+
echoerr "Exiting as found '${UNPUBLISHED_COUNT}' unpublished images for '${VERSION}'"
237+
echo_group "Unpublished images"
238+
echoerr "${UNPUBLISHED_IMAGES}"
239+
echo_group_end
240+
return 1
241+
fi
242+
}

.github/workflows/tag_image_push_rhel.yml

+9-1
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@ jobs:
2626
env:
2727
REQUIRED_HZ_MAJOR_VERSION: 5
2828
SCAN_REGISTRY: "quay.io"
29-
TIMEOUT_IN_MINS: 60
29+
TIMEOUT_IN_MINS: 240
3030
HZ_ENTERPRISE_LICENSE: ${{ secrets.HZ_ENTERPRISE_LICENSE }}
3131
OCP_LOGIN_USERNAME: ${{ secrets.OCP_LOGIN_USERNAME }}
3232
OCP_LOGIN_PASSWORD: ${{ secrets.OCP_LOGIN_PASSWORD }}
@@ -124,6 +124,14 @@ jobs:
124124
run: |
125125
docker login ${SCAN_REGISTRY} -u ${SCAN_REGISTRY_USER} -p ${SCAN_REGISTRY_PASSWORD}
126126
127+
- name: Delete unpublished images
128+
if: inputs.DRY_RUN != 'true'
129+
run: |
130+
VERSION=${RELEASE_VERSION}-jdk${{ matrix.jdk }}
131+
source .github/scripts/publish-rhel.sh
132+
133+
delete_unpublished_images "${RHEL_PROJECT_ID}" "${VERSION}" "${RHEL_API_KEY}"
134+
127135
- name: Build the Hazelcast Enterprise image
128136
run: |
129137
. .github/scripts/get-tags-to-push.sh

0 commit comments

Comments
 (0)