Skip to content

Instantly share code, notes, and snippets.

@taikedz
Last active October 12, 2023 11:29
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save taikedz/521257bb88a1264156081f953165f771 to your computer and use it in GitHub Desktop.
Save taikedz/521257bb88a1264156081f953165f771 to your computer and use it in GitHub Desktop.
Delete a remote OCI image (if supported) (docker/podman registry)
#!/usr/bin/env bash
if [[ -z "$*" ]]; then
echo -e "Usage:\n\t$(basename "$0") \$SERVER/\$IMAGE:\$TAG [delete]"
echo "Omit the 'delete' argument to query the manifest for the image"
echo "Use 'delete' to actually perform deletion"
exit 0
fi
REGISTRY_SERVER="$(echo "$1" | cut -d/ -f1)"
REGISTRY_IMAGE="$(echo "$1" | sed "s|$REGISTRY_SERVER/||")"
IMAGE_NAME="$(echo "$REGISTRY_IMAGE" | cut -d: -f1)"
IMAGE_TAG="$(echo "$REGISTRY_IMAGE" | cut -d: -f2)"
BASE_URI="http://$REGISTRY_SERVER/v2"
ACCEPT_MANIFEST_HEADER='Accept: application/vnd.oci.image.manifest.v1+json'
QUERY_URI="$BASE_URI/$IMAGE_NAME/manifests/$IMAGE_TAG"
OCI_MANIFEST="$(set -x; curl -s -H "$ACCEPT_MANIFEST_HEADER" "$QUERY_URI")"
OCI_DIGEST="$(echo "$OCI_MANIFEST" | jq -r .config.digest | cut -d: -f2)"
MANIFEST_URI="$BASE_URI/$IMAGE_NAME/manifests/$OCI_DIGEST"
if [[ "$2" = delete ]]; then
(set -x; curl -s -H "$ACCEPT_MANIFEST_HEADER" -X DELETE "$MANIFEST_URI")
else
echo "$OCI_MANIFEST" | jq .
fi
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment