diff --git a/apps/server/package.json b/apps/server/package.json index 86578e2..3a7adf8 100644 --- a/apps/server/package.json +++ b/apps/server/package.json @@ -26,6 +26,7 @@ "@prisma/client": "^5.15.0", "class-transformer": "^0.5.1", "class-validator": "^0.15.1", + "express": "^4.22.1", "openai": "^4.104.0", "reflect-metadata": "^0.2.0", "rxjs": "^7.8.0" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c09eca0..bc4f4b2 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -44,6 +44,9 @@ importers: class-validator: specifier: ^0.15.1 version: 0.15.1 + express: + specifier: ^4.22.1 + version: 4.22.1 openai: specifier: ^4.104.0 version: 4.104.0 diff --git a/scripts/verify-production-deploy.mjs b/scripts/verify-production-deploy.mjs index 3579b9a..bb238d3 100644 --- a/scripts/verify-production-deploy.mjs +++ b/scripts/verify-production-deploy.mjs @@ -4,6 +4,13 @@ import { fileURLToPath } from 'node:url'; const root = dirname(fileURLToPath(new URL('../package.json', import.meta.url))); +const requiredRuntimeDependencies = [ + { + packageFile: 'apps/server/package.json', + dependencies: ['express'], + }, +]; + const checks = [ { file: 'Dockerfile.web', @@ -137,6 +144,24 @@ for (const check of checks) { } } +for (const check of requiredRuntimeDependencies) { + const abs = join(root, check.packageFile); + if (!existsSync(abs)) { + console.error(`Missing package file: ${check.packageFile}`); + failed = true; + continue; + } + + const pkg = JSON.parse(readFileSync(abs, 'utf8')); + const dependencies = pkg.dependencies ?? {}; + for (const dependency of check.dependencies) { + if (!dependencies[dependency]) { + console.error(`Missing runtime dependency in ${check.packageFile}: ${dependency}`); + failed = true; + } + } +} + if (failed) { process.exit(1); }