diff --git a/login/docker-bake.hcl b/login/docker-bake.hcl index 104596648f..c7bc575114 100644 --- a/login/docker-bake.hcl +++ b/login/docker-bake.hcl @@ -11,25 +11,25 @@ variable "DOCKERFILES_DIR" { # By default the platforms property is empty, so images are only built for the current bake runtime platform. target "release" {} -# typescript-proto-client is used to generate the client code for the login service. -# It is not login-prefixed, so it is easily extendable. +# login-zitadel-proto generates the @zitadel/proto package from protobuf files. +# It generates TypeScript definitions from protobuf files. # To extend this bake-file.hcl, set the context of all login-prefixed targets to a different directory. # For example docker bake --file login/docker-bake.hcl --file docker-bake.hcl --set login-*.context=./login/ # The zitadel repository uses this to generate the client and the mock server from local proto files. -target "typescript-proto-client" { +target "login-zitadel-proto" { inherits = ["release"] - dockerfile = "${DOCKERFILES_DIR}typescript-proto-client.Dockerfile" + dockerfile = "${DOCKERFILES_DIR}login-zitadel-proto.Dockerfile" contexts = { # We directly generate and download the client server-side with buf, so we don't need the proto files login-pnpm = "target:login-pnpm" } } -# We prefix the target with login- so we can reuse the writing of protos if we overwrite the typescript-proto-client target. -target "login-typescript-proto-client-out" { - dockerfile = "${DOCKERFILES_DIR}login-typescript-proto-client-out.Dockerfile" +# We prefix the target with login- so we can reuse the writing of protos if we overwrite the login-zitadel-proto target. +target "login-zitadel-proto-out" { + dockerfile = "${DOCKERFILES_DIR}login-zitadel-proto-out.Dockerfile" contexts = { - typescript-proto-client = "target:typescript-proto-client" + login-zitadel-proto = "target:login-zitadel-proto" } output = [ "type=local,dest=${LOGIN_DIR}packages/zitadel-proto" @@ -87,16 +87,16 @@ target "login-lint" { target "login-test-unit" { dockerfile = "${DOCKERFILES_DIR}login-test-unit.Dockerfile" contexts = { - login-client = "target:login-client" + login-zitadel-client = "target:login-zitadel-client" } } -target "login-client" { +target "login-zitadel-client" { inherits = ["release"] - dockerfile = "${DOCKERFILES_DIR}login-client.Dockerfile" + dockerfile = "${DOCKERFILES_DIR}login-zitadel-client.Dockerfile" contexts = { - login-pnpm = "target:login-pnpm" - typescript-proto-client = "target:typescript-proto-client" + login-build-base = "target:login-build-base" + login-zitadel-proto = "target:login-zitadel-proto" } } @@ -154,7 +154,7 @@ target "login-standalone" { ] dockerfile = "${DOCKERFILES_DIR}login-standalone.Dockerfile" contexts = { - login-client = "target:login-client" + login-zitadel-client = "target:login-zitadel-client" } } diff --git a/login/dockerfiles/login-client.Dockerfile b/login/dockerfiles/login-client.Dockerfile deleted file mode 100644 index 7771a509b6..0000000000 --- a/login/dockerfiles/login-client.Dockerfile +++ /dev/null @@ -1,9 +0,0 @@ -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-standalone.Dockerfile b/login/dockerfiles/login-standalone.Dockerfile index 4868dc6d46..0d2885a999 100644 --- a/login/dockerfiles/login-standalone.Dockerfile +++ b/login/dockerfiles/login-standalone.Dockerfile @@ -1,4 +1,4 @@ -FROM login-client AS login-standalone-builder +FROM login-zitadel-client AS login-standalone-builder # 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 \ diff --git a/login/dockerfiles/login-test-acceptance.Dockerfile b/login/dockerfiles/login-test-acceptance.Dockerfile index 7052484779..d5a758b7e5 100644 --- a/login/dockerfiles/login-test-acceptance.Dockerfile +++ b/login/dockerfiles/login-test-acceptance.Dockerfile @@ -1,8 +1,14 @@ FROM login-pnpm AS login-test-acceptance-dependencies + +# Install dependencies with proper caching COPY ./apps/login-test-acceptance/package.json ./apps/login-test-acceptance/package.json RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --frozen-lockfile --filter=login-test-acceptance && \ cd apps/login-test-acceptance && \ pnpm exec playwright install --with-deps chromium + +# Copy source code (separate layer for better caching) COPY ./apps/login-test-acceptance ./apps/login-test-acceptance + +# Run acceptance tests (equivalent to turbo test:acceptance) CMD ["bash", "-c", "cd apps/login-test-acceptance && pnpm test:acceptance test"] diff --git a/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore b/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore index cba55ae91e..ef34e32251 100644 --- a/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore +++ b/login/dockerfiles/login-test-acceptance.Dockerfile.dockerignore @@ -1,5 +1,23 @@ +# .dockerignore for login-test-acceptance * !/apps/login-test-acceptance/*.json !/apps/login-test-acceptance/*.ts !/apps/login-test-acceptance/zitadel.yaml !/apps/login-test-acceptance/tests + +# Exclude turbo cache and other build artifacts +**/.turbo +**/.next +**/node_modules +**/dist +**/build +**/*.log +**/.git +**/coverage +**/.nyc_output +**/cypress/videos +**/cypress/screenshots +**/playwright-report +**/test-results +**/.env.local +**/.env.*.local diff --git a/login/dockerfiles/login-test-integration.Dockerfile b/login/dockerfiles/login-test-integration.Dockerfile index 0b55dc2b1a..2d0942943a 100644 --- a/login/dockerfiles/login-test-integration.Dockerfile +++ b/login/dockerfiles/login-test-integration.Dockerfile @@ -1,11 +1,22 @@ FROM login-pnpm AS login-test-integration-dependencies + +# Install dependencies with proper caching COPY ./apps/login-test-integration/package.json ./apps/login-test-integration/package.json RUN --mount=type=cache,id=pnpm,target=/pnpm/store \ pnpm install --frozen-lockfile --filter=login-test-integration + FROM cypress/factory:5.10.0 AS login-test-integration WORKDIR /opt/app + +# Copy built dependencies COPY --from=login-test-integration-dependencies /build/apps/login-test-integration . + +# Install Cypress with caching RUN npm install cypress RUN npx cypress install + +# Copy source code (separate layer for better caching) COPY ./apps/login-test-integration . + +# Run integration tests (equivalent to turbo test:integration) CMD ["npx", "cypress", "run"] diff --git a/login/dockerfiles/login-test-unit.Dockerfile b/login/dockerfiles/login-test-unit.Dockerfile index 954f9db6ad..7607265f4e 100644 --- a/login/dockerfiles/login-test-unit.Dockerfile +++ b/login/dockerfiles/login-test-unit.Dockerfile @@ -1,4 +1,4 @@ -FROM login-client AS login-test-unit +FROM login-zitadel-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 \ diff --git a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile b/login/dockerfiles/login-typescript-proto-client-out.Dockerfile deleted file mode 100644 index 3aa3c9d7d6..0000000000 --- a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile +++ /dev/null @@ -1,5 +0,0 @@ -FROM scratch AS typescript-proto-client-out -COPY --from=typescript-proto-client /build/packages/zitadel-proto/zitadel /zitadel -COPY --from=typescript-proto-client /build/packages/zitadel-proto/google /google -COPY --from=typescript-proto-client /build/packages/zitadel-proto/protoc-gen-openapiv2 /protoc-gen-openapiv2 -COPY --from=typescript-proto-client /build/packages/zitadel-proto/validate /validate diff --git a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile.dockerignore b/login/dockerfiles/login-typescript-proto-client-out.Dockerfile.dockerignore deleted file mode 100644 index 72e8ffc0db..0000000000 --- a/login/dockerfiles/login-typescript-proto-client-out.Dockerfile.dockerignore +++ /dev/null @@ -1 +0,0 @@ -* diff --git a/login/dockerfiles/login-zitadel-client.Dockerfile b/login/dockerfiles/login-zitadel-client.Dockerfile new file mode 100644 index 0000000000..c814b96147 --- /dev/null +++ b/login/dockerfiles/login-zitadel-client.Dockerfile @@ -0,0 +1,18 @@ +FROM login-build-base AS login-client-dependencies +# 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 + +FROM login-zitadel-proto AS login-zitadel-client +# Copy dependencies from build base +COPY --from=login-client-dependencies /build/node_modules ./node_modules +COPY --from=login-client-dependencies /build/packages/zitadel-client/node_modules ./packages/zitadel-client/node_modules + +# Copy generated proto files (@zitadel/proto package) +COPY --from=login-zitadel-proto /build/packages/zitadel-proto ./packages/zitadel-proto + +# Copy source code +COPY packages/zitadel-client ./packages/zitadel-client +# Build the @zitadel/client package (equivalent to turbo build for zitadel-client) +RUN cd packages/zitadel-client && pnpm build diff --git a/login/dockerfiles/login-client.Dockerfile.dockerignore b/login/dockerfiles/login-zitadel-client.Dockerfile.dockerignore similarity index 100% rename from login/dockerfiles/login-client.Dockerfile.dockerignore rename to login/dockerfiles/login-zitadel-client.Dockerfile.dockerignore diff --git a/login/dockerfiles/login-zitadel-proto-out.Dockerfile b/login/dockerfiles/login-zitadel-proto-out.Dockerfile new file mode 100644 index 0000000000..2abab8f0b8 --- /dev/null +++ b/login/dockerfiles/login-zitadel-proto-out.Dockerfile @@ -0,0 +1,5 @@ +FROM scratch AS login-zitadel-proto-out +COPY --from=login-zitadel-proto /build/packages/zitadel-proto/zitadel /zitadel +COPY --from=login-zitadel-proto /build/packages/zitadel-proto/google /google +COPY --from=login-zitadel-proto /build/packages/zitadel-proto/protoc-gen-openapiv2 /protoc-gen-openapiv2 +COPY --from=login-zitadel-proto /build/packages/zitadel-proto/validate /validate diff --git a/login/dockerfiles/typescript-proto-client.Dockerfile b/login/dockerfiles/login-zitadel-proto.Dockerfile similarity index 78% rename from login/dockerfiles/typescript-proto-client.Dockerfile rename to login/dockerfiles/login-zitadel-proto.Dockerfile index 62dd288e11..17b103ed4e 100644 --- a/login/dockerfiles/typescript-proto-client.Dockerfile +++ b/login/dockerfiles/login-zitadel-proto.Dockerfile @@ -1,9 +1,9 @@ -FROM login-pnpm AS typescript-proto-client +FROM login-pnpm AS login-zitadel-proto # 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 -# Generate proto files (equivalent to turbo generate) +# Generate @zitadel/proto package - equivalent to turbo generate RUN cd packages/zitadel-proto && pnpm generate diff --git a/login/dockerfiles/typescript-proto-client.Dockerfile.dockerignore b/login/dockerfiles/login-zitadel-proto.Dockerfile.dockerignore similarity index 100% rename from login/dockerfiles/typescript-proto-client.Dockerfile.dockerignore rename to login/dockerfiles/login-zitadel-proto.Dockerfile.dockerignore