chore: import upstream snapshot with attribution
This commit is contained in:
@@ -0,0 +1,129 @@
|
||||
ARG NODE_IMAGE=node:22.23.1-bookworm-slim@sha256:813a7480f28fdadac1f7f5c824bcdad435b5bc1322a5968bbbdef8d058f9dff4
|
||||
|
||||
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
|
||||
|
||||
WORKDIR /triggerdotdev
|
||||
|
||||
COPY --chown=node:node . .
|
||||
RUN npx -q turbo@2.10.0 prune --scope=webapp --docker
|
||||
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 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/ .
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/out/pnpm-lock.yaml ./pnpm-lock.yaml
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/out/pnpm-workspace.yaml ./pnpm-workspace.yaml
|
||||
COPY --chown=node:node patches ./patches
|
||||
|
||||
## Dev deps
|
||||
FROM base AS dev-deps
|
||||
WORKDIR /triggerdotdev
|
||||
# Corepack is used to install pnpm with the exact version from packageManager
|
||||
RUN corepack enable && corepack prepare pnpm@10.33.2 --activate
|
||||
ENV NODE_ENV=development
|
||||
RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install --no-frozen-lockfile
|
||||
# Generate Prisma client here where all deps are installed
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/internal-packages/database/prisma/schema.prisma /triggerdotdev/internal-packages/database/prisma/schema.prisma
|
||||
RUN pnpx prisma@6.14.0 generate --schema /triggerdotdev/internal-packages/database/prisma/schema.prisma
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/internal-packages/run-ops-database/prisma/schema.prisma /triggerdotdev/internal-packages/run-ops-database/prisma/schema.prisma
|
||||
RUN pnpx prisma@6.14.0 generate --schema /triggerdotdev/internal-packages/run-ops-database/prisma/schema.prisma
|
||||
|
||||
## Production deps
|
||||
FROM base AS production-deps
|
||||
WORKDIR /triggerdotdev
|
||||
# Corepack is used to install pnpm with the exact version from packageManager
|
||||
RUN corepack enable && corepack prepare pnpm@10.33.2 --activate
|
||||
ENV NODE_ENV=production
|
||||
RUN --mount=type=cache,id=pnpm,target=/root/.local/share/pnpm/store pnpm install --prod --no-frozen-lockfile
|
||||
|
||||
## 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 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
|
||||
|
||||
ARG SENTRY_RELEASE
|
||||
ARG SENTRY_ORG
|
||||
ARG SENTRY_PROJECT
|
||||
ENV SENTRY_RELEASE=${SENTRY_RELEASE} \
|
||||
SENTRY_ORG=${SENTRY_ORG} \
|
||||
SENTRY_PROJECT=${SENTRY_PROJECT}
|
||||
|
||||
# Goose and schemas
|
||||
COPY --from=goose_builder /go/bin/goose /usr/local/bin/goose
|
||||
RUN chmod +x /usr/local/bin/goose
|
||||
COPY --chown=node:node internal-packages/clickhouse/schema /triggerdotdev/internal-packages/clickhouse/schema
|
||||
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/out/full/ .
|
||||
COPY --from=dev-deps --chown=node:node /triggerdotdev/ .
|
||||
COPY --chown=node:node turbo.json turbo.json
|
||||
COPY --chown=node:node docker/scripts ./scripts
|
||||
RUN chmod +x ./scripts/wait-for-it.sh
|
||||
RUN chmod +x ./scripts/entrypoint.sh
|
||||
COPY --chown=node:node .configs/tsconfig.base.json .configs/tsconfig.base.json
|
||||
COPY --chown=node:node scripts/updateVersion.ts scripts/updateVersion.ts
|
||||
COPY --chown=node:node scripts/bundleSdkDocs.ts scripts/bundleSdkDocs.ts
|
||||
COPY --chown=node:node scripts/retry-prisma-generate.mjs scripts/retry-prisma-generate.mjs
|
||||
RUN pnpm run generate
|
||||
RUN --mount=type=secret,id=sentry_auth_token \
|
||||
SENTRY_AUTH_TOKEN=$(cat /run/secrets/sentry_auth_token) \
|
||||
pnpm run build --filter=webapp...
|
||||
|
||||
# Runner
|
||||
FROM ${NODE_IMAGE} AS runner
|
||||
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
|
||||
|
||||
COPY --from=base /usr/bin/dumb-init /usr/bin/dumb-init
|
||||
COPY --from=pruner --chown=node:node /triggerdotdev/out/full/ .
|
||||
COPY --from=production-deps --chown=node:node /triggerdotdev .
|
||||
# Copy generated Prisma client from dev-deps
|
||||
COPY --from=dev-deps --chown=node:node /triggerdotdev/internal-packages/database/generated ./internal-packages/database/generated
|
||||
# Run-ops Prisma client (query engine + client). Only constructed when the split is enabled,
|
||||
# but the image must carry it so a split-on deployment doesn't hit a missing query engine.
|
||||
COPY --from=dev-deps --chown=node:node /triggerdotdev/internal-packages/run-ops-database/generated ./internal-packages/run-ops-database/generated
|
||||
COPY --from=builder --chown=node:node /triggerdotdev/apps/webapp/build/server.js ./apps/webapp/build/server.js
|
||||
COPY --from=builder --chown=node:node /triggerdotdev/apps/webapp/build ./apps/webapp/build
|
||||
COPY --from=builder --chown=node:node /triggerdotdev/apps/webapp/public ./apps/webapp/public
|
||||
COPY --from=builder --chown=node:node /triggerdotdev/scripts ./scripts
|
||||
|
||||
# Goose and schemas
|
||||
COPY --from=builder /usr/local/bin/goose /usr/local/bin/goose
|
||||
COPY --from=builder --chown=node:node /triggerdotdev/internal-packages/clickhouse/schema /triggerdotdev/internal-packages/clickhouse/schema
|
||||
|
||||
# Build info
|
||||
ARG BUILD_APP_VERSION
|
||||
ARG BUILD_GIT_SHA
|
||||
ARG BUILD_GIT_REF_NAME
|
||||
ARG BUILD_TIMESTAMP_SECONDS
|
||||
ARG BUILD_TIMESTAMP_RFC3339
|
||||
ENV BUILD_APP_VERSION=${BUILD_APP_VERSION} \
|
||||
BUILD_GIT_SHA=${BUILD_GIT_SHA} \
|
||||
BUILD_GIT_REF_NAME=${BUILD_GIT_REF_NAME} \
|
||||
BUILD_TIMESTAMP_SECONDS=${BUILD_TIMESTAMP_SECONDS}
|
||||
|
||||
LABEL org.opencontainers.image.source="https://github.com/triggerdotdev/trigger.dev" \
|
||||
org.opencontainers.image.revision="${BUILD_GIT_SHA}" \
|
||||
org.opencontainers.image.version="${BUILD_APP_VERSION}" \
|
||||
org.opencontainers.image.created="${BUILD_TIMESTAMP_RFC3339}"
|
||||
|
||||
EXPOSE 3000
|
||||
|
||||
# Add global pnpm shims and install pnpm during build (root user)
|
||||
RUN corepack enable && corepack prepare pnpm@10.33.2 --activate
|
||||
|
||||
USER node
|
||||
|
||||
# Ensure pnpm is installed during build and not silently downloaded at runtime (node user)
|
||||
RUN corepack prepare pnpm@10.33.2 --activate
|
||||
|
||||
CMD ["./scripts/entrypoint.sh"]
|
||||
Reference in New Issue
Block a user