CI / verify (pull_request) Successful in 58s
CI / infrastructure-smoke (pull_request) Successful in 35s
CI / migration-smoke (pull_request) Successful in 1m53s
CI / image-build (pull_request) Successful in 30s
CI / deploy-smoke (same-origin) (pull_request) Successful in 50s
CI / deploy-smoke (split) (pull_request) Successful in 1m32s
Every Module Package v1 now declares the module's license and carries its text. packageFormat stays 1; pre-ADR-0051 metadata fails closed. - Contracts: ekklesia.package.json requires an SPDX `license` expression, validated with spdx-expression-parse, with UNLICENSED and non-expressions refused. The `files` list must hold exactly one non-empty root LICENSE. The package contracts move to the @ekklesia/contracts/module-package subpath, so the SPDX parser and its data (spdx-exceptions and spdx-license-ids ship no licence files) never reach a module bundle through the SDK's re-export of the contracts root. - Packager: reads the source package.json's string SPDX declaration and never invents one. It requires an explicit --license-file (a non-empty regular file, no symlink, no parent search, no download) and copies its bytes unchanged to LICENSE, listed with size and SHA-256 and covered by the archive digest. THIRD_PARTY_NOTICES stays third-party only, and bundled Ekklesia code stays in `incorporates`. - Verifier: rejects missing or invalid license metadata, and a missing, unlisted, duplicated, or corrupted LICENSE, through the schema and the existing strict inventory. - Template: packaged as AGPL-3.0-or-later with the repository's canonical LICENSE, passed explicitly (Dockerfile, smoke, docs). Packing it twice gives byte-identical archives. Started by Codex; reviewed and completed in Claude Code (empty license-text refusal, schema non-empty LICENSE, symlink and empty-file tests). ADR 0051 is Accepted. Co-Authored-By: Claude Opus 5.5 <[email protected]>
32 lines
1.6 KiB
Docker
32 lines
1.6 KiB
Docker
# Builds the repository's module template and packages it with the canonical Ekklesia packager
|
|
# (`@ekklesia/module-pack`, ADR 0049), in a clean container from a clean copy of the checkout. The
|
|
# deploy smoke test uses it because a CI job that drives Docker has no Node.js of its own. The
|
|
# packaging itself is exactly what a module's CI runs; this file only provides the environment.
|
|
#
|
|
# DOCKER_BUILDKIT=1 docker build --file scripts/lib/build-module-package.Dockerfile \
|
|
# --build-arg SOURCE_REVISION=<full commit id> --output type=local,dest=<directory> .
|
|
#
|
|
# writes <directory>/example-<version>-any.tar.gz and its .sha256 line. No image is produced.
|
|
#
|
|
# The same pinned Node.js base as deploy/Dockerfile, so the package is built by the runtime it is
|
|
# installed into.
|
|
FROM node:24.18.0-trixie-slim@sha256:ae91dcc111a68c9d2d81ff2a17bda61be126426176fde6fe7d08ab13b7f50573 AS build
|
|
ENV COREPACK_ENABLE_DOWNLOAD_PROMPT=0 \
|
|
PNPM_HOME=/pnpm \
|
|
TURBO_TELEMETRY_DISABLED=1 \
|
|
DO_NOT_TRACK=1
|
|
WORKDIR /opt/source
|
|
COPY package.json ./
|
|
RUN corepack enable && corepack install
|
|
COPY . .
|
|
RUN --mount=type=cache,id=ekklesia-pnpm-store,target=/pnpm/store \
|
|
pnpm install --frozen-lockfile --store-dir /pnpm/store
|
|
RUN pnpm exec turbo run build --filter=@ekklesia/module-template --filter=@ekklesia/module-pack
|
|
ARG SOURCE_REVISION
|
|
RUN test -n "$SOURCE_REVISION" && \
|
|
node packages/module-pack/bin/ekklesia-pack-module.mjs --module templates/module --target any \
|
|
--out /package --license-file LICENSE --source-revision "$SOURCE_REVISION"
|
|
|
|
FROM scratch AS package
|
|
COPY --from=build /package/ /
|