diff --git a/.github/workflows/trigger-api-tasks-deploy-main.yml b/.github/workflows/trigger-api-tasks-deploy-main.yml index 2c9db0cb3a..c2c7f7d2a8 100644 --- a/.github/workflows/trigger-api-tasks-deploy-main.yml +++ b/.github/workflows/trigger-api-tasks-deploy-main.yml @@ -37,11 +37,10 @@ jobs: - name: Build DB package working-directory: ./packages/db run: bun run build - - name: Copy model files to api schema dir and generate client + - name: Copy model files to api schema dir working-directory: ./apps/api run: | find ../../packages/db/prisma/schema -name '*.prisma' ! -name 'schema.prisma' -exec cp {} prisma/schema/ \; - bunx prisma generate --schema=prisma/schema - name: 🚀 Deploy Trigger.dev working-directory: ./apps/api timeout-minutes: 20 diff --git a/.github/workflows/trigger-api-tasks-deploy-release.yml b/.github/workflows/trigger-api-tasks-deploy-release.yml index 86d87cb52f..982e2f07af 100644 --- a/.github/workflows/trigger-api-tasks-deploy-release.yml +++ b/.github/workflows/trigger-api-tasks-deploy-release.yml @@ -43,11 +43,10 @@ jobs: working-directory: ./packages/db run: bun run build - - name: Copy model files to api schema dir and generate client + - name: Copy model files to api schema dir working-directory: ./apps/api run: | find ../../packages/db/prisma/schema -name '*.prisma' ! -name 'schema.prisma' -exec cp {} prisma/schema/ \; - bunx prisma generate --schema=prisma/schema - name: 🚀 Deploy Trigger.dev working-directory: ./apps/api diff --git a/.github/workflows/trigger-tasks-deploy-main.yml b/.github/workflows/trigger-tasks-deploy-main.yml index afa037a84a..6cb598d9a3 100644 --- a/.github/workflows/trigger-tasks-deploy-main.yml +++ b/.github/workflows/trigger-tasks-deploy-main.yml @@ -33,10 +33,11 @@ jobs: - name: Build Integration Platform package working-directory: ./packages/integration-platform run: bun run build - - name: Copy schema to app and generate client - working-directory: ./apps/app + - name: Generate Prisma clients run: | - mkdir -p prisma/schema + cd packages/db && node scripts/generate-prisma-client-js.js + cd ../.. + cd apps/app && mkdir -p prisma/schema find ../../packages/db/prisma/schema -name '*.prisma' ! -name 'schema.prisma' -exec cp {} prisma/schema/ \; bunx prisma generate --schema=prisma/schema - name: 🚀 Deploy Trigger.dev diff --git a/.github/workflows/trigger-tasks-deploy-release.yml b/.github/workflows/trigger-tasks-deploy-release.yml index eb578b548c..dacf0a3541 100644 --- a/.github/workflows/trigger-tasks-deploy-release.yml +++ b/.github/workflows/trigger-tasks-deploy-release.yml @@ -39,10 +39,11 @@ jobs: working-directory: ./packages/integration-platform run: bun run build - - name: Copy schema to app and generate client - working-directory: ./apps/app + - name: Generate Prisma clients run: | - mkdir -p prisma/schema + cd packages/db && node scripts/generate-prisma-client-js.js + cd ../.. + cd apps/app && mkdir -p prisma/schema find ../../packages/db/prisma/schema -name '*.prisma' ! -name 'schema.prisma' -exec cp {} prisma/schema/ \; bunx prisma generate --schema=prisma/schema diff --git a/apps/api/customPrismaExtension.ts b/apps/api/customPrismaExtension.ts index 6848fd7645..f149d5a12c 100644 --- a/apps/api/customPrismaExtension.ts +++ b/apps/api/customPrismaExtension.ts @@ -283,31 +283,52 @@ export class PrismaExtension implements BuildExtension { } private buildSchemaCandidates(context: ExtendedBuildContext): string[] { - const candidates = new Set(); - - const addNodeModuleCandidates = (start: string | undefined) => { - if (!start) { - return; + const candidates: string[] = []; + const seen = new Set(); + const add = (p: string) => { + const resolved = resolve(p); + if (!seen.has(resolved)) { + seen.add(resolved); + candidates.push(resolved); } + }; + + // Strategy 1: Resolve @trycompai/db via Node module resolution (follows workspace symlinks) + try { + const dbPkgJson = require.resolve('@trycompai/db/package.json', { + paths: [context.workingDir], + }); + const dbRoot = dirname(dbPkgJson); + add(join(dbRoot, 'dist', 'schema.prisma')); + add(join(dbRoot, 'prisma', 'schema', 'schema.prisma')); + } catch { + // Package not resolvable yet (pre-install), fall through to other strategies + } + // Strategy 2: Walk up node_modules hierarchy from workingDir and workspaceDir + const addNodeModuleCandidates = (start: string | undefined) => { + if (!start) return; let current = start; while (true) { - candidates.add(resolve(current, 'node_modules/@trycompai/db/dist/schema.prisma')); + const dbDir = resolve(current, 'node_modules', '@trycompai', 'db'); + add(join(dbDir, 'dist', 'schema.prisma')); + add(join(dbDir, 'prisma', 'schema', 'schema.prisma')); const parent = dirname(current); - if (parent === current) { - break; - } + if (parent === current) break; current = parent; } }; - addNodeModuleCandidates(context.workingDir); addNodeModuleCandidates(context.workspaceDir); - candidates.add(resolve(context.workingDir, '../../packages/db/dist/schema.prisma')); - candidates.add(resolve(context.workingDir, '../packages/db/dist/schema.prisma')); + // Strategy 3: Relative monorepo paths (apps/api → packages/db, apps/app → packages/db) + for (const rel of ['../../packages/db', '../packages/db']) { + const dbDir = resolve(context.workingDir, rel); + add(join(dbDir, 'dist', 'schema.prisma')); + add(join(dbDir, 'prisma', 'schema', 'schema.prisma')); + } - return Array.from(candidates); + return candidates; } } diff --git a/apps/app/customPrismaExtension.ts b/apps/app/customPrismaExtension.ts index 88d06a16b7..84dd76fe21 100644 --- a/apps/app/customPrismaExtension.ts +++ b/apps/app/customPrismaExtension.ts @@ -283,30 +283,51 @@ export class PrismaExtension implements BuildExtension { } private buildSchemaCandidates(context: ExtendedBuildContext): string[] { - const candidates = new Set(); - - const addNodeModuleCandidates = (start: string | undefined) => { - if (!start) { - return; + const candidates: string[] = []; + const seen = new Set(); + const add = (p: string) => { + const resolved = resolve(p); + if (!seen.has(resolved)) { + seen.add(resolved); + candidates.push(resolved); } + }; + + // Strategy 1: Resolve @trycompai/db via Node module resolution (follows workspace symlinks) + try { + const dbPkgJson = require.resolve('@trycompai/db/package.json', { + paths: [context.workingDir], + }); + const dbRoot = dirname(dbPkgJson); + add(join(dbRoot, 'dist', 'schema.prisma')); + add(join(dbRoot, 'prisma', 'schema', 'schema.prisma')); + } catch { + // Package not resolvable yet (pre-install), fall through to other strategies + } + // Strategy 2: Walk up node_modules hierarchy from workingDir and workspaceDir + const addNodeModuleCandidates = (start: string | undefined) => { + if (!start) return; let current = start; while (true) { - candidates.add(resolve(current, 'node_modules/@trycompai/db/dist/schema.prisma')); + const dbDir = resolve(current, 'node_modules', '@trycompai', 'db'); + add(join(dbDir, 'dist', 'schema.prisma')); + add(join(dbDir, 'prisma', 'schema', 'schema.prisma')); const parent = dirname(current); - if (parent === current) { - break; - } + if (parent === current) break; current = parent; } }; - addNodeModuleCandidates(context.workingDir); addNodeModuleCandidates(context.workspaceDir); - candidates.add(resolve(context.workingDir, '../../packages/db/dist/schema.prisma')); - candidates.add(resolve(context.workingDir, '../packages/db/dist/schema.prisma')); + // Strategy 3: Relative monorepo paths (apps/api → packages/db, apps/app → packages/db) + for (const rel of ['../../packages/db', '../packages/db']) { + const dbDir = resolve(context.workingDir, rel); + add(join(dbDir, 'dist', 'schema.prisma')); + add(join(dbDir, 'prisma', 'schema', 'schema.prisma')); + } - return Array.from(candidates); + return candidates; } }