fix(presence-service): generate prisma client in docker production stage

- Move prisma from devDependencies to dependencies so it is available
  after pnpm install --prod in the Dockerfile production stage
- Replace failed COPY of /app/node_modules/.prisma (pnpm virtual store
  path differs) with: COPY schema.prisma + RUN prisma generate in stage-1
- Only runs if schema.prisma exists (safe for all other services)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
This commit is contained in:
hailin 2026-03-07 18:10:43 -08:00
parent 2ac60094bd
commit ddf221cece
3 changed files with 11 additions and 7 deletions

View File

@ -83,9 +83,13 @@ COPY --from=builder /app/packages/services/${SERVICE_NAME}/dist packages/service
# Copy SQL migration templates alongside compiled shared code in each service dist # Copy SQL migration templates alongside compiled shared code in each service dist
COPY --from=builder /app/packages/shared/database/src/migrations packages/services/${SERVICE_NAME}/dist/shared/database/src/migrations/ COPY --from=builder /app/packages/shared/database/src/migrations packages/services/${SERVICE_NAME}/dist/shared/database/src/migrations/
# Copy Prisma generated client (required for services using @prisma/client) # Copy Prisma schema and generate client if this service uses @prisma/client.
# prisma generate runs in builder stage; production pnpm install skips build scripts # prisma is kept in dependencies so it is available after --prod install.
COPY --from=builder /app/node_modules/.prisma /app/node_modules/.prisma ARG SERVICE_NAME
COPY --from=builder /app/packages/services/${SERVICE_NAME}/prisma packages/services/${SERVICE_NAME}/prisma/
RUN test -f packages/services/${SERVICE_NAME}/prisma/schema.prisma && \
cd packages/services/${SERVICE_NAME} && \
node_modules/.bin/prisma generate --schema prisma/schema.prisma || true
WORKDIR /app/packages/services/${SERVICE_NAME} WORKDIR /app/packages/services/${SERVICE_NAME}

View File

@ -24,6 +24,7 @@
"date-fns": "^2.30.0", "date-fns": "^2.30.0",
"date-fns-tz": "^2.0.1", "date-fns-tz": "^2.0.1",
"ioredis": "^5.3.0", "ioredis": "^5.3.0",
"prisma": "^5.9.0",
"reflect-metadata": "^0.2.0", "reflect-metadata": "^0.2.0",
"rxjs": "^7.8.0", "rxjs": "^7.8.0",
"uuid": "^9.0.0" "uuid": "^9.0.0"
@ -32,7 +33,6 @@
"@nestjs/cli": "^10.3.0", "@nestjs/cli": "^10.3.0",
"@types/express": "^4.17.21", "@types/express": "^4.17.21",
"@types/node": "^20.11.0", "@types/node": "^20.11.0",
"prisma": "^5.9.0",
"typescript": "^5.4.0" "typescript": "^5.4.0"
} }
} }

View File

@ -721,6 +721,9 @@ importers:
ioredis: ioredis:
specifier: ^5.3.0 specifier: ^5.3.0
version: 5.9.2 version: 5.9.2
prisma:
specifier: ^5.9.0
version: 5.22.0
reflect-metadata: reflect-metadata:
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.2 version: 0.2.2
@ -740,9 +743,6 @@ importers:
'@types/node': '@types/node':
specifier: ^20.11.0 specifier: ^20.11.0
version: 20.19.33 version: 20.19.33
prisma:
specifier: ^5.9.0
version: 5.22.0
typescript: typescript:
specifier: ^5.4.0 specifier: ^5.4.0
version: 5.9.3 version: 5.9.3