#!/usr/bin/env bash # Build the route-proxy module's runtime image: the reference reverse proxy (novox/hq # 08-connectivity ยง3), compiled from its canonical Go source in mesh-controller into a container the # lab can stock and serve by digest. # # Unlike the TypeScript modules (built by build-module-runtime.sh into a node tool runtime), the # proxy is a Go program. The module ships only the packaging โ€” a Dockerfile in mesh-catalog whose # build context is the mesh-controller repository root โ€” and this script runs that build into the local # docker daemon, which a scenario's registry then stocks and serves by digest. # # build-route-proxy-image.sh # -> tags mesh-route-proxy:development in the local daemon set -euo pipefail HERE="$(cd "$(dirname "$0")/.." && pwd)"; ROOT="$(cd "$HERE/.." && pwd)" MESH_CONTROL="${MESH_CONTROL:-$ROOT/mesh-controller}" MESH_CATALOG="${MESH_CATALOG:-$ROOT/mesh-catalog}" TAG="${ROUTE_PROXY_TAG:-mesh-route-proxy:development}" DOCKERFILE="$MESH_CATALOG/modules/route-proxy/Dockerfile" [ -f "$DOCKERFILE" ] || { echo "no Dockerfile at $DOCKERFILE" >&2; exit 1; } [ -f "$MESH_CONTROL/examples/route-proxy/main.go" ] || { echo "no proxy source at $MESH_CONTROL/examples/route-proxy" >&2; exit 1; } # The bases the manifest declares (novox/hq ADR 0097) are what this build starts FROM โ€” the same # images the mesh's builder would copy and hand the recipe, not the Dockerfile's floating defaults. BASES=() while IFS=$'\t' read -r arg image; do [ -n "$arg" ] && BASES+=(--build-arg "$arg=$image") done < <(python3 -c ' import json, sys for on in json.load(open(sys.argv[1])).get("build", {}).get("on", []): print(on["arg"], on["image"], sep="\t") ' "$MESH_CATALOG/modules/route-proxy/module.json") # Context is the mesh-controller repository root: the proxy compiles against that module's go.mod and # its examples/route-proxy package. docker build -f "$DOCKERFILE" "${BASES[@]}" -t "$TAG" "$MESH_CONTROL" echo "built $TAG (from $MESH_CONTROL/examples/route-proxy)"