Some checks are pending
Bidi Control Character Guard / bidi-control-guard (push) Waiting to run
Circular Dependency Check / Check for new circular dependencies (push) Waiting to run
Citus Migration Smoke / Combined migrations on single-node Citus (push) Waiting to run
E2E Fresh Install Tests / fresh-install-e2e (push) Waiting to run
ext-v2 guardrails / Run ext-v2 guard and ESLint (push) Waiting to run
Integration Tests / Check for relevant changes (push) Waiting to run
Integration Tests / ${{ (github.event_name == 'schedule' || github.event.inputs.suite == 'full') && 'Full integration suite' || 'Tier-1 integration subset' }} (push) Blocked by required conditions
Mobile checks / Mobile lint + typecheck (push) Waiting to run
Mobile checks / Mobile unit tests (push) Waiting to run
Mobile checks / Mobile dependency audit (report) (push) Waiting to run
Mobile checks / Mobile reproducibility checks (push) Waiting to run
Secrets guard (env backups) / Ensure no tracked env backup files (push) Waiting to run
Temporal Readiness / fast-readiness (push) Waiting to run
Temporal Readiness / docker-parity (push) Waiting to run
TypeScript Type Check / Nx affected typecheck (push) Waiting to run
Unit Tests / Skipped-test budget (push) Waiting to run
Unit Tests / Nx affected unit tests (push) Waiting to run
Unit Tests / Server unit coverage (informational) (push) Waiting to run
Validate Tenant Management Schema / Check for relevant changes (push) Waiting to run
Validate Tenant Management Schema / Validate Tenant Management Schema (push) Blocked by required conditions
EE Workflows Build Guard / ee-workflows-build-guard (push) Waiting to run
Excluded: .git, node_modules, secrets/, compose.env, assemblyscript tgz Source: /opt/alga-psa on psa.joliet.tech
155 lines
5.4 KiB
Docker
155 lines
5.4 KiB
Docker
FROM node:20.19-bullseye-slim AS builder
|
|
|
|
# Install required system dependencies
|
|
RUN apt-get update && apt-get install -y \
|
|
postgresql-client \
|
|
redis-tools \
|
|
curl \
|
|
bash \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
|
|
# Install global TypeScript and build tools
|
|
RUN npm install -g typescript @types/node tsc-alias
|
|
|
|
# Copy base configuration and root package files for workspace setup
|
|
COPY tsconfig.base.json ./
|
|
COPY tsconfig.json ./
|
|
COPY package.json package-lock.json ./
|
|
|
|
# Copy all workspace package.json files to set up the dependency tree
|
|
COPY ee/packages/workflows/package.json ./ee/packages/workflows/
|
|
COPY ee/temporal-workflows/package.json ./ee/temporal-workflows/
|
|
COPY packages/ee/package.json ./packages/ee/
|
|
COPY shared/package.json ./shared/
|
|
COPY services/workflow-worker/package.json ./services/workflow-worker/
|
|
COPY server/package.json ./server/
|
|
COPY packages/core/package.json ./packages/core/
|
|
COPY packages/authorization/package.json ./packages/authorization/
|
|
COPY packages/db/package.json ./packages/db/
|
|
COPY packages/event-bus/package.json ./packages/event-bus/
|
|
COPY packages/event-schemas/package.json ./packages/event-schemas/
|
|
COPY packages/formatting/package.json ./packages/formatting/
|
|
COPY packages/portal-shared/package.json ./packages/portal-shared/
|
|
COPY packages/storage/package.json ./packages/storage/
|
|
COPY packages/types/package.json ./packages/types/
|
|
COPY packages/ui/package.json ./packages/ui/
|
|
|
|
# Install dependencies for required workspaces (shared, worker, server, and required @alga-psa/* deps)
|
|
# Skip puppeteer Chrome download to save disk space
|
|
RUN npm config set legacy-peer-deps true && PUPPETEER_SKIP_DOWNLOAD=true npm install --include-workspace-root \
|
|
--workspace=@alga-psa/workflows \
|
|
--workspace=temporal-workflows \
|
|
--workspace=@alga-psa/ee-stubs \
|
|
--workspace=@alga-psa/shared \
|
|
--workspace=workflow-worker \
|
|
--workspace=server \
|
|
--workspace=@alga-psa/core \
|
|
--workspace=@alga-psa/authorization \
|
|
--workspace=@alga-psa/db \
|
|
--workspace=@alga-psa/event-bus \
|
|
--workspace=@alga-psa/event-schemas \
|
|
--workspace=@alga-psa/formatting \
|
|
--workspace=@alga-psa/portal-shared \
|
|
--workspace=@alga-psa/storage \
|
|
--workspace=@alga-psa/types \
|
|
--workspace=@alga-psa/validation \
|
|
--workspace=@alga-psa/email \
|
|
--workspace=@alga-psa/ui \
|
|
&& npm install --no-save openai@^4.104.0
|
|
|
|
# Copy source code for shared + server workspaces
|
|
COPY ee/packages/workflows/ ./ee/packages/workflows/
|
|
COPY ee/temporal-workflows/ ./ee/temporal-workflows/
|
|
COPY ee/server/ ./ee/server/
|
|
COPY shared/ ./shared/
|
|
COPY server/ ./server/
|
|
COPY packages/ ./packages/
|
|
|
|
# Build core workspace dependencies that export dist artifacts consumed by runtime packages.
|
|
WORKDIR /app/packages/core
|
|
RUN npm run build
|
|
|
|
WORKDIR /app/packages/types
|
|
RUN npm run build
|
|
|
|
WORKDIR /app/packages/db
|
|
RUN npm run build
|
|
# packages/db currently emits under dist/db/src when built in the worker image because
|
|
# it compiles path-mapped sources from the monorepo. Normalize the output to the
|
|
# package.json exports expected by Node at runtime.
|
|
RUN if [ -d dist/db/src ]; then cp -R dist/db/src/. dist/; fi \
|
|
&& tsc-alias -p tsconfig.json -f --resolve-full-paths
|
|
|
|
WORKDIR /app/packages/authorization
|
|
RUN npm run build
|
|
|
|
WORKDIR /app/packages/formatting
|
|
RUN npm run build
|
|
|
|
WORKDIR /app/packages/validation
|
|
RUN npm run build
|
|
|
|
WORKDIR /app/packages/storage
|
|
RUN npm run build
|
|
|
|
# Build event schemas (required by workflow streams runtime)
|
|
WORKDIR /app/packages/event-schemas
|
|
RUN npm run build
|
|
|
|
# Build event bus (required by shared)
|
|
WORKDIR /app/packages/event-bus
|
|
RUN npm run build
|
|
|
|
# Build shared workspace first (server is only referenced for type imports)
|
|
WORKDIR /app/shared
|
|
RUN npm run build
|
|
|
|
# Build workflow package dist so Temporal-authored modules can resolve runtime exports.
|
|
WORKDIR /app/ee/packages/workflows
|
|
RUN npm run build
|
|
|
|
# Build temporal workflows so workflow-worker can host authored queue polling.
|
|
WORKDIR /app/ee/temporal-workflows
|
|
RUN npm run build
|
|
|
|
# Copy workflow worker source code and build
|
|
WORKDIR /app/services/workflow-worker
|
|
COPY services/workflow-worker/ ./
|
|
RUN npm run build
|
|
|
|
# Copy and make entrypoint executable
|
|
COPY services/workflow-worker/entrypoint.sh /app/entrypoint.sh
|
|
RUN chmod +x /app/entrypoint.sh
|
|
|
|
# Trim build-time-only bulk HERE (in the builder), so the runtime COPY below
|
|
# captures the already-trimmed tree — deleting after the COPY would not reclaim
|
|
# space. server/ is type-imports-only at build; the worker's dist never loads it.
|
|
RUN rm -rf /app/server /app/node_modules/server \
|
|
&& npm cache clean --force 2>/dev/null || true
|
|
|
|
# ---------------------------------------------------------------------------
|
|
# Runtime stage: a fresh image with only what the worker needs at runtime.
|
|
# The builder above keeps every workspace's source + devDeps + intermediate
|
|
# layers (~10GB). The worker runs `node dist/.../index.js`, which resolves
|
|
# @alga-psa/* via node_modules -> packages/*/dist, and does NOT load server/
|
|
# (build-time type imports only) or the UI/build libs. Copying the final /app
|
|
# into a clean stage drops the intermediate layers; removing server/ source
|
|
# reclaims ~2GB more.
|
|
# ---------------------------------------------------------------------------
|
|
FROM node:20.19-bullseye-slim AS runtime
|
|
|
|
RUN apt-get update && apt-get install -y \
|
|
postgresql-client \
|
|
redis-tools \
|
|
curl \
|
|
bash \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
WORKDIR /app
|
|
COPY --from=builder /app /app
|
|
|
|
ENV NODE_ENV=production
|
|
ENTRYPOINT ["/app/entrypoint.sh"]
|