diff --git a/packages/cli-packages/storybook/src/commands/storybook.ts b/packages/cli-packages/storybook/src/commands/storybook.ts index 0992905bf73a..1c8afb22582b 100644 --- a/packages/cli-packages/storybook/src/commands/storybook.ts +++ b/packages/cli-packages/storybook/src/commands/storybook.ts @@ -74,6 +74,8 @@ export async function handler(options: StorybookYargsOptions): Promise { open: options.open, smokeTest: options.smokeTest, }) + // @ts-expect-error - Custom workaround for storybook telemetry + process.emit('shutdown-telemetry') const { handler: storybookHandler } = await import('./storybookHandler.js') await storybookHandler(options) diff --git a/packages/cli/src/telemetry/index.js b/packages/cli/src/telemetry/index.js index 2eb18672c169..b8160d21e0a5 100644 --- a/packages/cli/src/telemetry/index.js +++ b/packages/cli/src/telemetry/index.js @@ -7,6 +7,7 @@ import { SimpleSpanProcessor, SamplingDecision, } from '@opentelemetry/sdk-trace-node' +import { hideBin } from 'yargs/helpers' import { spawnBackgroundProcess } from '../lib/background' @@ -72,12 +73,19 @@ export async function startTelemetry() { // then we leave it to that handler to handle the signal. // See https://nodejs.org/dist/latest/docs/api/process.html#signal-events for more info on the // behaviour of nodejs for various signals. - for (const signal of ['SIGTERM', 'SIGINT', 'SIGHUP']) { - process.on(signal, () => { - if (process.listenerCount(signal) === 1) { - console.log(`Received ${signal} signal, exiting...`) - process.exit() - } + const cleanArgv = hideBin(process.argv) + if (!cleanArgv.includes('sb') && !cleanArgv.includes('storybook')) { + for (const signal of ['SIGTERM', 'SIGINT', 'SIGHUP']) { + process.on(signal, () => { + if (process.listenerCount(signal) === 1) { + console.log(`Received ${signal} signal, exiting...`) + process.exit() + } + }) + } + } else { + process.on('shutdown-telemetry', () => { + shutdownTelemetry() }) }