#!/bin/bash set -euo pipefail # Build Docker image for Voice RSS Summary project # Usage: ./build-docker-image.sh [tag] [--platform=platform] [build-args...] IMAGE_NAME="voice-rss-summary" TAG="latest" PLATFORM="" BUILD_ARGS=() # Parse arguments while [[ $# -gt 0 ]]; do case $1 in --platform=*) PLATFORM="${1#*=}" shift ;; --platform) PLATFORM="$2" shift 2 ;; -*) BUILD_ARGS+=("$1") shift ;; *) if [[ -z "${TAG_SET:-}" ]]; then TAG="$1" TAG_SET=true else BUILD_ARGS+=("$1") fi shift ;; esac done FULL_TAG="${IMAGE_NAME}:${TAG}" echo "Building Docker image: ${FULL_TAG}" echo "Build context: $(pwd)" if [[ -n "$PLATFORM" ]]; then echo "Target platform: ${PLATFORM}" fi # Check if Dockerfile exists if [[ ! -f "Dockerfile" ]]; then echo "Error: Dockerfile not found in current directory" exit 1 fi # Build with build cache and progress output DOCKER_CMD=(docker build --tag "${FULL_TAG}" --progress=plain --build-arg BUILDKIT_INLINE_CACHE=1) # Add platform if specified if [[ -n "$PLATFORM" ]]; then DOCKER_CMD+=(--platform "$PLATFORM") fi # Add any additional build args if [[ ${#BUILD_ARGS[@]} -gt 0 ]]; then DOCKER_CMD+=("${BUILD_ARGS[@]}") fi # Add build context DOCKER_CMD+=(.) echo "Running: ${DOCKER_CMD[*]}" "${DOCKER_CMD[@]}" # Display image info echo "" echo "Build completed successfully!" echo "Image: ${FULL_TAG}" if [[ -n "$PLATFORM" ]]; then echo "Platform: ${PLATFORM}" fi echo "Size: $(docker images --format 'table {{.Size}}' "${FULL_TAG}" | tail -n +2)" echo "" echo "To run the container, use: ./run-docker.sh" if [[ -n "$PLATFORM" && "$PLATFORM" != "linux/amd64" ]]; then echo "Note: Cross-platform image built. May need to push to registry for deployment." fi