#!/bin/bash # Build and push the JellyTau builder Docker image to your registry set -e # Configuration REGISTRY_HOST="${REGISTRY_HOST:-gitea.tourolle.paris}" REGISTRY_USER="${REGISTRY_USER:-dtourolle}" IMAGE_NAME="jellytau-builder" IMAGE_TAG="${1:-latest}" FULL_IMAGE_NAME="${REGISTRY_HOST}/${REGISTRY_USER}/${IMAGE_NAME}:${IMAGE_TAG}" echo "🐳 Building JellyTau Builder Image" echo "==================================" echo "Registry: $REGISTRY_HOST" echo "User: $REGISTRY_USER" echo "Image: $FULL_IMAGE_NAME" echo "" # Step 1: Build locally echo "🔨 Building Docker image locally..." docker build -f Dockerfile.builder -t ${IMAGE_NAME}:${IMAGE_TAG} . # Step 2: Tag for registry echo "🏷️ Tagging for registry..." docker tag ${IMAGE_NAME}:${IMAGE_TAG} ${FULL_IMAGE_NAME} # Step 3: Login to registry (if not already logged in) # # `docker info | grep Username` only ever reports a Docker Hub session, so for a # private registry it never matched — meaning this branch fired on every push and # dropped into an interactive `docker login`, which hangs any non-interactive run # (a scripted release, or CI). Check the credential store for this specific # registry instead, and refuse rather than prompt when there is no TTY to # prompt on. echo "🔐 Checking registry authentication..." DOCKER_CFG="${DOCKER_CONFIG:-$HOME/.docker}/config.json" if ! grep -q "\"${REGISTRY_HOST}\"" "$DOCKER_CFG" 2>/dev/null; then if [ -t 0 ]; then echo "Not authenticated to ${REGISTRY_HOST}. Logging in..." docker login "${REGISTRY_HOST}" else echo "❌ Not authenticated to ${REGISTRY_HOST}, and stdin is not a TTY." echo " Run this first: docker login ${REGISTRY_HOST}" exit 1 fi else echo " Using stored credentials for ${REGISTRY_HOST}." fi # Step 4: Push to registry echo "📤 Pushing image to registry..." docker push ${FULL_IMAGE_NAME} echo "" echo "✅ Successfully built and pushed: ${FULL_IMAGE_NAME}" echo "" echo "Update your workflow to use:" echo " container:" echo " image: ${FULL_IMAGE_NAME}"