#!/usr/bin/env bash set -euo pipefail # Usage: ./build.sh [poller|web|all] [commit message] # web — build/push ONLY the web image (use this for web iterations so the # poller image is never rebuilt/repushed) # poller— build/push ONLY the poller image (touch deliberately) # all — both (default) # # Deploy pins images by SHA (compose.*.yml ship :latest as a convenience only). REG="docker.adamksmith.xyz" cd "$(dirname "$0")" # First arg is the target if it's a known one; otherwise it's treated as the # commit message (backward-compatible with `./build.sh "message"`). case "${1:-}" in poller) TARGETS="poller"; MSG="${2:-Build and push images}" ;; web) TARGETS="web"; MSG="${2:-Build and push images}" ;; all|"") TARGETS="poller web"; MSG="${2:-Build and push images}" ;; *) TARGETS="poller web"; MSG="${1}" ;; esac TARGET="${TARGETS// /+}" # Stage and commit all changes git add -A if git diff --cached --quiet; then echo "No changes to commit, using HEAD" else git commit -m "${MSG}" fi SHA=$(git rev-parse --short HEAD) for target in ${TARGETS}; do img="${REG}/jbod-${target}" echo "Building ${img}:${SHA}" docker build --target "${target}" -t "${img}:${SHA}" -t "${img}:latest" . echo "Pushing ${img}:${SHA}" docker push "${img}:${SHA}" docker push "${img}:latest" done echo "Done (${TARGET}): ${REG}/jbod-{${TARGETS// /,}}:${SHA}"