CodeIssuesDiscussionsWikiPull RequestsProjectsCommitsActionsReleasesContributorsPulse● GatesSecuritySettingsDeploymentsPipelineInsightsAgents✨ Explain✨ Ask AI✨ Workspace✨ Spec✨ Tests▓ Debt Map✨ NL Search🏛 Archaeology
Blame · Line-by-line history
Dockerfile
Each line is annotated with the commit that last touched it. Click any SHA to jump to that commit and see the surrounding change.
| 8ade77b | 1 | FROM oven/bun:1.3 AS base |
| 2 | WORKDIR /app | |
| 3 | ||
| 6499f34 | 4 | # Install git (required for ALL git operations — clone, push, branch/tree |
| 56ea9a9 | 5 | # listing, diffs), zip (used to package the Claude Desktop .dxt bundle at |
| 6 | # build time), and wget (the compose healthcheck calls it — without it the | |
| 7 | # container is permanently "unhealthy" and autoheal restart-loops it). | |
| 8 | # Verify git landed: a missing binary here must fail the build loudly rather | |
| 9 | # than ship an image that 500s on every repo page. | |
| 6499f34 | 10 | RUN apt-get update \ |
| 56ea9a9 | 11 | && apt-get install -y --no-install-recommends git ca-certificates zip wget \ |
| 6499f34 | 12 | && rm -rf /var/lib/apt/lists/* \ |
| 56ea9a9 | 13 | && git --version \ |
| 14 | && wget --version | head -1 | |
| 8ade77b | 15 | |
| 16 | # Install dependencies | |
| 17 | COPY package.json bun.lock ./ | |
| 18 | RUN bun install --frozen-lockfile --production | |
| 19 | ||
| 20 | # Copy source | |
| 21 | COPY src/ ./src/ | |
| 50c42fe | 22 | COPY drizzle/ ./drizzle/ |
| dcefebe | 23 | COPY scripts/ ./scripts/ |
| 9e3aad5 | 24 | COPY extension/ ./extension/ |
| 25 | COPY public/ ./public/ | |
| 8ade77b | 26 | COPY tsconfig.json drizzle.config.ts ./ |
| 27 | COPY legal/ ./legal/ | |
| 28 | COPY CLAUDE.md LICENSE ./ | |
| 29 | ||
| 9e3aad5 | 30 | # Refresh the Claude Desktop (.dxt) bundle from source into public/ so GET |
| 31 | # /gluecron.dxt serves a real file instead of 404ing (which also kept tripping | |
| 32 | # the synthetic uptime monitor). The committed public/gluecron.dxt is the | |
| 33 | # fallback; this rebuild keeps it in sync with the manifest. Best-effort — a | |
| 34 | # glitch here must not fail the whole image. | |
| 35 | RUN bash scripts/build-dxt.sh || echo "WARN: .dxt bundle build skipped" | |
| 36 | ||
| 8ade77b | 37 | # Create repos directory |
| 38 | RUN mkdir -p /data/repos | |
| 39 | ||
| 40 | ENV GIT_REPOS_PATH=/data/repos | |
| 41 | ENV NODE_ENV=production | |
| 42 | ENV PORT=3000 | |
| 43 | ||
| 44 | EXPOSE 3000 | |
| 45 | ||
| 2c3ba6e | 46 | # Run as non-root user for security |
| 47 | RUN chown -R bun:bun /app /data/repos | |
| 48 | USER bun | |
| 49 | ||
| 8ade77b | 50 | CMD ["bun", "run", "src/index.ts"] |