From 0f685ad990cf8696e61682dbb2a4f82932b05138 Mon Sep 17 00:00:00 2001 From: JonasBa Date: Fri, 4 Nov 2022 11:19:35 -0400 Subject: [PATCH] feat(build): run precompile --- .gitignore | 1 + .../sentry_cpu_profiler-v93-darwin-arm64.node | Bin 65589 -> 0 bytes package-lock.json | 16 ++++++- package.json | 7 ++- scripts/binaries.js | 14 ++++++ scripts/check-build.js | 44 ++++++++++++++++++ src/cpu_profiler.ts | 12 +++-- src/hubextensions.hub.test.ts | 4 +- src/hubextensions.test.ts | 4 +- 9 files changed, 93 insertions(+), 9 deletions(-) delete mode 100755 binaries/sentry_cpu_profiler-v93-darwin-arm64.node create mode 100644 scripts/binaries.js create mode 100644 scripts/check-build.js diff --git a/.gitignore b/.gitignore index ef7d1791..0afadb1e 100644 --- a/.gitignore +++ b/.gitignore @@ -6,6 +6,7 @@ coverage/ lib/ +binaries/ node_modules/ memory_db diff --git a/binaries/sentry_cpu_profiler-v93-darwin-arm64.node b/binaries/sentry_cpu_profiler-v93-darwin-arm64.node deleted file mode 100755 index 8d0b7213ca071082ce756ec3b38884f3b1dbd88b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65589 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 VU+jINA@REQjVE6Ae&W6Oe*kL1*f9VA diff --git a/package-lock.json b/package-lock.json index 6452f250..3823d50f 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,7 +6,8 @@ "packages": { "": { "name": "@sentry/profiling-node", - "version": "0.0.7", + "version": "0.0.8", + "hasInstallScript": true, "license": "MIT", "dependencies": { "@sentry/hub": "^7.16.0", @@ -22,6 +23,7 @@ "@types/express": "^4.17.14", "@types/jest": "^29.0.0", "@types/node": "^18.0.2", + "@types/node-abi": "^3.0.0", "@typescript-eslint/eslint-plugin": "^5.36.2", "@typescript-eslint/parser": "^5.36.2", "autocannon": "^7.9.0", @@ -1997,6 +1999,12 @@ "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==", "dev": true }, + "node_modules/@types/node-abi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/node-abi/-/node-abi-3.0.0.tgz", + "integrity": "sha512-lhjcQxXaKhbP3SpIjJONnx4cy6cUW2bdCSwPJISuznG3S889TUPQZsYswxYhS4vg8eJDIG5/6pg533HorQI0rw==", + "dev": true + }, "node_modules/@types/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", @@ -10055,6 +10063,12 @@ "integrity": "sha512-BWN3M23gLO2jVG8g/XHIRFWiiV4/GckeFIqbU/C4V3xpoBBWSMk4OZomouN0wCkfQFPqgZikyLr7DOYDysIkkw==", "dev": true }, + "@types/node-abi": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@types/node-abi/-/node-abi-3.0.0.tgz", + "integrity": "sha512-lhjcQxXaKhbP3SpIjJONnx4cy6cUW2bdCSwPJISuznG3S889TUPQZsYswxYhS4vg8eJDIG5/6pg533HorQI0rw==", + "dev": true + }, "@types/prettier": { "version": "2.7.1", "resolved": "https://registry.npmjs.org/@types/prettier/-/prettier-2.7.1.tgz", diff --git a/package.json b/package.json index 205ec1bd..8eb994de 100644 --- a/package.json +++ b/package.json @@ -19,9 +19,13 @@ "README.md", "package.json", "package-lock.json", - "binaries" + "binaries", + "scripts/binaries.js", + "scripts/check-build.js", + "scripts/copu-target.js" ], "scripts": { + "postinstall": "node scripts/check-build.js", "clean": "rm -rf ./lib && rm -rf build", "lint": "eslint ./src --ext .ts", "build": "npm run build:bindings && npm run build:lib", @@ -62,6 +66,7 @@ "@types/express": "^4.17.14", "@types/jest": "^29.0.0", "@types/node": "^18.0.2", + "@types/node-abi": "^3.0.0", "@typescript-eslint/eslint-plugin": "^5.36.2", "@typescript-eslint/parser": "^5.36.2", "autocannon": "^7.9.0", diff --git a/scripts/binaries.js b/scripts/binaries.js new file mode 100644 index 00000000..faa989a3 --- /dev/null +++ b/scripts/binaries.js @@ -0,0 +1,14 @@ +/* eslint-env node */ +const os = require('os'); +const path = require('path'); +const abi = require('node-abi'); + +function getModuleName() { + return `sentry_cpu_profiler-v${abi.getAbi(process.versions.node, 'node')}-${os.platform()}-${os.arch()}.node`; +} + +const source = path.join(__dirname, '..', 'build', 'Release', 'sentry_cpu_profiler.node'); +const target = path.join(__dirname, '..', 'binaries', getModuleName()); + +module.exports.target = target; +module.exports.source = source; diff --git a/scripts/check-build.js b/scripts/check-build.js new file mode 100644 index 00000000..ec319e2d --- /dev/null +++ b/scripts/check-build.js @@ -0,0 +1,44 @@ +/* eslint-env node */ +const cp = require('child_process'); +const os = require('os'); + +const { target } = require('./binaries'); + +function recompileFromSource() { + try { + console.log('@sentry/profiling-node: Precompiled binary not found, compiling from source...'); + cp.execSync(`npm run build:configure --arch=${os.arch()}`); + cp.execSync(`npm run build:bindings`); + cp.execSync('node scripts/copy-target.js'); + return true; + } catch (e) { + console.error( + '@sentry/profiling-node: Failed to build from source, please report this a bug at https://github.com/getsentry/profiling-node/issues/new?assignees=&labels=Type%3A+Bug&template=bug.yml' + ); + return false; + } +} + +try { + require(target); + console.log('@sentry/profiling-node: Precompiled binary found, skipping build from source.'); +} catch (e) { + // Check for node version missmatch + if (/was compiled against a different Node.js/.test(e.message)) { + const success = recompileFromSource(); + if (success) { + process.exit(0); + } + } + // Not sure if this could even happen, but just in case it somehow does, + // we can provide a better experience than just crashing with cannot find module message. + if (/Cannot find module/.test(e.message)) { + const success = recompileFromSource(); + if (success) { + process.exit(0); + } + } + + // re-throw so we dont end up swallowing errors + throw e; +} diff --git a/src/cpu_profiler.ts b/src/cpu_profiler.ts index 98a3f050..4ebb03f9 100644 --- a/src/cpu_profiler.ts +++ b/src/cpu_profiler.ts @@ -1,7 +1,13 @@ -// @ts-expect-error this screams because it cannot resolve the module? -import profiler from './../build/Release/sentry_cpu_profiler.node'; +import os from 'os'; +import path from 'path'; +import abi from 'node-abi'; import { threadId } from 'worker_threads'; +export function importCppBindingsModule(): PrivateV8CpuProfilerBindings { + const name = `sentry_cpu_profiler-v${abi.getAbi(process.versions.node, 'node')}-${os.platform()}-${os.arch()}.node`; + return require(path.join(__dirname, '..', 'binaries', name)); +} + interface Sample { stack_id: number; thread_id: string; @@ -44,7 +50,7 @@ interface V8CpuProfilerBindings { stopProfiling(name: string): RawThreadCpuProfile | null; } -const privateBindings: PrivateV8CpuProfilerBindings = profiler; +const privateBindings: PrivateV8CpuProfilerBindings = importCppBindingsModule(); const CpuProfilerBindings: V8CpuProfilerBindings = { startProfiling(name: string) { return privateBindings.startProfiling(name); diff --git a/src/hubextensions.hub.test.ts b/src/hubextensions.hub.test.ts index 0ac7200f..df78d533 100644 --- a/src/hubextensions.hub.test.ts +++ b/src/hubextensions.hub.test.ts @@ -1,6 +1,7 @@ import * as Sentry from '@sentry/node'; import '@sentry/tracing'; // this has a addExtensionMethods side effect import { ProfilingIntegration } from './index'; // this has a addExtensionMethods side effect +import { importCppBindingsModule } from './cpu_profiler'; Sentry.init({ dsn: 'https://7fa19397baaf433f919fbe02228d5470@o1137848.ingest.sentry.io/6625302', @@ -11,8 +12,7 @@ Sentry.init({ integrations: [new ProfilingIntegration()] }); -// @ts-expect-error file extension errors -import profiler from './../build/Release/sentry_cpu_profiler'; +const profiler = importCppBindingsModule(); describe('hubextensions', () => { beforeEach(() => { diff --git a/src/hubextensions.test.ts b/src/hubextensions.test.ts index 9e27660e..c116a857 100644 --- a/src/hubextensions.test.ts +++ b/src/hubextensions.test.ts @@ -1,9 +1,9 @@ import type { BaseTransportOptions, ClientOptions, Hub, Transaction, TransactionMetadata } from '@sentry/types'; import { __PRIVATE__wrapStartTransactionWithProfiling } from './hubextensions'; +import { importCppBindingsModule } from './cpu_profiler'; -// @ts-expect-error file extension errors -import profiler from './../build/Release/sentry_cpu_profiler'; +const profiler = importCppBindingsModule(); function makeTransactionMock(): Transaction { return {