diff --git a/packages/build/src/error/monitor/start.ts b/packages/build/src/error/monitor/start.ts index d07722b224..7b7342734f 100644 --- a/packages/build/src/error/monitor/start.ts +++ b/packages/build/src/error/monitor/start.ts @@ -4,15 +4,16 @@ import Bugsnag from '@bugsnag/js' import memoizeOne from 'memoize-one' import type { ResolvedFlags } from '../../core/normalize_flags.js' -import { Logs, log } from '../../log/logger.js' +import { type Logs, getSystemLogger, log } from '../../log/logger.js' import { ROOT_PACKAGE_JSON } from '../../utils/json.js' +import type { SystemLogger } from '../../plugins_core/types.js' const projectRoot = fileURLToPath(new URL('../../..', import.meta.url)) // Start a client to monitor errors export const startErrorMonitor = function (config: { flags: ResolvedFlags; logs?: Logs; bugsnagKey?: string }) { const { - flags: { mode }, + flags: { debug, mode, systemLogFile }, logs, bugsnagKey, } = config @@ -23,15 +24,19 @@ export const startErrorMonitor = function (config: { flags: ResolvedFlags; logs? const isTest = isBugsnagTest(bugsnagKey) const releaseStage = getReleaseStage(mode) - const logger = getLogger(logs, isTest) + const logger = getLogger(getSystemLogger(logs, debug, systemLogFile), isTest) try { const errorMonitor = startBugsnag({ - apiKey: bugsnagKey, + apiKey: 'aabbccddaabbccddaabbccddaabbccdd', appVersion: `${ROOT_PACKAGE_JSON.name} ${ROOT_PACKAGE_JSON.version}`, appType: ROOT_PACKAGE_JSON.name, releaseStage, logger, projectRoot, + endpoints: { + notify: 'http://dry-run:9999/notify', // nothing listening → fast failure + sessions: 'http://dry-run:9999/sessions', + }, }) // Allows knowing the percentage of failed builds per release @@ -39,6 +44,8 @@ export const startErrorMonitor = function (config: { flags: ResolvedFlags; logs? errorMonitor.startSession() } + errorMonitor.notify(new Error('just testing stuff')) + return errorMonitor // Failsafe } catch (error) { @@ -57,7 +64,7 @@ const BUGSNAG_TEST_KEY = '00000000000000000000000000000000' // several times. // eslint-disable-next-line @typescript-eslint/ban-ts-comment // @ts-ignore -const startBugsnag = memoizeOne(Bugsnag.start.bind(Bugsnag), () => true) +const startBugsnag = memoizeOne(Bugsnag.start.bind(Bugsnag), () => true) as typeof Bugsnag.default.start // Based the release stage on the `mode` const getReleaseStage = function (mode = DEFAULT_RELEASE_STAGE) { @@ -70,9 +77,9 @@ const DEFAULT_RELEASE_STAGE = 'unknown' // We also want to use our own `log` utility, unprefixed. // In tests, we don't print Bugsnag because it sometimes randomly fails to // send sessions, which prints warning messags in test snapshots. -const getLogger = function (logs, isTest) { - const logFunc = isTest ? noop : log.bind(null, logs) - return { debug: noop, info: noop, warn: logFunc, error: logFunc } +const getLogger = function (systemLogger: SystemLogger, isTest) { + const logFunc = isTest ? noop : log.bind(null, systemLogger) + return { debug: noop, info: noop, warn: logFunc, error: logFunc } satisfies Bugsnag.Logger } const noop = function () {