From dcc181ffc882f6351c3e6b13a67ce44c58c8d7f0 Mon Sep 17 00:00:00 2001 From: Max Peintner Date: Tue, 15 Jul 2025 10:12:13 +0200 Subject: [PATCH] docker bake files --- login/docker-bake.hcl | 8 +++++ login/dockerfiles/login-build-base.Dockerfile | 14 +++++++++ .../login-build-base.Dockerfile.dockerignore | 14 +++++++++ login/dockerfiles/login-client.Dockerfile | 3 ++ login/dockerfiles/login-dev-base.Dockerfile | 4 ++- login/dockerfiles/login-lint.Dockerfile | 9 ++++-- login/dockerfiles/login-pnpm.Dockerfile | 5 ++- login/dockerfiles/login-standalone.Dockerfile | 31 +++++++++++-------- login/dockerfiles/login-test-unit.Dockerfile | 5 ++- .../typescript-proto-client.Dockerfile | 5 ++- 10 files changed, 78 insertions(+), 20 deletions(-) create mode 100644 login/dockerfiles/login-build-base.Dockerfile create mode 100644 login/dockerfiles/login-build-base.Dockerfile.dockerignore diff --git a/login/docker-bake.hcl b/login/docker-bake.hcl index b60fd7270a..104596648f 100644 --- a/login/docker-bake.hcl +++ b/login/docker-bake.hcl @@ -62,6 +62,14 @@ target "login-pnpm" { } } +target "login-build-base" { + inherits = ["release"] + dockerfile = "${DOCKERFILES_DIR}login-build-base.Dockerfile" + contexts = { + login-pnpm = "target:login-pnpm" + } +} + target "login-dev-base" { dockerfile = "${DOCKERFILES_DIR}login-dev-base.Dockerfile" contexts = { diff --git a/login/dockerfiles/login-build-base.Dockerfile b/login/dockerfiles/login-build-base.Dockerfile new file mode 100644 index 0000000000..7228c4e76e --- /dev/null +++ b/login/dockerfiles/login-build-base.Dockerfile @@ -0,0 +1,14 @@ +# Base image for building login components with proper dependency caching +FROM login-pnpm AS login-build-base + +# Install root workspace dependencies first (best caching) +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile --workspace-root --filter . + +# Copy all package.json files for dependency resolution +COPY packages/*/package.json ./packages/*/ +COPY apps/*/package.json ./apps/*/ + +# Install all dependencies in one layer for better caching +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile diff --git a/login/dockerfiles/login-build-base.Dockerfile.dockerignore b/login/dockerfiles/login-build-base.Dockerfile.dockerignore new file mode 100644 index 0000000000..d136f54474 --- /dev/null +++ b/login/dockerfiles/login-build-base.Dockerfile.dockerignore @@ -0,0 +1,14 @@ +# .dockerignore for login-build-base +**/.turbo +**/.next +**/node_modules +**/dist +**/build +**/*.log +**/.git +**/coverage +**/.nyc_output +**/cypress/videos +**/cypress/screenshots +**/.env.local +**/.env.*.local diff --git a/login/dockerfiles/login-client.Dockerfile b/login/dockerfiles/login-client.Dockerfile index cf44feeb0d..7771a509b6 100644 --- a/login/dockerfiles/login-client.Dockerfile +++ b/login/dockerfiles/login-client.Dockerfile @@ -1,6 +1,9 @@ FROM typescript-proto-client AS login-client +# Copy package.json first for better dependency caching COPY packages/zitadel-client/package.json ./packages/zitadel-client/ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --frozen-lockfile --workspace-root --filter ./packages/zitadel-client +# Copy source code COPY packages/zitadel-client ./packages/zitadel-client +# Build the client (equivalent to turbo build for zitadel-client) RUN cd packages/zitadel-client && pnpm build diff --git a/login/dockerfiles/login-dev-base.Dockerfile b/login/dockerfiles/login-dev-base.Dockerfile index e102d16746..0aa2b7eeab 100644 --- a/login/dockerfiles/login-dev-base.Dockerfile +++ b/login/dockerfiles/login-dev-base.Dockerfile @@ -1,3 +1,5 @@ FROM login-pnpm AS login-dev-base -RUN pnpm install --frozen-lockfile --prefer-offline --workspace-root --filter . +# Install all workspace dependencies with caching +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile --prefer-offline --workspace-root --filter . diff --git a/login/dockerfiles/login-lint.Dockerfile b/login/dockerfiles/login-lint.Dockerfile index 0c466b4cfa..3465b7cf61 100644 --- a/login/dockerfiles/login-lint.Dockerfile +++ b/login/dockerfiles/login-lint.Dockerfile @@ -1,7 +1,10 @@ FROM login-dev-base AS login-lint +# Copy linting configuration files first for better caching COPY .prettierrc .prettierignore ./ COPY apps/login/package.json apps/login/ -RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile --workspace-root --filter apps/login +RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ + pnpm install --frozen-lockfile --workspace-root --filter apps/login +# Copy source code COPY . . -RUN pnpm lint && pnpm format +# Run linting and formatting (equivalent to turbo lint) +RUN cd apps/login && pnpm lint && pnpm exec prettier --check . diff --git a/login/dockerfiles/login-pnpm.Dockerfile b/login/dockerfiles/login-pnpm.Dockerfile index bcef6d126c..4bd9fca4eb 100644 --- a/login/dockerfiles/login-pnpm.Dockerfile +++ b/login/dockerfiles/login-pnpm.Dockerfile @@ -6,5 +6,8 @@ RUN corepack enable && COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare pnpm@9 apt-get update && apt-get install -y --no-install-recommends && \ rm -rf /var/lib/apt/lists/* WORKDIR /build -COPY turbo.json .npmrc package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +# Copy package manager configuration files first for better caching +COPY .npmrc package.json pnpm-lock.yaml pnpm-workspace.yaml ./ +# turbo.json is needed for workspace structure but not for turbo commands +COPY turbo.json ./ ENTRYPOINT ["pnpm"] diff --git a/login/dockerfiles/login-standalone.Dockerfile b/login/dockerfiles/login-standalone.Dockerfile index 3754f9d80f..4868dc6d46 100644 --- a/login/dockerfiles/login-standalone.Dockerfile +++ b/login/dockerfiles/login-standalone.Dockerfile @@ -1,17 +1,22 @@ FROM login-client AS login-standalone-builder -COPY apps/login ./apps/login -RUN pnpm exec turbo prune @zitadel/login --docker -WORKDIR /build/docker -RUN cp -r ../out/json/* . +# Copy package.json files first for better dependency caching +COPY apps/login/package.json ./apps/login/ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ - pnpm install --frozen-lockfile -RUN cp -r ../out/full/* . -RUN pnpm exec turbo run build:login:standalone + pnpm install --frozen-lockfile --workspace-root --filter ./apps/login + +# Copy source code +COPY apps/login ./apps/login + +# Build the standalone application +RUN cd apps/login && \ + NEXT_PUBLIC_BASE_PATH=/ui/v2/login \ + NEXT_OUTPUT_MODE=standalone \ + pnpm build FROM scratch AS login-standalone-out -COPY --from=login-standalone-builder /build/docker/apps/login/.next/standalone / -COPY --from=login-standalone-builder /build/docker/apps/login/.next/static /apps/login/.next/static -COPY --from=login-standalone-builder /build/docker/apps/login/public /apps/login/public +COPY --from=login-standalone-builder /build/apps/login/.next/standalone / +COPY --from=login-standalone-builder /build/apps/login/.next/static /apps/login/.next/static +COPY --from=login-standalone-builder /build/apps/login/public /apps/login/public FROM node:20-alpine AS login-standalone WORKDIR /runtime @@ -21,9 +26,9 @@ RUN addgroup --system --gid 1001 nodejs && \ RUN mkdir -p /.env-file && touch /.env-file/.env && chown -R nextjs:nodejs /.env-file COPY ./scripts/entrypoint.sh ./ COPY ./scripts/healthcheck.js ./ -COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/docker/apps/login/.next/standalone ./ -COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/docker/apps/login/.next/static ./apps/login/.next/static -COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/docker/apps/login/public ./apps/login/public +COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/apps/login/.next/standalone ./ +COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/apps/login/.next/static ./apps/login/.next/static +COPY --chown=nextjs:nodejs --from=login-standalone-builder /build/apps/login/public ./apps/login/public USER nextjs ENV HOSTNAME="0.0.0.0" ENV PORT=3000 diff --git a/login/dockerfiles/login-test-unit.Dockerfile b/login/dockerfiles/login-test-unit.Dockerfile index d456a4fac4..954f9db6ad 100644 --- a/login/dockerfiles/login-test-unit.Dockerfile +++ b/login/dockerfiles/login-test-unit.Dockerfile @@ -1,6 +1,9 @@ FROM login-client AS login-test-unit +# Copy package.json first for better dependency caching COPY apps/login/package.json ./apps/login/ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --frozen-lockfile --workspace-root --filter ./apps/login +# Copy source code COPY apps/login ./apps/login -RUN pnpm test:unit:standalone +# Run unit tests (equivalent to turbo test:unit:standalone) +RUN cd apps/login && pnpm test:unit diff --git a/login/dockerfiles/typescript-proto-client.Dockerfile b/login/dockerfiles/typescript-proto-client.Dockerfile index ee0848f52d..62dd288e11 100644 --- a/login/dockerfiles/typescript-proto-client.Dockerfile +++ b/login/dockerfiles/typescript-proto-client.Dockerfile @@ -1,6 +1,9 @@ FROM login-pnpm AS typescript-proto-client +# Copy package.json first for better dependency caching COPY packages/zitadel-proto/package.json ./packages/zitadel-proto/ RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --frozen-lockfile --workspace-root --filter zitadel-proto +# Copy source code COPY packages/zitadel-proto ./packages/zitadel-proto -RUN pnpm generate +# Generate proto files (equivalent to turbo generate) +RUN cd packages/zitadel-proto && pnpm generate