#!/bin/sh # Build a Docker image locally. # # Usage (interactive — prompts for missing values): # ./ops/build-image.sh # # Usage (non-interactive — all values as positional args): # ./ops/build-image.sh set -eu ROOT_DIR=$(CDPATH= cd -- "$(dirname "$0")/.." && pwd) command -v docker >/dev/null 2>&1 || { echo "error: docker not found in PATH" >&2; exit 1; } DEFAULT_TAG=$(git -C "${ROOT_DIR}" rev-parse --short HEAD 2>/dev/null || echo dev) ask() { # $1 = variable name, $2 = prompt, $3 = default if [ -n "$3" ]; then printf "%s [%s]: " "$2" "$3" >&2 else printf "%s: " "$2" >&2 fi read -r _val eval "$1=\"\${_val:-$3}\"" } if [ $# -ge 3 ]; then IMAGE_TAG="$1" REGISTRY="$2" OWNER="$3" elif [ $# -ge 1 ]; then IMAGE_TAG="$1" ask REGISTRY "Registry" "" ask OWNER "Owner" "" else ask IMAGE_TAG "Tag" "${DEFAULT_TAG}" ask REGISTRY "Registry" "" ask OWNER "Owner" "" fi IMAGE_NAME="${IMAGE_NAME:-jukebox-maker}" FULL_IMAGE="${REGISTRY}/${OWNER}/${IMAGE_NAME}" echo "building ${FULL_IMAGE}:${IMAGE_TAG}" docker build \ -f "${ROOT_DIR}/Dockerfile" \ -t "${FULL_IMAGE}:${IMAGE_TAG}" \ -t "${FULL_IMAGE}:latest" \ "${ROOT_DIR}"