printf шёл в stdout внутри $(...), поэтому prompt не выводился и read висел. Теперь prompt идёт в stderr напрямую. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
52 lines
1.2 KiB
Bash
Executable File
52 lines
1.2 KiB
Bash
Executable File
#!/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 <tag> <registry> <owner>
|
|
|
|
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}"
|