Files
ScadaBridge/docker/build.sh
T
Joseph Doherty e8a743de9f chore(docker): env2 runs its own image tag, leader-auto-down overlay, drill targets env2 (#116)
- docker/build.sh: SCADABRIDGE_IMAGE picks the tag (default scadabridge:latest).
- docker-env2/docker-compose.yml: node image is ${SCADABRIDGE_IMAGE:-scadabridge:latest},
  so env2 can run its own build without retagging the primary rig's image.
- docker-env2/docker-compose.leader-auto-down.yml: opt-in overlay for both env2 pairs,
  mirroring docker/docker-compose.leader-auto-down.yml. Shipped default stays auto-down.
- docker/failover-drill.sh: DRILL_ENV=primary|env2 (container prefix, Traefik :9100,
  pair site-x).

Claude-Session: https://claude.ai/code/session_01GT67ACmpMR7b9LGRPLijMi
2026-11-12 23:28:34 -05:00

55 lines
2.3 KiB
Bash
Executable File

#!/bin/bash
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
REPO_ROOT="$(cd "$SCRIPT_DIR/.." && pwd)"
echo "=== ScadaBridge Docker Build ==="
# Ensure the shared network exists
if ! docker network inspect scadabridge-net >/dev/null 2>&1; then
echo "Creating scadabridge-net network..."
docker network create scadabridge-net
fi
# Optional credentials for the private Gitea NuGet feed (ZB.MOM.WW.MxGateway.*).
# Read from the host environment so secrets are never committed. Leave unset for an
# anonymous feed. Export MXGW_NUGET_USER / MXGW_NUGET_PASS before running deploy.
NUGET_ARGS=()
if [ -n "${MXGW_NUGET_USER:-}" ]; then
NUGET_ARGS+=(--build-arg "NUGET_GITEA_USER=${MXGW_NUGET_USER}")
NUGET_ARGS+=(--build-arg "NUGET_GITEA_PASS=${MXGW_NUGET_PASS:-}")
fi
# Commit stamp for the image's informational version (ScadaBridge#134). .git/ stays
# out of the build context (.dockerignore), so the in-container publish cannot read
# the commit itself; pass it in. "-dirty" marks a build from an uncommitted tree.
# Outside a git checkout this is left empty and the image stamps a bare "1.0.0".
SOURCE_REVISION="${SOURCE_REVISION:-}"
if [ -z "$SOURCE_REVISION" ] && git -C "$REPO_ROOT" rev-parse --git-dir >/dev/null 2>&1; then
SOURCE_REVISION="$(git -C "$REPO_ROOT" rev-parse HEAD)"
if [ -n "$(git -C "$REPO_ROOT" status --porcelain --untracked-files=no)" ]; then
SOURCE_REVISION="${SOURCE_REVISION}-dirty"
fi
fi
echo "Source revision: ${SOURCE_REVISION:-<none>}"
# Image tag. Default scadabridge:latest (what docker/docker-compose.yml runs). Set
# SCADABRIDGE_IMAGE to build under another tag without touching :latest, e.g. so
# docker-env2 can run a different build while another agent uses the primary rig
# (ScadaBridge#116 env2 rollout). docker-env2/docker-compose.yml reads the same variable.
IMAGE="${SCADABRIDGE_IMAGE:-scadabridge:latest}"
# Build from repo root (so COPY paths in Dockerfile resolve correctly)
echo "Building ${IMAGE} image..."
# Note: ${NUGET_ARGS[@]+...} guards against the "unbound variable" error that
# set -u raises on bash 3.2 (macOS default) when expanding an empty array.
docker build \
-t "${IMAGE}" \
-f "$SCRIPT_DIR/Dockerfile" \
${NUGET_ARGS[@]+"${NUGET_ARGS[@]}"} \
--build-arg "SOURCE_REVISION=${SOURCE_REVISION}" \
"$REPO_ROOT"
echo "Build complete: ${IMAGE}"