Skip to content

Commit 26f7760

Browse files
committed
Don't start the dev session if there are build errors
1 parent 3388086 commit 26f7760

File tree

2 files changed

+37
-0
lines changed

2 files changed

+37
-0
lines changed

packages/app/src/cli/services/dev/processes/dev-session.test.ts

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import {
77
testAppAccessConfigExtension,
88
testAppLinked,
99
testDeveloperPlatformClient,
10+
testFunctionExtension,
1011
testUIExtension,
1112
testWebhookExtensions,
1213
} from '../../../models/app/app.test-data.js'
@@ -205,4 +206,21 @@ describe('pushUpdatesForDevSession', () => {
205206
expect(developerPlatformClient.refreshToken).toHaveBeenCalledOnce()
206207
expect(developerPlatformClient.devSessionUpdate).toHaveBeenCalledTimes(2)
207208
})
209+
210+
test('prints build errors', async () => {
211+
// Given
212+
const extension = await testFunctionExtension()
213+
const event = {app, extensionEvents: [{type: 'updated', extension, buildResult: {status: 'error'}}]}
214+
215+
// When
216+
try {
217+
await pushUpdatesForDevSession({stderr, stdout, abortSignal: abortController.signal}, options)
218+
appWatcher.emit('ready', event)
219+
await flushPromises()
220+
// eslint-disable-next-line no-catch-all/no-catch-all
221+
} catch (error: any) {
222+
expect(error.message).toBe('Dev session aborted, build errors detected in extensions')
223+
}
224+
expect(developerPlatformClient.devSessionCreate).not.toHaveBeenCalled()
225+
})
208226
})

packages/app/src/cli/services/dev/processes/dev-session.ts

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -147,6 +147,15 @@ export const pushUpdatesForDevSession: DevProcessFunction<DevSessionOptions> = a
147147
)
148148
})
149149
.onStart(async (event) => {
150+
const buildErrors = event.extensionEvents.filter((eve) => eve.buildResult?.status === 'error')
151+
if (buildErrors.length) {
152+
const errors = buildErrors.map((error) => ({
153+
error: 'Build error. Please review your code and try again.',
154+
prefix: error.extension.handle,
155+
}))
156+
await printMultipleErrors(errors, processOptions.stdout)
157+
throw new AbortError('Dev session aborted, build errors detected in extensions.')
158+
}
150159
const result = await bundleExtensionsAndUpload({...processOptions, app: event.app})
151160
await handleDevSessionResult(result, {...processOptions, app: event.app})
152161
})
@@ -335,6 +344,16 @@ async function printError(message: string, stdout: Writable, prefix?: string) {
335344
await printLogMessage(outputContent`${content}`.value, stdout, prefix)
336345
}
337346

347+
async function printMultipleErrors(errors: {error: string; prefix: string}[], stdout: Writable) {
348+
const header = outputToken.errorText(`❌ Error`)
349+
await printLogMessage(outputContent`${header}`.value, stdout, 'dev-session')
350+
const messages = errors.map((error) => {
351+
const content = outputToken.errorText(`└ ${error.error}`)
352+
return printLogMessage(outputContent`${content}`.value, stdout, error.prefix)
353+
})
354+
await Promise.all(messages)
355+
}
356+
338357
async function printSuccess(message: string, stdout: Writable) {
339358
await printLogMessage(outputContent`${outputToken.green(message)}`.value, stdout)
340359
}

0 commit comments

Comments
 (0)