diff --git a/modules/amqp-ping/Dockerfile b/modules/amqp-ping/Dockerfile new file mode 100644 index 0000000..2f377a3 --- /dev/null +++ b/modules/amqp-ping/Dockerfile @@ -0,0 +1,26 @@ +# amqp-ping's runtime: the tool runtime, carrying this module's compiled code. +# +# **Built from this module's own directory and nothing else.** The sdk and the tool runtime are not +# copied out of neighbouring checkouts — they are in the base image, which is published like any +# other artifact. That is what makes this buildable by the mesh from a repository and a path +# (novox/hq ADR 0069) rather than only on a workstation that happens to have the siblings. +# +# The base is named by ARG so it can be pinned to a digest the mesh's registry assigned. A tag here +# would make the runtime's contents depend on what somebody last pushed under that name. +ARG RUNTIME_BASE=127.0.0.1:5000/mesh-tool-runtime@sha256:d4d793c828a5f563fdd8f49e5c6026d17b308a3f7a13c589849188362e4c7415 + +FROM ${RUNTIME_BASE} AS build +# Compiled under /app/modules, so resolving `@novox/mesh-sdk` walks up to the base's own +# node_modules — the module is compiled against exactly the sdk it will run against. +WORKDIR /app/modules/amqp-ping +COPY . . +# The compiler is invoked by its real path, not through node_modules/.bin. Those are symlinks to +# a launcher that requires its library relatively, and the base image resolves them when copying — +# leaving a launcher whose relative require no longer points at anything. +RUN node /app/node_modules/typescript/bin/tsc client.ts index.ts \ + --module NodeNext --moduleResolution NodeNext --target ES2022 --outDir dist + +FROM ${RUNTIME_BASE} +COPY --from=build /app/modules/amqp-ping/dist /app/modules/amqp-ping/dist +# Declared rather than derived from which files happen to exist: the module knows what it serves. +ENV MESH_TOOL_MODULES=/app/modules/amqp-ping/dist/index.js diff --git a/modules/amqp-ping/module.json b/modules/amqp-ping/module.json index ab4a0cb..4740226 100644 --- a/modules/amqp-ping/module.json +++ b/modules/amqp-ping/module.json @@ -47,7 +47,6 @@ "id": "runtime", "type": "container", "name": "amqp-ping", - "image": "mesh-runtime-amqp-ping@sha256:0000000000000000000000000000000000000000000000000000000000000000", "network": "amqp-ping", "env-file": [ "/var/lib/amqp-ping/amqp.env" @@ -58,7 +57,17 @@ ], "restart-on": [ "amqp-env" - ] + ], + "artifact": "runtime" } - ] + ], + "build": { + "artifacts": [ + { + "name": "runtime", + "kind": "image", + "from": "Dockerfile" + } + ] + } }