Skip to content
Merged
65 changes: 56 additions & 9 deletions .github/workflows/clean-main-images.yml
Original file line number Diff line number Diff line change
Expand Up @@ -6,22 +6,69 @@ on:
workflow_dispatch:

env:
REGISTRY: ghcr.io/openmcp-project
REGISTRY: ghcr.io
ORG: openmcp-project
IMAGE_NAME: mcp-ui-frontend
KEEP_X_IMAGES: 5
TAG_PREFIX: 'main-'

jobs:
clean:
name: 'Clean main images'
runs-on: ubuntu-latest
permissions:
packages: write
env:
GH_TOKEN: ${{ secrets.GITHUB_TOKEN }}
steps:
- name: Delete old main branch images
uses: actions/delete-package-versions@e5bc658cc4c965c472efe991f8beea3981499c55 # v5
with:
package-name: ${{ env.IMAGE_NAME }}
package-type: 'container'
min-versions-to-keep: ${{ env.KEEP_X_IMAGES }}
# Ignore any version that does NOT start with 'main-'
ignore-versions: '^(?!main-).*$'
- name: List all ${{ env.TAG_PREFIX }} tags and their version IDs (debug)
run: |
gh api -H "Accept: application/vnd.github+json" \
/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}/versions \
--paginate | jq -r '.[] | select(.metadata.container.tags[] | startswith("${{ env.TAG_PREFIX }}")) | "\(.id) \(.metadata.container.tags[])"' | grep '^.* ${{ env.TAG_PREFIX }}' | sort -k2 -r

- name: Delete old ${{ env.TAG_PREFIX }}* tags using GitHub API, keep ${{ env.KEEP_X_IMAGES }}
run: |
set -e
set -o pipefail

# Get all ${{ env.TAG_PREFIX }}* tags and their version IDs, sorted by tag (descending)
VERSIONS=$(gh api -H "Accept: application/vnd.github+json" \
/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}/versions \
--paginate | jq -r '.[] | select(.metadata.container.tags[] | startswith("${{ env.TAG_PREFIX }}")) | "\(.id) \(.metadata.container.tags[])"' | grep '^.* ${{ env.TAG_PREFIX }}' | sort -k2 -r)

# Get the lines to delete (skip the first ${{ env.KEEP_X_IMAGES }} versions)
TO_DELETE=$(echo "$VERSIONS" | sed "1,${{ env.KEEP_X_IMAGES }}d")

echo "Deleting the following tags:"
echo "$TO_DELETE" | awk '{print $2}'

if [ -z "$TO_DELETE" ]; then
echo "No tags to delete."
exit 0
fi

FAILED_DELETIONS=""
while read -r line; do
id=$(echo "$line" | awk '{print $1}')
tag=$(echo "$line" | awk '{print $2}')
echo "Deleting tag $tag (version ID $id)"
if ! gh api -X DELETE -H "Accept: application/vnd.github+json" \
/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}/versions/$id; then
echo "Failed to delete version $id ($tag)"
FAILED_DELETIONS="${FAILED_DELETIONS}\n$id ($tag)"
fi
echo "Failed to delete version $id ($tag)"
FAILED_DELETIONS="${FAILED_DELETIONS}\n$id ($tag)"
fi
done <<< "$TO_DELETE"

if [ -n "$FAILED_DELETIONS" ]; then
echo -e "The following deletions failed:\n$FAILED_DELETIONS"
exit 1
fi
- name: List remaining ${{ env.TAG_PREFIX }}* tags and their version IDs (debug)
run: |
gh api -H "Accept: application/vnd.github+json" \
/orgs/${{ env.ORG }}/packages/container/${{ env.IMAGE_NAME }}/versions \
--paginate | jq -r '.[] | select(.metadata.container.tags[] | startswith("${{ env.TAG_PREFIX }}")) | "\(.id) \(.metadata.container.tags[])"' | grep '^.* ${{ env.TAG_PREFIX }}' | sort -k2 -r
Loading