From d4c4a0870696823fc65ffece3d9fec6696502a1a Mon Sep 17 00:00:00 2001 From: Martin Sonnberger Date: Mon, 21 Jul 2025 13:11:15 +0200 Subject: [PATCH 1/2] fix(aws): Resolve all Sentry packages to local versions in layer build --- .../scripts/buildLambdaLayer.ts | 48 ++++++++++++++++--- 1 file changed, 42 insertions(+), 6 deletions(-) diff --git a/packages/aws-serverless/scripts/buildLambdaLayer.ts b/packages/aws-serverless/scripts/buildLambdaLayer.ts index 7ae000d378dd..b6feef3e69dd 100644 --- a/packages/aws-serverless/scripts/buildLambdaLayer.ts +++ b/packages/aws-serverless/scripts/buildLambdaLayer.ts @@ -21,16 +21,13 @@ function run(cmd: string, options?: childProcess.ExecSyncOptions): string { */ async function buildLambdaLayer(): Promise { console.log('Building Lambda layer.'); + buildPackageJson(); console.log('Installing local @sentry/aws-serverless into build/aws/dist-serverless/nodejs.'); - - console.log('Creating target directory for npm install.'); - fsForceMkdirSync('./build/aws/dist-serverless/nodejs'); - - run('npm install . --prefix ./build/aws/dist-serverless/nodejs --install-links'); + run('yarn install --prod --cwd ./build/aws/dist-serverless/nodejs'); await pruneNodeModules(); fs.rmSync('./build/aws/dist-serverless/nodejs/package.json', { force: true }); - fs.rmSync('./build/aws/dist-serverless/nodejs/package-lock.json', { force: true }); + fs.rmSync('./build/aws/dist-serverless/nodejs/yarn.lock', { force: true }); // The layer also includes `awslambda-auto.js`, a helper file which calls `Sentry.init()` and wraps the lambda // handler. It gets run when Node is launched inside the lambda, using the environment variable @@ -142,3 +139,42 @@ function getAllFiles(dir: string): string[] { walkDirectory(dir); return files; } + +function buildPackageJson(): void { + console.log('Building package.json'); + const packagesDir = path.resolve(__dirname, '..'); + const packageDirs = fs + .readdirSync(packagesDir, { withFileTypes: true }) + .filter(dirent => dirent.isDirectory()) + .map(dirent => dirent.name) + .filter(name => !name.startsWith('.')) // Skip hidden directories + .sort(); + + const resolutions: Record = {}; + + for (const packageDir of packageDirs) { + const packageJsonPath = path.join(packagesDir, packageDir, 'package.json'); + if (fs.existsSync(packageJsonPath)) { + try { + const packageContent = JSON.parse(fs.readFileSync(packageJsonPath, 'utf-8')) as { name?: string }; + const packageName = packageContent.name; + if (typeof packageName === 'string' && packageName) { + resolutions[packageName] = `file:../../../../../../packages/${packageDir}`; + } + } catch { + console.warn(`Warning: Could not read package.json for ${packageDir}`); + } + } + } + + const packageJson = { + dependencies: { + '@sentry/aws-serverless': version, + }, + resolutions, + }; + + fsForceMkdirSync('./build/aws/dist-serverless/nodejs'); + const packageJsonPath = './build/aws/dist-serverless/nodejs/package.json'; + fs.writeFileSync(packageJsonPath, JSON.stringify(packageJson, null, 2)); +} From 38b810e9c4c30dd3357074bba80dbc158e0a453e Mon Sep 17 00:00:00 2001 From: Martin Sonnberger Date: Mon, 21 Jul 2025 13:45:08 +0200 Subject: [PATCH 2/2] remove redundant layer build --- packages/aws-serverless/package.json | 16 +--------------- 1 file changed, 1 insertion(+), 15 deletions(-) diff --git a/packages/aws-serverless/package.json b/packages/aws-serverless/package.json index 17433e6101e5..f9f0fb08592f 100644 --- a/packages/aws-serverless/package.json +++ b/packages/aws-serverless/package.json @@ -79,7 +79,6 @@ }, "scripts": { "build": "run-p build:transpile build:types", - "build:bundle": "yarn build:layer", "build:layer": "yarn ts-node scripts/buildLambdaLayer.ts", "build:dev": "run-p build:transpile build:types", "build:transpile": "rollup -c rollup.npm.config.mjs && yarn build:layer", @@ -103,18 +102,5 @@ "volta": { "extends": "../../package.json" }, - "sideEffects": false, - "nx": { - "targets": { - "build:bundle": { - "dependsOn": [ - "build:transpile", - "build:types" - ], - "outputs": [ - "{projectRoot}/build/aws" - ] - } - } - } + "sideEffects": false }