|
2 | 2 |
|
3 | 3 | set -euo pipefail ${RUNNER_DEBUG:+-x}
|
4 | 4 |
|
| 5 | +# shellcheck source=../.github/scripts/logging.functions.sh |
| 6 | +. .github/scripts/logging.functions.sh |
| 7 | + |
5 | 8 | get_image()
|
6 | 9 | {
|
7 | 10 | local PUBLISHED=$1
|
@@ -167,3 +170,73 @@ wait_for_container_publish()
|
167 | 170 | fi
|
168 | 171 | done
|
169 | 172 | }
|
| 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 | +} |
0 commit comments