diff --git a/.dockerignore b/.dockerignore index d7e489418..d82f6bded 100644 --- a/.dockerignore +++ b/.dockerignore @@ -14,4 +14,4 @@ docker-compose.yml **/venv **/env **/dist -**/build +**/build \ No newline at end of file diff --git a/Dockerfile b/Dockerfile index e8297f6fa..3f146b631 100644 --- a/Dockerfile +++ b/Dockerfile @@ -15,6 +15,9 @@ RUN --mount=type=secret,id=SENTRY_AUTH_TOKEN \ SENTRY_AUTH_TOKEN=$(cat /run/secrets/SENTRY_AUTH_TOKEN) && \ export SENTRY_AUTH_TOKEN=$SENTRY_AUTH_TOKEN && \ pnpm run -r build-with-sourcemaps --release $SENTRY_RELEASE +# Comment above and uncomment below to build the image locally (not in CI) +# RUN pnpm --filter=app-builder run build +ENV NODE_ENV=production RUN pnpm deploy --filter=app-builder --prod /prod/app-builder FROM base AS app-builder diff --git a/packages/app-builder/.env.example b/packages/app-builder/.env.example index 5c9e80426..ee94908e5 100644 --- a/packages/app-builder/.env.example +++ b/packages/app-builder/.env.example @@ -10,7 +10,8 @@ NODE_ENV=development SESSION_SECRET=SESSION_SECRET SESSION_MAX_AGE=43200 -MARBLE_API_DOMAIN=http://localhost:8080 +MARBLE_API_DOMAIN_CLIENT=http://localhost:8080 +MARBLE_API_DOMAIN_SERVER=http://localhost:8080 MARBLE_APP_DOMAIN=http://localhost:3000 # coment out to use the real firebase diff --git a/packages/app-builder/src/entry.client.tsx b/packages/app-builder/src/entry.client.tsx index 39c604a68..5c9d1e484 100644 --- a/packages/app-builder/src/entry.client.tsx +++ b/packages/app-builder/src/entry.client.tsx @@ -37,7 +37,8 @@ Sentry.init({ // Set `tracePropagationTargets` to control for which URLs distributed tracing should be enabled tracePropagationTargets: [ getClientEnv('MARBLE_APP_DOMAIN'), - getClientEnv('MARBLE_API_DOMAIN'), + getClientEnv('MARBLE_API_DOMAIN_CLIENT'), + getClientEnv('MARBLE_API_DOMAIN_SERVER'), ], // Capture Replay for 10% of all sessions, diff --git a/packages/app-builder/src/services/auth/auth.client.ts b/packages/app-builder/src/services/auth/auth.client.ts index 9e69825a4..c07a65b74 100644 --- a/packages/app-builder/src/services/auth/auth.client.ts +++ b/packages/app-builder/src/services/auth/auth.client.ts @@ -201,7 +201,7 @@ export function useSendPasswordResetEmail({ export function useBackendInfo({ authenticationClientRepository, }: AuthenticationClientService) { - const backendUrl = getClientEnv('MARBLE_API_DOMAIN'); + const backendUrl = getClientEnv('MARBLE_API_DOMAIN_CLIENT'); const getAccessToken = async () => { try { diff --git a/packages/app-builder/src/services/auth/auth.server.ts b/packages/app-builder/src/services/auth/auth.server.ts index 071e15ed0..062f9a49a 100644 --- a/packages/app-builder/src/services/auth/auth.server.ts +++ b/packages/app-builder/src/services/auth/auth.server.ts @@ -130,7 +130,7 @@ export function makeAuthenticationServerService( { authorization: `Bearer ${idToken}`, }, - { baseUrl: getServerEnv('MARBLE_API_DOMAIN') }, + { baseUrl: getServerEnv('MARBLE_API_DOMAIN_CLIENT') }, ); const apiClient = getMarbleAPIClient(marbleToken.access_token); @@ -174,7 +174,7 @@ export function makeAuthenticationServerService( { authorization: `Bearer ${idToken}`, }, - { baseUrl: getServerEnv('MARBLE_API_DOMAIN') }, + { baseUrl: getServerEnv('MARBLE_API_DOMAIN_CLIENT') }, ); const apiClient = getMarbleAPIClient(marbleToken.access_token); diff --git a/packages/app-builder/src/services/init.client.ts b/packages/app-builder/src/services/init.client.ts index d4ba339e6..ae5eaf4d2 100644 --- a/packages/app-builder/src/services/init.client.ts +++ b/packages/app-builder/src/services/init.client.ts @@ -20,7 +20,7 @@ function makeClientServices(repositories: ClientRepositories) { function initClientServices() { const firebaseClient = initializeFirebaseClient({ firebaseOptions: getClientEnv('FIREBASE_OPTIONS'), - authEmulatorHost: getClientEnv('AUTH_EMULATOR_HOST'), + authEmulatorHost: getClientEnv('FIREBASE_AUTH_EMULATOR_HOST'), }); const clientRepositories = makeClientRepositories(firebaseClient); return makeClientServices(clientRepositories); diff --git a/packages/app-builder/src/services/init.server.ts b/packages/app-builder/src/services/init.server.ts index eb00c043a..d5c2a518e 100644 --- a/packages/app-builder/src/services/init.server.ts +++ b/packages/app-builder/src/services/init.server.ts @@ -50,7 +50,7 @@ function makeServerServices(repositories: ServerRepositories) { function initServerServices() { checkServerEnv(); const getMarbleAPIClient = initializeGetMarbleAPIClient({ - baseUrl: getServerEnv('MARBLE_API_DOMAIN'), + baseUrl: getServerEnv('MARBLE_API_DOMAIN_SERVER'), }); const serverRepositories = makeServerRepositories({ getMarbleAPIClient, diff --git a/packages/app-builder/src/utils/environment.ts b/packages/app-builder/src/utils/environment.ts index 96ae7e423..994e11ce4 100644 --- a/packages/app-builder/src/utils/environment.ts +++ b/packages/app-builder/src/utils/environment.ts @@ -30,7 +30,8 @@ const ServerPublicEnvVarNameSchema = z.object({ ENV: z.string(), NODE_ENV: z.string(), SESSION_MAX_AGE: z.string(), - MARBLE_API_DOMAIN: z.string(), + MARBLE_API_DOMAIN_CLIENT: z.string(), + MARBLE_API_DOMAIN_SERVER: z.string(), MARBLE_APP_DOMAIN: z.string(), FIREBASE_API_KEY: z.string(), @@ -106,7 +107,11 @@ export function getServerEnv( export function getClientEnvVars() { return { ENV: getServerEnv('ENV'), - AUTH_EMULATOR_HOST: getServerEnv('FIREBASE_AUTH_EMULATOR_HOST'), + FIREBASE_AUTH_EMULATOR_HOST: getServerEnv( + 'FIREBASE_AUTH_EMULATOR_HOST', + )?.startsWith('http://') + ? getServerEnv('FIREBASE_AUTH_EMULATOR_HOST') + : 'http://' + getServerEnv('FIREBASE_AUTH_EMULATOR_HOST'), FIREBASE_OPTIONS: { apiKey: getServerEnv('FIREBASE_API_KEY'), authDomain: getServerEnv('FIREBASE_AUTH_DOMAIN'), @@ -115,7 +120,8 @@ export function getClientEnvVars() { messagingSenderId: getServerEnv('FIREBASE_MESSAGING_SENDER_ID'), appId: getServerEnv('FIREBASE_APP_ID'), }, - MARBLE_API_DOMAIN: getServerEnv('MARBLE_API_DOMAIN'), + MARBLE_API_DOMAIN_SERVER: getServerEnv('MARBLE_API_DOMAIN_SERVER'), + MARBLE_API_DOMAIN_CLIENT: getServerEnv('MARBLE_API_DOMAIN_CLIENT'), MARBLE_APP_DOMAIN: getServerEnv('MARBLE_APP_DOMAIN'), SENTRY_DSN: getServerEnv('SENTRY_DSN'), SENTRY_ENVIRONMENT: getServerEnv('SENTRY_ENVIRONMENT'),