diff --git a/build-image.sh b/build-image.sh index 97d3865..a3557ed 100755 --- a/build-image.sh +++ b/build-image.sh @@ -1,5 +1,7 @@ #!/bin/bash +set -e + if [ $# -eq 0 ]; then echo "Usage: $0 " echo "Example: $0 base-debian" @@ -9,9 +11,16 @@ fi IMAGE_NAME=${1:-base-debian} echo "Building Docker image: $IMAGE_NAME" +if ! command -v dpkg &> /dev/null; then + echo "❌ Error: dpkg not found. This script only works on Debian-based systems." + exit 1 +fi + +ARCH=$(dpkg --print-architecture) # Outputs amd64, arm64, armhf, etc. +echo "🛠 Detected architecture: $ARCH" + REPO="registry.tomastm.com" TAG_LATEST="latest" - BUILD_DIR="./${IMAGE_NAME}" if [ ! -d "${BUILD_DIR}" ]; then @@ -19,35 +28,40 @@ if [ ! -d "${BUILD_DIR}" ]; then exit 1 fi -UID=$(id -u) -GID=$(id -g) +_UID=$(id -u) +_GID=$(id -g) COMMIT_ID=$(git rev-parse --short HEAD) -IMAGE_LATEST="${REPO}/${IMAGE_NAME}:${TAG_LATEST}" -IMAGE_COMMIT="${REPO}/${IMAGE_NAME}:${COMMIT_ID}" +IMAGE_ARCH="${REPO}/${IMAGE_NAME}:${COMMIT_ID}-${ARCH}" +IMAGE_LATEST="${REPO}/${IMAGE_NAME}:${TAG_LATEST}-${ARCH}" docker build \ - -t ${IMAGE_COMMIT} \ - --build-arg UID=${UID} \ - --build-arg GID=${GID} \ + -t ${IMAGE_ARCH} \ + --build-arg UID=${_UID} \ + --build-arg GID=${_GID} \ ${BUILD_DIR} -docker tag ${IMAGE_COMMIT} ${IMAGE_LATEST} +docker tag ${IMAGE_ARCH} ${IMAGE_LATEST} echo "✅ Successfully built and tagged:" -echo " 📌 ${IMAGE_COMMIT}" +echo " 📌 ${IMAGE_ARCH}" echo " 🔄 ${IMAGE_LATEST}" 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_COMMIT} + 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_COMMIT}" + echo " docker push ${IMAGE_ARCH}" echo " docker push ${IMAGE_LATEST}" fi -