#!/bin/bash set -e REGISTRY="git.baked.rocks" OWNER="vasceannie" # Extract service names from docker-compose.yml SERVICES=($(docker compose config --services)) # Login to registry if not already authenticated echo "Logging in to ${REGISTRY}..." docker login "${REGISTRY}" || { echo "Error: Failed to login to ${REGISTRY}" echo "Please ensure you have valid credentials" exit 1 } # Build all services echo "Building all services..." docker compose build # Tag and push each service for service in "${SERVICES[@]}"; do echo "Tagging and pushing $service..." # Get the image ID - try multiple methods IMAGE_ID=$(docker compose images -q "$service" 2>/dev/null | head -1) if [ -z "$IMAGE_ID" ]; then # Fallback: find image by service name pattern IMAGE_ID=$(docker images --format "{{.ID}}" --filter "reference=*${service}*" | head -1) fi if [ -z "$IMAGE_ID" ]; then echo "Error: Could not find image ID for $service" echo "Available images:" docker compose images docker images | grep -E "(${SERVICES[*]// /|})" exit 1 fi TARGET_IMAGE="${OWNER}/${service}:latest" REGISTRY_IMAGE="${REGISTRY}/${TARGET_IMAGE}" # Tag using image ID directly docker tag "${IMAGE_ID}" "${REGISTRY_IMAGE}" docker push "${REGISTRY_IMAGE}" echo "$service pushed successfully" done echo "All services built and pushed to ${REGISTRY}"