@@ -7,22 +7,22 @@ import { join, normalize, relative, resolve, sep } from 'path';
7
7
import { frameworkList } from '@vercel/frameworks' ;
8
8
import {
9
9
getDiscontinuedNodeVersions ,
10
+ getInstalledPackageVersion ,
10
11
normalizePath ,
11
- Files ,
12
12
FileFsRef ,
13
- PackageJson ,
14
- BuildOptions ,
15
- Config ,
16
- Meta ,
17
- Builder ,
18
- BuildResultV2 ,
19
- BuildResultV2Typical ,
20
- BuildResultV3 ,
21
13
NowBuildError ,
22
- Cron ,
23
14
validateNpmrc ,
15
+ type Files ,
16
+ type PackageJson ,
17
+ type BuildOptions ,
18
+ type Config ,
19
+ type Meta ,
20
+ type Builder ,
21
+ type BuildResultV2 ,
22
+ type BuildResultV2Typical ,
23
+ type BuildResultV3 ,
24
+ type Cron ,
24
25
type FlagDefinitions ,
25
- getInstalledPackageVersion ,
26
26
} from '@vercel/build-utils' ;
27
27
import {
28
28
detectBuilders ,
@@ -34,15 +34,15 @@ import {
34
34
appendRoutesToPhase ,
35
35
getTransformedRoutes ,
36
36
mergeRoutes ,
37
- MergeRoutesProps ,
38
- Route ,
37
+ type MergeRoutesProps ,
38
+ type Route ,
39
39
} from '@vercel/routing-utils' ;
40
40
import { fileNameSymbol } from '@vercel/client' ;
41
41
import type { VercelConfig } from '@vercel/client' ;
42
42
43
43
import pull from '../pull' ;
44
44
import { staticFiles as getFiles } from '../../util/get-files' ;
45
- import Client from '../../util/client' ;
45
+ import type Client from '../../util/client' ;
46
46
import { parseArguments } from '../../util/get-args' ;
47
47
import cmd from '../../util/output/cmd' ;
48
48
import * as cli from '../../util/pkg-name' ;
@@ -51,17 +51,17 @@ import readJSONFile from '../../util/read-json-file';
51
51
import { CantParseJSONFile } from '../../util/errors-ts' ;
52
52
import {
53
53
pickOverrides ,
54
- ProjectLinkAndSettings ,
55
54
readProjectSettings ,
55
+ type ProjectLinkAndSettings ,
56
56
} from '../../util/projects/project-settings' ;
57
57
import { getProjectLink , VERCEL_DIR } from '../../util/projects/link' ;
58
58
import confirm from '../../util/input/confirm' ;
59
59
import { emoji , prependEmoji } from '../../util/emoji' ;
60
60
import stamp from '../../util/output/stamp' ;
61
61
import {
62
62
OUTPUT_DIR ,
63
- PathOverride ,
64
63
writeBuildResult ,
64
+ type PathOverride ,
65
65
} from '../../util/build/write-build-result' ;
66
66
import { importBuilders } from '../../util/build/import-builders' ;
67
67
import { initCorepack , cleanupCorepack } from '../../util/build/corepack' ;
@@ -476,6 +476,7 @@ async function doBuild(
476
476
const overrides : PathOverride [ ] = [ ] ;
477
477
const repoRootPath = cwd ;
478
478
const corepackShimDir = await initCorepack ( { repoRootPath } , output ) ;
479
+ const diagnostics : Files = { } ;
479
480
480
481
for ( const build of sortedBuilders ) {
481
482
if ( typeof build . src !== 'string' ) continue ;
@@ -527,7 +528,18 @@ async function doBuild(
527
528
output . debug (
528
529
`Building entrypoint "${ build . src } " with "${ builderPkg . name } "`
529
530
) ;
530
- const buildResult = await builder . build ( buildOptions ) ;
531
+ let buildResult : BuildResultV2 | BuildResultV3 | undefined ;
532
+ try {
533
+ buildResult = await builder . build ( buildOptions ) ;
534
+ } finally {
535
+ // Make sure we don't fail the build
536
+ try {
537
+ Object . assign ( diagnostics , await builder . diagnostics ?.( buildOptions ) ) ;
538
+ } catch ( error ) {
539
+ output . error ( 'Collecting diagnostics failed' ) ;
540
+ output . debug ( error ) ;
541
+ }
542
+ }
531
543
532
544
if (
533
545
buildResult &&
0 commit comments