Commit9e3aad5unknown_key
fix(docker): ship public/ assets so /gluecron.dxt stops 404ing
fix(docker): ship public/ assets so /gluecron.dxt stops 404ing GET /gluecron.dxt serves public/gluecron.dxt, but the Dockerfile never copied public/ into the image — so the download 404'd and the synthetic uptime monitor logged a red incident every 5 minutes. Copy public/ into the image and rebuild the .dxt bundle from source at build time (zip added to the apt layer; build-dxt-assets.ts uses only node builtins). The committed bundle is the fallback if the rebuild is skipped. Fixes the broken landing-page download CTA and clears the recurring synthetic incidents. https://claude.ai/code/session_01QKaJBYpD6DGErWHrRVChkf
1 file changed+13−39e3aad5bd634dcc6d9710f3c414996efadd9d9b4
1 changed file+13−3
ModifiedDockerfile+13−3View fileUnifiedSplit
@@ -2,10 +2,11 @@ FROM oven/bun:1.3 AS base
22WORKDIR /app
33
44# Install git (required for ALL git operations — clone, push, branch/tree
5# listing, diffs). Verify it landed: a missing binary here must fail the
6# build loudly rather than ship an image that 500s on every repo page.
5# listing, diffs) and zip (used to package the Claude Desktop .dxt bundle at
6# build time). Verify git landed: a missing binary here must fail the build
7# loudly rather than ship an image that 500s on every repo page.
78RUN apt-get update \
8 && apt-get install -y --no-install-recommends git ca-certificates \
9 && apt-get install -y --no-install-recommends git ca-certificates zip \
910 && rm -rf /var/lib/apt/lists/* \
1011 && git --version
1112
@@ -17,10 +18,19 @@ RUN bun install --frozen-lockfile --production
1718COPY src/ ./src/
1819COPY drizzle/ ./drizzle/
1920COPY scripts/ ./scripts/
21COPY extension/ ./extension/
22COPY public/ ./public/
2023COPY tsconfig.json drizzle.config.ts ./
2124COPY legal/ ./legal/
2225COPY CLAUDE.md LICENSE ./
2326
27# Refresh the Claude Desktop (.dxt) bundle from source into public/ so GET
28# /gluecron.dxt serves a real file instead of 404ing (which also kept tripping
29# the synthetic uptime monitor). The committed public/gluecron.dxt is the
30# fallback; this rebuild keeps it in sync with the manifest. Best-effort — a
31# glitch here must not fail the whole image.
32RUN bash scripts/build-dxt.sh || echo "WARN: .dxt bundle build skipped"
33
2434# Create repos directory
2535RUN mkdir -p /data/repos
2636
2737