Signage no longer needs an Ekklesia checkout. A clean clone installs with `pnpm install --frozen-lockfile` and runs lint, typecheck, test, build, and validate by itself, taking Ekklesia's module-development packages from Ekklesia's public registry (ADRs 0053 and 0054). - Dependencies: every `workspace:*` becomes `^0.2.0`. @ekklesia/module-pack is added as a devDependency pinned exactly to 0.2.0, as ADR 0053 requires; it is not invoked yet. No @ekklesia/contracts dependency. drizzle-orm stays a direct dependency, satisfying the adapter's optional peer. - .npmrc points the @ekklesia scope at https://git.riverofglorymn.org/api/packages/River_of_Glory_Church/npm/ with no credential, because reading needs none. - pnpm-workspace.yaml holds this repository's pnpm settings only: - `allowBuilds: esbuild: true`, as the platform's standalone fixture does; - exact-version minimumReleaseAgeExclude entries for the 0.2.0 train, which pnpm 11 otherwise holds back on its release day; - the platform's narrowly scoped override for GHSA-67mh-4wv8-2f99 (esbuild via drizzle-kit), which Signage inherited while it built inside Ekklesia's workspace. - engines.node `>=24.11.0 <25` and packageManager `[email protected].0`, both from Ekklesia 0.2.0. Node 24.18.0 goes in .node-version for CI, as in Ekklesia. - biome.json carries the platform's Biome configuration, which `biome lint` used to pick up from the workspace root, so lint rules are unchanged. - pnpm-lock.yaml is Signage's own: registry tarballs with integrity hashes, and no workspace or file links. - `prepack` runs this package's own build instead of the workspace root's turbo. - `pnpm validate` (scripts/validate-module.mjs) checks the built package and its migrations with the published SDK parsers only: - the manifest, its identity, and its entrypoints; - that the built runtime's id, version, and database ABI match the manifest; - that the built schema metadata is plain, namespaced, and has module-internal foreign keys; - the SDK compatibility range; - that the migration journal and policy agree. Core's own `modules:validate` and `migrations:validate` are not published. What only an Ekklesia installation can check is named in the script. Removed: ci/assemble.sh, ci/platform.env, ci/pnpm-lock.yaml, ci/update-lock.sh. The lint, typecheck, test, and build jobs check out only this repository; build also runs `pnpm validate`. The integration job stays disabled. Its first step is now an explicit placeholder rather than the deleted assembly, and its explanation says it returns when Signage is a canonical linux-x64-glibc Module Package installed into Ekklesia's generic image. No source, behaviour, schema, or version change: Signage stays 0.1.2. Co-Authored-By: Claude Opus 5.5 <[email protected]>
49 lines
2.2 KiB
Bash
Executable File
49 lines
2.2 KiB
Bash
Executable File
#!/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
|
|
#
|
|
# NOT RUN: the integration job is disabled (.gitea/workflows/ci.yml says why). This script still
|
|
# expects Ekklesia's deployment tree at build/workspace, which the removed ci/assemble.sh used to
|
|
# build; it is rewritten when Signage is installed into the generic image as a Module Package.
|
|
set -Eeuo pipefail
|
|
|
|
root="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")/.." && pwd)"
|
|
workspace="$root/build/workspace"
|
|
[[ -f "$workspace/deploy/Dockerfile" ]] || {
|
|
echo "integration: Ekklesia's deployment tree is not at build/workspace." >&2
|
|
exit 1
|
|
}
|
|
|
|
# Named and labeled as a CI stack of this run and job (the platform's scripts/lib/ci-project.sh), so
|
|
# the workflow's final `ci-sweep.sh --job` removes it even if this script is killed before its trap.
|
|
# shellcheck source=/dev/null
|
|
source "$workspace/scripts/lib/ci-project.sh"
|
|
project="$(ci_project_name signage-image)"
|
|
image="${project}:latest"
|
|
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" \
|
|
--label "${EKKLESIA_CI_LABEL}=${project}" --label "${EKKLESIA_CI_CREATED_LABEL}=$(date +%s)" \
|
|
"$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
|