chore: harden webapp docker image (#3845)
Hardens the webapp Docker image and adds a CVE scan of each published image. - Base image `bullseye-slim` → `bookworm-slim` (Debian 12), pinned by digest. Adds `apt-get upgrade` + `--no-install-recommends` + apt-cache cleanup across the build stages so OS packages are patched at build time. - Moves the `react-email` CLI to `devDependencies` in `internal-packages/emails` — only the `email dev` preview script uses it; the runtime render path is `@react-email/render` + `@react-email/components`. This also drops the bundled `esbuild` binary from the production image. - Bumps `goose` v3.26.0 → v3.27.1 and its Go builder image 1.23 → 1.26. - Adds a reusable Trivy image-scan workflow wired into `publish.yml`, so every published image (main builds and releases) is scanned for OS-package CVEs right after it's pushed to GHCR. Report-only (writes to the run summary), runs alongside the worker publishes so it never blocks a deploy. Verified locally: the image builds clean on the new base, and `@react-email/render` carries no `esbuild` dependency so email rendering is unaffected.
This commit is contained in:
+6
-6
@@ -1,7 +1,7 @@
|
||||
ARG NODE_IMAGE=node:20.20.2-bullseye-slim@sha256:65ef49f7d24aefd012a7fc6f9a2b734bcc19e424976a81f60c86b47266ef5b28
|
||||
ARG NODE_IMAGE=node:20.20.2-bookworm-slim@sha256:2cf067cfed83d5ea958367df9f966191a942351a2df77d6f0193e162b5febfc0
|
||||
|
||||
FROM golang:1.23-alpine AS goose_builder
|
||||
RUN go install github.com/pressly/goose/v3/cmd/goose@v3.26.0
|
||||
FROM golang:1.26-alpine AS goose_builder
|
||||
RUN go install github.com/pressly/goose/v3/cmd/goose@v3.27.1
|
||||
|
||||
FROM ${NODE_IMAGE} AS pruner
|
||||
|
||||
@@ -13,7 +13,7 @@ RUN find . -name "node_modules" -type d -prune -exec rm -rf '{}' +
|
||||
|
||||
# Base strategy to have layer caching
|
||||
FROM ${NODE_IMAGE} AS base
|
||||
RUN apt-get update && apt-get install -y openssl dumb-init
|
||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends openssl dumb-init && rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /triggerdotdev
|
||||
COPY --chown=node:node .gitignore .gitignore
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/out/json/ .
|
||||
@@ -43,7 +43,7 @@ RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install
|
||||
## Builder (builds the webapp)
|
||||
FROM base AS builder
|
||||
# This is needed for the sentry-cli binary while building the webapp
|
||||
RUN apt-get update && apt-get install -y openssl dumb-init ca-certificates
|
||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends openssl dumb-init ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /triggerdotdev
|
||||
# Corepack is used to install pnpm with the exact version from packageManager
|
||||
RUN corepack enable && corepack prepare pnpm@10.33.2 --activate
|
||||
@@ -75,7 +75,7 @@ RUN --mount=type=secret,id=sentry_auth_token \
|
||||
|
||||
# Runner
|
||||
FROM ${NODE_IMAGE} AS runner
|
||||
RUN apt-get update && apt-get install -y openssl netcat-openbsd ca-certificates
|
||||
RUN apt-get update && apt-get upgrade -y && apt-get install -y --no-install-recommends openssl netcat-openbsd ca-certificates && rm -rf /var/lib/apt/lists/*
|
||||
WORKDIR /triggerdotdev
|
||||
ENV NODE_ENV=production
|
||||
|
||||
|
||||
Reference in New Issue
Block a user