#!/usr/bin/env bash # Builds the development images on this Mac (native linux/arm64, nothing pushed): # kvitt-server:dev from server/Dockerfile (milestone M2a) # kvitt-backup:dev from infra/backup/Dockerfile # Usage: infra/dev/build.sh [server|backup|all] (default: all) # Refuses to run while a Gradle build holds the gradle-serial lock (CLAUDE.md: never build images during a Gradle build). set -euo pipefail # shellcheck source=lib.sh . "$(dirname "$0")/lib.sh" what="${1:-all}" lock=/tmp/kvitt-gradle.lock if [[ -d "$lock" ]] && pid="$(cat "$lock/pid" 2>/dev/null)" && [[ -n "$pid" ]] && kill -0 "$pid" 2>/dev/null; then echo "build.sh: a Gradle build is running (pid $pid, $lock); try again when it is done." >&2 exit 1 fi server_image="$(env_value KVITT_SERVER_IMAGE)"; server_image="${server_image:-kvitt-server:dev}" backup_image="$(env_value KVITT_BACKUP_IMAGE)"; backup_image="${backup_image:-kvitt-backup:dev}" build_server() { local dockerfile="$repo_root/server/Dockerfile" local context="${KVITT_SERVER_BUILD_CONTEXT:-$repo_root/server}" if [[ ! -f "$dockerfile" ]]; then echo "build.sh: $dockerfile does not exist yet (it comes with milestone M2a)." >&2 return 1 fi echo "Building $server_image from server/Dockerfile" docker build --platform linux/arm64 -f "$dockerfile" -t "$server_image" "$context" } build_backup() { echo "Building $backup_image from infra/backup/Dockerfile" docker build --platform linux/arm64 -f "$repo_root/infra/backup/Dockerfile" -t "$backup_image" "$repo_root/infra/backup" } case "$what" in server) build_server ;; backup) build_backup ;; all) build_backup; build_server ;; *) echo "usage: $0 [server|backup|all]" >&2; exit 2 ;; esac