Some checks failed
Release / Test backend (push) Successful in 46s
Release / Check ui (push) Successful in 1m38s
Release / Docker / caddy (push) Successful in 49s
Release / Docker / backend (push) Successful in 2m54s
Release / Docker / runner (push) Successful in 2m52s
Release / Upload source maps (push) Successful in 1m39s
Release / Docker / ui (push) Failing after 1m34s
Release / Gitea Release (push) Has been skipped
The docker-ui job was rebuilding the UI from scratch inside Docker, producing chunk hashes and JS files that didn't match the source maps uploaded to GlitchTip, causing all stack traces to appear minified. Fix: - ui/Dockerfile: add PREBUILT=1 ARG; skip npm run build when set - release.yaml upload-sourcemaps: re-upload artifact after sentry-cli inject - release.yaml docker-ui: download injected artifact into ui/build/ and pass PREBUILT=1 so Docker reuses the exact same JS files whose debug IDs are in GlitchTip
62 lines
2.2 KiB
Docker
62 lines
2.2 KiB
Docker
# syntax=docker/dockerfile:1
|
|
FROM node:22-alpine AS builder
|
|
WORKDIR /app
|
|
|
|
# Install dependencies in a separate layer so it is cached as long as
|
|
# package-lock.json does not change. The npm cache mount persists the
|
|
# ~/.npm cache across builds so packages are not re-downloaded.
|
|
COPY package.json package-lock.json ./
|
|
RUN --mount=type=cache,target=/root/.npm \
|
|
npm ci
|
|
|
|
COPY . .
|
|
|
|
# Build-time version info — injected by docker-compose or CI via --build-arg.
|
|
ARG BUILD_VERSION=dev
|
|
ARG BUILD_COMMIT=unknown
|
|
ARG BUILD_TIME=unknown
|
|
|
|
# Expose as PUBLIC_ env vars so SvelteKit's $env/dynamic/public can read them.
|
|
ENV PUBLIC_BUILD_VERSION=$BUILD_VERSION
|
|
ENV PUBLIC_BUILD_COMMIT=$BUILD_COMMIT
|
|
ENV PUBLIC_BUILD_TIME=$BUILD_TIME
|
|
|
|
# PREBUILT=1 skips npm run build — used in CI when the build/ directory has
|
|
# already been compiled (and debug IDs injected) by a prior job. The caller
|
|
# must copy the pre-built build/ into the Docker context before building.
|
|
ARG PREBUILT=0
|
|
RUN [ "$PREBUILT" = "1" ] || npm run build
|
|
|
|
# ── Runtime image ──────────────────────────────────────────────────────────────
|
|
# adapter-node bundles most server-side code, but packages with dynamic
|
|
# requires or native bindings (e.g. ioredis) are not inlined by Rollup and
|
|
# must be present in node_modules at runtime. We install only production
|
|
# deps (no devDependencies) to keep the image small.
|
|
FROM node:22-alpine
|
|
WORKDIR /app
|
|
|
|
COPY --from=builder /app/build ./build
|
|
COPY --from=builder /app/package.json ./package.json
|
|
COPY --from=builder /app/package-lock.json ./package-lock.json
|
|
|
|
RUN --mount=type=cache,target=/root/.npm \
|
|
npm ci --omit=dev
|
|
|
|
ENV NODE_ENV=production
|
|
ENV PORT=3000
|
|
ENV HOST=0.0.0.0
|
|
|
|
# Carry build-time metadata into the runtime image so the UI footer can
|
|
# display the version, commit SHA, and build timestamp.
|
|
# These must be re-declared after the second FROM — ARG values do not
|
|
# cross stage boundaries, but ENV values set here persist at runtime.
|
|
ARG BUILD_VERSION=dev
|
|
ARG BUILD_COMMIT=unknown
|
|
ARG BUILD_TIME=unknown
|
|
ENV PUBLIC_BUILD_VERSION=$BUILD_VERSION
|
|
ENV PUBLIC_BUILD_COMMIT=$BUILD_COMMIT
|
|
ENV PUBLIC_BUILD_TIME=$BUILD_TIME
|
|
|
|
EXPOSE $PORT
|
|
CMD ["node", "build"]
|