diff --git a/.devcontainer/Dockerfile b/.devcontainer/Dockerfile deleted file mode 100644 index f802e8619f..0000000000 --- a/.devcontainer/Dockerfile +++ /dev/null @@ -1,11 +0,0 @@ -FROM mcr.microsoft.com/devcontainers/base:ubuntu AS dev - -RUN apt-get update - -RUN apt-get --no-install-recommends install -y \ - libgtk2.0-0t64 libgtk-3-0t64 libgbm-dev libnotify-dev libnss3 libxss1 libasound2t64 libxtst6 xauth xvfb && \ - # clean up - rm -rf /var/lib/apt/lists/* && \ - apt-get clean - -RUN pnpm install --recursive --frozen-lockfile . \ No newline at end of file diff --git a/.devcontainer/base/Dockerfile b/.devcontainer/base/Dockerfile new file mode 100644 index 0000000000..119594bc6f --- /dev/null +++ b/.devcontainer/base/Dockerfile @@ -0,0 +1,16 @@ +FROM mcr.microsoft.com/devcontainers/typescript-node:20-bookworm + +ENV SHELL=/bin/bash \ + DEBIAN_FRONTEND=noninteractive \ + LANG=C.UTF-8 \ + LC_ALL=C.UTF-8 \ + CI=1 \ + PNPM_HOME=/home/node/.local/share/pnpm \ + PATH=/home/node/.local/share/pnpm:$PATH + + +RUN apt-get update && \ + apt-get --no-install-recommends install -y \ + libgtk2.0-0 libgtk-3-0 libgbm-dev libnotify-dev libnss3 libxss1 libasound2 libxtst6 xauth xvfb && \ + apt-get clean && \ + corepack enable && COREPACK_ENABLE_DOWNLOAD_PROMPT=0 corepack prepare pnpm@9.1.2 --activate diff --git a/.devcontainer/devcontainer.json b/.devcontainer/base/devcontainer.json similarity index 77% rename from .devcontainer/devcontainer.json rename to .devcontainer/base/devcontainer.json index f1a504b65a..b09e82e8ca 100644 --- a/.devcontainer/devcontainer.json +++ b/.devcontainer/base/devcontainer.json @@ -8,11 +8,8 @@ "ghcr.io/devcontainers/features/go:1": { "version": "1.24" }, - "ghcr.io/devcontainers/features/node:1": { - "version": "lts/iron" - }, "ghcr.io/guiyomh/features/golangci-lint:0": {}, - "ghcr.io/jungaretti/features/make:1": {}, + "ghcr.io/jungaretti/features/make:1": {} }, "forwardPorts": [ 3000, @@ -20,7 +17,8 @@ 4200, 8080 ], - "onCreateCommand": "npm install -g sass@1.64.1", + "remoteUser": "node", + "onCreateCommand": "pnpm install -g sass@1.64.1 && pnpm install --frozen-lockfile --recursive", "customizations": { "jetbrains": { "settings": { diff --git a/.devcontainer/docker-compose.yml b/.devcontainer/base/docker-compose.yml similarity index 84% rename from .devcontainer/docker-compose.yml rename to .devcontainer/base/docker-compose.yml index ab1b3617ce..9e0cfede8c 100644 --- a/.devcontainer/docker-compose.yml +++ b/.devcontainer/base/docker-compose.yml @@ -1,10 +1,12 @@ services: devcontainer: + container_name: devcontainer + user: node build: context: . volumes: - - ..:/workspaces:cached + - ../../:/workspaces:cached - /tmp/.X11-unix:/tmp/.X11-unix:cached - ~/.cache:/home/vscode/.cache:delegated command: sleep infinity @@ -34,7 +36,7 @@ services: mock-zitadel: container_name: mock-zitadel build: - context: ../apps/login/packages/integration/core-mock + context: ../../apps/login/packages/integration/core-mock ports: - 22220:22220 - 22222:22222 @@ -42,10 +44,7 @@ services: login-integration: container_name: login-integration image: "${LOGIN_TAG:-ghcr.io/zitadel/zitadel-login:v4.0.0-rc.2}" - env_file: - - fileName: ../apps/login/apps/login/.env.test - volumes: - - ../apps/login/apps/login/.env.test:/env-files/.env:cached + env_file: ../../apps/login/apps/login/.env.test network_mode: service:devcontainer environment: PORT: 3001 @@ -58,8 +57,8 @@ services: container_name: zitadel command: 'start-from-init --masterkey "MasterkeyNeedsToHave32Characters" --config /zitadel.yaml --steps /zitadel.yaml' volumes: - - ../apps/login/packages/acceptance/pat:/pat:delegated - - ../apps/login/packages/acceptance/zitadel.yaml:/zitadel.yaml:cached + - ../../apps/login/packages/acceptance/pat:/pat:delegated + - ../../apps/login/packages/acceptance/zitadel.yaml:/zitadel.yaml:cached network_mode: service:devcontainer healthcheck: test: @@ -76,7 +75,7 @@ services: container_name: configure-login restart: no build: - context: ../apps/login/packages/acceptance/setup + context: ../../apps/login/packages/acceptance/setup dockerfile: ../go-command.Dockerfile entrypoint: "./setup.sh" network_mode: service:devcontainer @@ -91,18 +90,18 @@ services: ZITADEL_API_DOMAIN: localhost ZITADEL_ADMIN_USER: zitadel-admin@zitadel.localhost volumes: - - ../apps/login/packages/acceptance/pat:/pat:cached # Read the PAT file from zitadels setup - - ../apps/login/apps/login:/login-env:delegated # Write the environment variables file for the login + - ../../apps/login/packages/acceptance/pat:/pat:cached # Read the PAT file from zitadels setup + - ../../apps/login/apps/login:/login-env:delegated # Write the environment variables file for the login depends_on: zitadel: condition: "service_healthy" - login: + login-acceptance: container_name: login image: "${LOGIN_TAG:-ghcr.io/zitadel/zitadel-login:v4.0.0-rc.2}" network_mode: service:devcontainer volumes: - - ../apps/login/apps/login/.env.test.local:/env-files/.env:cached + - ../../apps/login/apps/login/.env.test.local:/env-files/.env:cached depends_on: configure-login: condition: service_completed_successfully @@ -110,7 +109,7 @@ services: mock-notifications: container_name: mock-notifications build: - context: ../apps/login/packages/acceptance/sink + context: ../../apps/login/packages/acceptance/sink dockerfile: ../go-command.Dockerfile args: - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} @@ -134,7 +133,7 @@ services: mock-oidcrp: container_name: mock-oidcrp build: - context: ../apps/login/packages/acceptance/oidcrp + context: ../../apps/login/packages/acceptance/oidcrp dockerfile: ../go-command.Dockerfile args: - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} @@ -149,7 +148,7 @@ services: PORT: '8000' SCOPES: 'openid profile email' volumes: - - ../apps/login/packages/acceptance/pat:/pat:cached + - ../../apps/login/packages/acceptance/pat:/pat:cached depends_on: configure-login: condition: "service_completed_successfully" @@ -157,7 +156,7 @@ services: # mock-oidcop: # container_name: mock-oidcop # build: -# context: ../apps/login/packages/acceptance/idp/oidc +# context: ../../apps/login/packages/acceptance/idp/oidc # dockerfile: ../../go-command.Dockerfile # args: # - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} @@ -178,7 +177,7 @@ services: mock-samlsp: container_name: mock-samlsp build: - context: ../apps/login/packages/acceptance/samlsp + context: ../../apps/login/packages/acceptance/samlsp dockerfile: ../go-command.Dockerfile args: - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} @@ -200,7 +199,7 @@ services: # mock-samlidp: # container_name: mock-samlidp # build: -# context: ../apps/login/packages/acceptance/idp/saml +# context: ../../apps/login/packages/acceptance/idp/saml # dockerfile: ../../go-command.Dockerfile # args: # - LOGIN_TEST_ACCEPTANCE_GOLANG_TAG=${LOGIN_TEST_ACCEPTANCE_GOLANG_TAG:-golang:1.24-alpine} diff --git a/.devcontainer/debug-login-integration/devcontainer.json b/.devcontainer/debug-login-integration/devcontainer.json new file mode 100644 index 0000000000..96e1333baa --- /dev/null +++ b/.devcontainer/debug-login-integration/devcontainer.json @@ -0,0 +1,22 @@ +{ + "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", + "name": "debug-login-integration", + "dockerComposeFile": [ + "../base/docker-compose.yml", + "docker-compose.yml" + ], + "service": "debug-login-integration", + "runServices": ["debug-login-integration"], + "workspaceFolder": "/workspaces", + "forwardPorts": [3001], + "remoteUser": "node", + "onCreateCommand": "pnpm install --frozen-lockfile --recursive", + "postAttachCommand": "pnpm turbo daemon clean && pnpm turbo @zitadel/login#dev", + "customizations": { + "jetbrains": { + "settings": { + "com.intellij:app:HttpConfigurable.use_proxy_pac": true + } + } + } +} diff --git a/.devcontainer/debug-login-integration/docker-compose.yml b/.devcontainer/debug-login-integration/docker-compose.yml new file mode 100644 index 0000000000..ba71a0514d --- /dev/null +++ b/.devcontainer/debug-login-integration/docker-compose.yml @@ -0,0 +1,12 @@ +services: + debug-login-integration: + extends: + file: ../base/docker-compose.yml + service: devcontainer + container_name: debug-login-integration + environment: + NODE_ENV: 'test' + PORT: 3001 + depends_on: + mock-zitadel: + condition: service_started diff --git a/.devcontainer/integration-login/devcontainer.json b/.devcontainer/debug-turbo-lint-unit/devcontainer.json similarity index 52% rename from .devcontainer/integration-login/devcontainer.json rename to .devcontainer/debug-turbo-lint-unit/devcontainer.json index 303d6380bc..00e457aecd 100644 --- a/.devcontainer/integration-login/devcontainer.json +++ b/.devcontainer/debug-turbo-lint-unit/devcontainer.json @@ -1,18 +1,17 @@ { "$schema": "https://raw.githubusercontent.com/devcontainers/spec/refs/heads/main/schemas/devContainer.schema.json", - "name": "login", + "name": "debug-turbo-lint-unit", "dockerComposeFile": [ - "../docker-compose.yml", + "../base/docker-compose.yml", "docker-compose.yml" ], - "service": "devcontainer", + "service": "debug-turbo-lint-unit", + "runServices": ["debug-turbo-lint-unit"], "workspaceFolder": "/workspaces", - "features": { - "ghcr.io/devcontainers/features/node:1": { - "version": "lts/iron" - } - }, "forwardPorts": [3001], + "remoteUser": "node", + "onCreateCommand": "pnpm install --frozen-lockfile --recursive", + "postAttachCommand": "pnpm turbo daemon clean && pnpm turbo watch lint test:unit", "customizations": { "jetbrains": { "settings": { diff --git a/.devcontainer/debug-turbo-lint-unit/docker-compose.yml b/.devcontainer/debug-turbo-lint-unit/docker-compose.yml new file mode 100644 index 0000000000..6d8fd2adb8 --- /dev/null +++ b/.devcontainer/debug-turbo-lint-unit/docker-compose.yml @@ -0,0 +1,6 @@ +services: + debug-turbo-lint-unit: + extends: + file: ../base/docker-compose.yml + service: devcontainer + container_name: debug-turbo-lint-unit diff --git a/.devcontainer/integration-login/docker-compose.yml b/.devcontainer/integration-login/docker-compose.yml deleted file mode 100644 index 16f8558603..0000000000 --- a/.devcontainer/integration-login/docker-compose.yml +++ /dev/null @@ -1,14 +0,0 @@ -services: - login-integration: - extends: - file: ../docker-compose.yml - service: devcontainer - container_name: login-integration - command: pnpm turbo @zitadel/login#dev - network_mode: service:devcontainer - environment: - NODE_ENV: 'test' - PORT: 3001 - depends_on: - mock-zitadel: - condition: service_started diff --git a/package.json b/package.json index 625bb16bd5..a33d021749 100644 --- a/package.json +++ b/package.json @@ -5,10 +5,8 @@ "scripts": { "changeset": "changeset", "devcontainer": "devcontainer", - "test:integration": "cd login/integration && pnpm test:integration", - "test:integration:setup": "cd login/integration && NODE_ENV=test pnpm exec turbo run test:integration:setup", - "test:acceptance": "cd login/acceptance && pnpm test:acceptance", - "test:acceptance:setup": "cd login/apps/login-test-acceptance && pnpm test:acceptance:setup" + "test:integration": "cd apps/login/packages/integration && pnpm test:integration", + "test:acceptance": "cd apps/login/packages/acceptance && pnpm test:acceptance" }, "pnpm": { "overrides": { @@ -19,7 +17,7 @@ }, "devDependencies": { "@changesets/cli": "^2.29.5", - "devcontainer": "^0.3.0", + "@devcontainers/cli": "^0.80.0", "turbo": "2.5.5" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6ed1e1b2df..e6feb98717 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,9 +16,9 @@ importers: '@changesets/cli': specifier: ^2.29.5 version: 2.29.5 - devcontainer: - specifier: ^0.3.0 - version: 0.3.0 + '@devcontainers/cli': + specifier: ^0.80.0 + version: 0.80.0 turbo: specifier: 2.5.5 version: 2.5.5 @@ -2166,6 +2166,11 @@ packages: '@cypress/xvfb@1.2.4': resolution: {integrity: sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q==} + '@devcontainers/cli@0.80.0': + resolution: {integrity: sha512-w2EaxgjyeVGyzfA/KUEZBhyXqu/5PyWNXcnrXsZOBrt3aN2zyGiHrXoG54TF6K0b5DSCF01Rt5fnIyrCeFzFKw==} + engines: {node: ^16.13.0 || >=18.0.0} + hasBin: true + '@discoveryjs/json-ext@0.5.7': resolution: {integrity: sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==} engines: {node: '>=10.0.0'} @@ -7363,9 +7368,6 @@ packages: engines: {node: '>= 4.0.0'} hasBin: true - devcontainer@0.3.0: - resolution: {integrity: sha512-RAZPW5YLy7bgX3rYRjAzxedQPccJPgRPgfXOUGC3uIJSmcw5x4GEigNPswk/IH4N3f2BIeCAlNKeG6l1xYbXzg==} - devlop@1.1.0: resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} @@ -16861,6 +16863,8 @@ snapshots: transitivePeerDependencies: - supports-color + '@devcontainers/cli@0.80.0': {} + '@discoveryjs/json-ext@0.5.7': {} '@docsearch/css@3.9.0': {} @@ -23381,8 +23385,6 @@ snapshots: transitivePeerDependencies: - supports-color - devcontainer@0.3.0: {} - devlop@1.1.0: dependencies: dequal: 2.0.3