create manifest script

This commit is contained in:
Tomas Mirchev 2025-02-25 16:16:44 +01:00
parent 0e854487ee
commit 8ff65a2453
2 changed files with 53 additions and 6 deletions

View File

@ -48,20 +48,26 @@ echo "✅ Successfully built and tagged:"
echo " 📌 ${IMAGE_ARCH}"
echo " 🔄 ${IMAGE_LATEST}"
# Ask whether to push the image
read -p "🚀 Do you want to push the image to ${REPO}? (y/N): " PUSH_CONFIRM
if [[ "$PUSH_CONFIRM" =~ ^[Yy]$ ]]; then
echo "📤 Pushing images..."
docker push ${IMAGE_ARCH}
docker push ${IMAGE_LATEST}
echo "✅ Successfully pushed images to ${REPO}"
echo " Next step: If you have built and pushed both amd64 and arm64 versions, run the following command to create a multi-arch manifest:"
echo " docker manifest create ${REPO}/${IMAGE_NAME}:${COMMIT_ID} \\"
echo " ${REPO}/${IMAGE_NAME}:${COMMIT_ID}-amd64 \\"
echo " ${REPO}/${IMAGE_NAME}:${COMMIT_ID}-arm64"
echo " docker manifest push ${REPO}/${IMAGE_NAME}:${COMMIT_ID}"
else
echo " Skipping push. You can manually push later with:"
echo " docker push ${IMAGE_ARCH}"
echo " docker push ${IMAGE_LATEST}"
exit 0
fi
# After pushing, check if both architectures are available and create the manifest
echo "🔍 Checking if both architectures are pushed..."
if docker manifest inspect "${REPO}/${IMAGE_NAME}:${COMMIT_ID}-amd64" &>/dev/null && \
docker manifest inspect "${REPO}/${IMAGE_NAME}:${COMMIT_ID}-arm64" &>/dev/null; then
echo "📜 Both architectures are available. Creating multi-architecture manifest..."
./create-manifest.sh ${IMAGE_NAME} ${COMMIT_ID}
else
echo "⚠️ Only one architecture is available. Multi-arch manifest will not be created yet."
fi

41
create-manifest.sh Normal file
View File

@ -0,0 +1,41 @@
#!/bin/bash
set -e # Stop on error
if [ $# -ne 2 ]; then
echo "Usage: $0 <image-name> <commit-id>"
echo "Example: $0 base-debian 0e85448"
exit 1
fi
IMAGE_NAME=$1
COMMIT_ID=$2
REPO="registry.tomastm.com"
# Define image tags
IMAGE_AMD64="${REPO}/${IMAGE_NAME}:${COMMIT_ID}-amd64"
IMAGE_ARM64="${REPO}/${IMAGE_NAME}:${COMMIT_ID}-arm64"
IMAGE_MULTI="${REPO}/${IMAGE_NAME}:${COMMIT_ID}"
IMAGE_LATEST="${REPO}/${IMAGE_NAME}:latest"
# Check if both architectures exist in the registry
echo "🔎 Checking if both architectures exist..."
if ! docker manifest inspect ${IMAGE_AMD64} &>/dev/null || ! docker manifest inspect ${IMAGE_ARM64} &>/dev/null; then
echo "❌ Error: One or both architectures are missing in the registry."
echo "Ensure both ${IMAGE_AMD64} and ${IMAGE_ARM64} are pushed before running this script."
exit 1
fi
# Create the multi-architecture manifest for the commit ID
echo "📜 Creating multi-architecture manifest for ${COMMIT_ID}..."
docker manifest create ${IMAGE_MULTI} ${IMAGE_AMD64} ${IMAGE_ARM64}
# Push the multi-arch manifest for the commit ID
docker manifest push ${IMAGE_MULTI}
echo "✅ Successfully pushed multi-arch manifest: ${IMAGE_MULTI}"
# Create and push the latest multi-architecture manifest
echo "🔄 Updating latest multi-architecture manifest..."
docker manifest create ${IMAGE_LATEST} ${IMAGE_AMD64} ${IMAGE_ARM64}
docker manifest push ${IMAGE_LATEST}
echo "✅ Successfully updated latest manifest: ${IMAGE_LATEST}"