mirror of
https://github.com/sourcebot-dev/sourcebot.git
synced 2025-12-12 20:35:24 +00:00
132 lines
4.6 KiB
Docker
132 lines
4.6 KiB
Docker
|
|
# ------ Global scope variables ------
|
||
|
|
ARG NEXT_PUBLIC_SOURCEBOT_VERSION
|
||
|
|
ARG NEXT_PUBLIC_SENTRY_BACKEND_DSN
|
||
|
|
ARG SENTRY_ORG
|
||
|
|
ARG SENTRY_BACKEND_PROJECT
|
||
|
|
ARG SENTRY_SMUAT
|
||
|
|
|
||
|
|
FROM node:20-alpine3.19 AS node-alpine
|
||
|
|
FROM golang:1.23.4-alpine3.19 AS go-alpine
|
||
|
|
|
||
|
|
# ------ Build Zoekt ------
|
||
|
|
FROM go-alpine AS zoekt-builder
|
||
|
|
RUN apk add --no-cache ca-certificates
|
||
|
|
WORKDIR /zoekt
|
||
|
|
COPY vendor/zoekt/go.mod vendor/zoekt/go.sum ./
|
||
|
|
RUN go mod download
|
||
|
|
COPY vendor/zoekt ./
|
||
|
|
RUN CGO_ENABLED=0 GOOS=linux go build -o /cmd/ ./cmd/...
|
||
|
|
|
||
|
|
# ------ Build shared libraries ------
|
||
|
|
FROM node-alpine AS shared-libs-builder
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
COPY package.json yarn.lock* .yarnrc.yml ./
|
||
|
|
COPY .yarn ./.yarn
|
||
|
|
COPY ./packages/db ./packages/db
|
||
|
|
COPY ./packages/schemas ./packages/schemas
|
||
|
|
COPY ./packages/crypto ./packages/crypto
|
||
|
|
COPY ./packages/error ./packages/error
|
||
|
|
COPY ./packages/logger ./packages/logger
|
||
|
|
COPY ./packages/shared ./packages/shared
|
||
|
|
|
||
|
|
RUN yarn workspace @sourcebot/db install
|
||
|
|
RUN yarn workspace @sourcebot/schemas install
|
||
|
|
RUN yarn workspace @sourcebot/crypto install
|
||
|
|
RUN yarn workspace @sourcebot/error install
|
||
|
|
RUN yarn workspace @sourcebot/logger install
|
||
|
|
RUN yarn workspace @sourcebot/shared install
|
||
|
|
|
||
|
|
# ------ Build Backend ------
|
||
|
|
FROM node-alpine AS backend-builder
|
||
|
|
ENV SKIP_ENV_VALIDATION=1
|
||
|
|
|
||
|
|
# Set environment variables
|
||
|
|
ARG NEXT_PUBLIC_SOURCEBOT_VERSION
|
||
|
|
ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION
|
||
|
|
ARG SENTRY_ORG
|
||
|
|
ENV SENTRY_ORG=$SENTRY_ORG
|
||
|
|
ARG SENTRY_BACKEND_PROJECT
|
||
|
|
ENV SENTRY_BACKEND_PROJECT=$SENTRY_BACKEND_PROJECT
|
||
|
|
ARG SENTRY_SMUAT
|
||
|
|
ENV SENTRY_SMUAT=$SENTRY_SMUAT
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
|
||
|
|
COPY package.json yarn.lock* .yarnrc.yml ./
|
||
|
|
COPY .yarn ./.yarn
|
||
|
|
COPY ./schemas ./schemas
|
||
|
|
COPY ./packages/backend ./packages/backend
|
||
|
|
COPY --from=shared-libs-builder /app/node_modules ./node_modules
|
||
|
|
COPY --from=shared-libs-builder /app/packages/db ./packages/db
|
||
|
|
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
|
||
|
|
COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto
|
||
|
|
COPY --from=shared-libs-builder /app/packages/error ./packages/error
|
||
|
|
COPY --from=shared-libs-builder /app/packages/logger ./packages/logger
|
||
|
|
COPY --from=shared-libs-builder /app/packages/shared ./packages/shared
|
||
|
|
|
||
|
|
RUN yarn workspace @sourcebot/backend install
|
||
|
|
RUN yarn workspace @sourcebot/backend build
|
||
|
|
|
||
|
|
# Upload source maps to Sentry if we have the necessary build-time args
|
||
|
|
RUN if [ -n "$SENTRY_SMUAT" ] && [ -n "$SENTRY_ORG" ] && [ -n "$SENTRY_BACKEND_PROJECT" ] && [ -n "$NEXT_PUBLIC_SOURCEBOT_VERSION" ]; then \
|
||
|
|
apk add --no-cache curl; \
|
||
|
|
curl -sL https://sentry.io/get-cli/ | sh; \
|
||
|
|
sentry-cli login --auth-token $SENTRY_SMUAT; \
|
||
|
|
sentry-cli sourcemaps inject --org $SENTRY_ORG --project $SENTRY_BACKEND_PROJECT --release $NEXT_PUBLIC_SOURCEBOT_VERSION ./packages/backend/dist; \
|
||
|
|
sentry-cli sourcemaps upload --org $SENTRY_ORG --project $SENTRY_BACKEND_PROJECT --release $NEXT_PUBLIC_SOURCEBOT_VERSION ./packages/backend/dist; \
|
||
|
|
fi
|
||
|
|
|
||
|
|
ENV SKIP_ENV_VALIDATION=0
|
||
|
|
|
||
|
|
# ------ Runtime ------
|
||
|
|
FROM node-alpine AS runner
|
||
|
|
|
||
|
|
# Set environment variables
|
||
|
|
ARG NEXT_PUBLIC_SOURCEBOT_VERSION
|
||
|
|
ENV NEXT_PUBLIC_SOURCEBOT_VERSION=$NEXT_PUBLIC_SOURCEBOT_VERSION
|
||
|
|
ARG NEXT_PUBLIC_SENTRY_BACKEND_DSN
|
||
|
|
ENV NEXT_PUBLIC_SENTRY_BACKEND_DSN=$NEXT_PUBLIC_SENTRY_BACKEND_DSN
|
||
|
|
|
||
|
|
WORKDIR /app
|
||
|
|
ENV NODE_ENV=production
|
||
|
|
ENV SRC_TENANT_ENFORCEMENT_MODE=strict
|
||
|
|
ENV SOURCEBOT_PUBLIC_KEY_PATH=/app/public.pem
|
||
|
|
ENV SOURCEBOT_LOG_LEVEL=info
|
||
|
|
|
||
|
|
# Install system dependencies
|
||
|
|
RUN apk add --no-cache git ca-certificates bind-tools tini jansson wget curl perl jq openssl util-linux unzip
|
||
|
|
|
||
|
|
# Configure zoekt and ctags
|
||
|
|
COPY vendor/zoekt/install-ctags-alpine.sh .
|
||
|
|
RUN ./install-ctags-alpine.sh && rm install-ctags-alpine.sh
|
||
|
|
|
||
|
|
# Copy zoekt binaries (backend specifically needs these for git indexing)
|
||
|
|
COPY --from=zoekt-builder \
|
||
|
|
/cmd/zoekt-git-index \
|
||
|
|
/cmd/zoekt-indexserver \
|
||
|
|
/cmd/zoekt-mirror-github \
|
||
|
|
/cmd/zoekt-mirror-gitiles \
|
||
|
|
/cmd/zoekt-mirror-bitbucket-server \
|
||
|
|
/cmd/zoekt-mirror-gitlab \
|
||
|
|
/cmd/zoekt-mirror-gerrit \
|
||
|
|
/cmd/zoekt-webserver \
|
||
|
|
/cmd/zoekt-index \
|
||
|
|
/usr/local/bin/
|
||
|
|
|
||
|
|
# Copy application files
|
||
|
|
COPY package.json yarn.lock* .yarnrc.yml public.pem ./
|
||
|
|
COPY .yarn ./.yarn
|
||
|
|
|
||
|
|
COPY --from=backend-builder /app/node_modules ./node_modules
|
||
|
|
COPY --from=backend-builder /app/packages/backend ./packages/backend
|
||
|
|
COPY --from=shared-libs-builder /app/packages/db ./packages/db
|
||
|
|
COPY --from=shared-libs-builder /app/packages/schemas ./packages/schemas
|
||
|
|
COPY --from=shared-libs-builder /app/packages/crypto ./packages/crypto
|
||
|
|
COPY --from=shared-libs-builder /app/packages/error ./packages/error
|
||
|
|
COPY --from=shared-libs-builder /app/packages/logger ./packages/logger
|
||
|
|
COPY --from=shared-libs-builder /app/packages/shared ./packages/shared
|
||
|
|
|
||
|
|
ENTRYPOINT ["/sbin/tini", "--"]
|
||
|
|
CMD ["node", "./packages/backend/dist/index.js"]
|