#!/usr/bin/env bash # Orchestrate the secs4java8 interop harness against our C++ server. # # Builds a self-contained C++ server image (interop/Dockerfile.server) # and the Java harness image (interop/secs4j/Dockerfile), spins both # up on a dedicated docker network, and runs the harness against the # server. No bind mounts — important under docker-in-docker (gitea- # act / GitHub Actions runners with a mounted /var/run/docker.sock), # where bind-mount sources don't resolve against the daemon's host # filesystem. Wired into CI via .gitea/workflows/ci.yml. # # Usage: bash interop/secs4j_validate.sh # Exit codes: # 0 — every check the harness defines passed # 1 — one or more checks failed # 2 — script / orchestration error set -euo pipefail cd "$(dirname "$0")/.." NET=secs4j-interop-net SERVER_NAME=secs4j-interop-server cleanup() { docker rm -f "$SERVER_NAME" >/dev/null 2>&1 || true docker network rm "$NET" >/dev/null 2>&1 || true } trap cleanup EXIT # Build both images (idempotent — docker reuses layers). Errors are # NOT swallowed: an early failure here is the most informative signal # we get when something breaks in CI. echo "building secs_server image..." docker build -t secsgem-secs4j-server -f interop/Dockerfile.server . echo "building secs4j harness image..." docker build -t secsgem-secs4j-interop -f interop/secs4j/Dockerfile interop/secs4j # Fresh network each run so we don't collide with a leftover from a # previous failed invocation. docker network rm "$NET" >/dev/null 2>&1 || true docker network create "$NET" >/dev/null echo "starting secs_server..." # --name doubles as the DNS hostname on the user-defined network, so # the harness reaches it as "secs4j-interop-server:5000". docker run -d --rm \ --name "$SERVER_NAME" \ --network "$NET" \ secsgem-secs4j-server >/dev/null # Give the server a moment to bind. sleep 1 echo "running Secs4jHostHarness..." docker run --rm \ --network "$NET" \ secsgem-secs4j-interop \ java -cp /opt/secs4java8/Export.jar:/work Secs4jHostHarness \ "$SERVER_NAME" 5000 # trap handles teardown.