#!/usr/bin/env bash # Signage inside Ekklesia, end to end: builds the deployment image from the assembled workspace with # the platform's own Dockerfile, then runs the platform's split-topology deployment smoke against it # with the display-device scenarios listed in ci/display-scenarios. A disposable PostgreSQL and object # store, generated secrets, and an explicit migration apply against that fresh database only; nothing # is pushed, published, or logged in to. The image is removed afterwards. # # bash ci/integration.sh (after bash ci/assemble.sh) set -Eeuo pipefail root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)" workspace="$root/build/workspace" [[ -f "$workspace/deploy/Dockerfile" ]] || { echo "integration: run bash ci/assemble.sh first." >&2 exit 1 } image="signage-ci:${GITHUB_SHA:-local}-${GITHUB_RUN_ID:-0}-${GITHUB_RUN_ATTEMPT:-1}" trap 'docker image rm --force "$image" >/dev/null 2>&1 || true' EXIT scenarios="$(sed -e 's/#.*//' -e '/^[[:space:]]*$/d' "$root/ci/display-scenarios" | tr '\n' ' ')" [[ -n "${scenarios// /}" ]] || { echo "integration: ci/display-scenarios lists no scenario." >&2 exit 1 } DOCKER_BUILDKIT=1 docker build --quiet --file "$workspace/deploy/Dockerfile" --tag "$image" \ "$workspace" >/dev/null echo "integration: built the deployment image with Signage; scenarios: ${scenarios}" cd "$workspace" EKKLESIA_SMOKE_TOPOLOGY=split \ EKKLESIA_SMOKE_IMAGE="$image" \ EKKLESIA_SMOKE_DISPLAY_DEVICE=1 \ EKKLESIA_SMOKE_DISPLAY_SCENARIOS="$scenarios" \ EKKLESIA_SMOKE_WATCH_MS=120000 \ EKKLESIA_SMOKE_RECYCLE_WATCH_MS=120000 \ bash scripts/smoke-deploy.sh