Skip to content

Commit fd68152

Browse files
committed
Exit with non-zero code on unexpected errors (microsoft/vscode-remote-release#10217)
1 parent 7ba9320 commit fd68152

File tree

14 files changed

+43
-21
lines changed

14 files changed

+43
-21
lines changed

src/spec-configuration/containerTemplatesOCI.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,8 @@ export async function fetchTemplate(params: CommonParams, selectedTemplate: Sele
5050
const blobResult = await getBlob(params, blobUrl, tmpDir, templateDestPath, templateRef, blobDigest, [...omitPaths, 'devcontainer-template.json', 'README.md', 'NOTES.md'], 'devcontainer-template.json');
5151

5252
if (!blobResult) {
53-
throw new Error(`Failed to download package for ${templateRef.resource}`);
53+
output.write(`Failed to download package for ${templateRef.resource}`, LogLevel.Error);
54+
return;
5455
}
5556

5657
const { files, metadata } = blobResult;

src/spec-node/devContainersSpecCLI.ts

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import textTable from 'text-table';
1010
import * as jsonc from 'jsonc-parser';
1111

1212
import { createDockerParams, createLog, launch, ProvisionOptions } from './devContainers';
13-
import { SubstitutedConfig, createContainerProperties, envListToObj, inspectDockerImage, isDockerFileConfig, SubstituteConfig, addSubstitution, findContainerAndIdLabels, getCacheFolder } from './utils';
13+
import { SubstitutedConfig, createContainerProperties, envListToObj, inspectDockerImage, isDockerFileConfig, SubstituteConfig, addSubstitution, findContainerAndIdLabels, getCacheFolder, runAsyncHandler } from './utils';
1414
import { URI } from 'vscode-uri';
1515
import { ContainerError } from '../spec-common/errors';
1616
import { Log, LogDimensions, LogLevel, makeLog, mapLogLevel } from '../spec-utils/log';
@@ -168,7 +168,7 @@ function provisionOptions(y: Argv) {
168168
type ProvisionArgs = UnpackArgv<ReturnType<typeof provisionOptions>>;
169169

170170
function provisionHandler(args: ProvisionArgs) {
171-
(async () => provision(args))().catch(console.error);
171+
runAsyncHandler(provision.bind(null, args));
172172
}
173173

174174
async function provision({
@@ -366,7 +366,7 @@ function setUpOptions(y: Argv) {
366366
type SetUpArgs = UnpackArgv<ReturnType<typeof setUpOptions>>;
367367

368368
function setUpHandler(args: SetUpArgs) {
369-
(async () => setUp(args))().catch(console.error);
369+
runAsyncHandler(setUp.bind(null, args));
370370
}
371371

372372
async function setUp(args: SetUpArgs) {
@@ -529,7 +529,7 @@ function buildOptions(y: Argv) {
529529
type BuildArgs = UnpackArgv<ReturnType<typeof buildOptions>>;
530530

531531
function buildHandler(args: BuildArgs) {
532-
(async () => build(args))().catch(console.error);
532+
runAsyncHandler(build.bind(null, args));
533533
}
534534

535535
async function build(args: BuildArgs) {
@@ -791,7 +791,7 @@ function runUserCommandsOptions(y: Argv) {
791791
type RunUserCommandsArgs = UnpackArgv<ReturnType<typeof runUserCommandsOptions>>;
792792

793793
function runUserCommandsHandler(args: RunUserCommandsArgs) {
794-
(async () => runUserCommands(args))().catch(console.error);
794+
runAsyncHandler(runUserCommands.bind(null, args));
795795
}
796796
async function runUserCommands(args: RunUserCommandsArgs) {
797797
const result = await doRunUserCommands(args);
@@ -981,7 +981,7 @@ function readConfigurationOptions(y: Argv) {
981981
type ReadConfigurationArgs = UnpackArgv<ReturnType<typeof readConfigurationOptions>>;
982982

983983
function readConfigurationHandler(args: ReadConfigurationArgs) {
984-
(async () => readConfiguration(args))().catch(console.error);
984+
runAsyncHandler(readConfiguration.bind(null, args));
985985
}
986986

987987
async function readConfiguration({
@@ -1117,7 +1117,7 @@ function outdatedOptions(y: Argv) {
11171117
type OutdatedArgs = UnpackArgv<ReturnType<typeof outdatedOptions>>;
11181118

11191119
function outdatedHandler(args: OutdatedArgs) {
1120-
(async () => outdated(args))().catch(console.error);
1120+
runAsyncHandler(outdated.bind(null, args));
11211121
}
11221122

11231123
async function outdated({
@@ -1249,7 +1249,7 @@ function execOptions(y: Argv) {
12491249
export type ExecArgs = UnpackArgv<ReturnType<typeof execOptions>>;
12501250

12511251
function execHandler(args: ExecArgs) {
1252-
(async () => exec(args))().catch(console.error);
1252+
runAsyncHandler(exec.bind(null, args));
12531253
}
12541254

12551255
async function exec(args: ExecArgs) {

src/spec-node/featuresCLI/generateDocs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { generateFeaturesDocumentation } from '../collectionCommonUtils/generate
44
import { createLog } from '../devContainers';
55
import { mapLogLevel } from '../../spec-utils/log';
66
import { getPackageConfig } from '../../spec-utils/product';
7+
import { runAsyncHandler } from '../utils';
78

89
// -- 'features generate-docs' command
910
export function featuresGenerateDocsOptions(y: Argv) {
@@ -24,7 +25,7 @@ export function featuresGenerateDocsOptions(y: Argv) {
2425
export type FeaturesGenerateDocsArgs = UnpackArgv<ReturnType<typeof featuresGenerateDocsOptions>>;
2526

2627
export function featuresGenerateDocsHandler(args: FeaturesGenerateDocsArgs) {
27-
(async () => await featuresGenerateDocs(args))().catch(console.error);
28+
runAsyncHandler(featuresGenerateDocs.bind(null, args));
2829
}
2930

3031
export async function featuresGenerateDocs({

src/spec-node/featuresCLI/info.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import { UnpackArgv } from '../devContainersSpecCLI';
77
import { buildDependencyGraph, generateMermaidDiagram } from '../../spec-configuration/containerFeaturesOrder';
88
import { DevContainerFeature } from '../../spec-configuration/configuration';
99
import { processFeatureIdentifier } from '../../spec-configuration/containerFeaturesConfiguration';
10+
import { runAsyncHandler } from '../utils';
1011

1112
export function featuresInfoOptions(y: Argv) {
1213
return y
@@ -21,7 +22,7 @@ export function featuresInfoOptions(y: Argv) {
2122
export type FeaturesInfoArgs = UnpackArgv<ReturnType<typeof featuresInfoOptions>>;
2223

2324
export function featuresInfoHandler(args: FeaturesInfoArgs) {
24-
(async () => await featuresInfo(args))().catch(console.error);
25+
runAsyncHandler(featuresInfo.bind(null, args));
2526
}
2627

2728
interface InfoJsonOutput {

src/spec-node/featuresCLI/package.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,14 +7,15 @@ import { createLog } from '../devContainers';
77
import { UnpackArgv } from '../devContainersSpecCLI';
88
import { doFeaturesPackageCommand } from './packageCommandImpl';
99
import { PackageCommandInput, PackageOptions } from '../collectionCommonUtils/package';
10+
import { runAsyncHandler } from '../utils';
1011

1112
export function featuresPackageOptions(y: Argv) {
1213
return PackageOptions(y, 'feature');
1314
}
1415

1516
export type FeaturesPackageArgs = UnpackArgv<ReturnType<typeof featuresPackageOptions>>;
1617
export function featuresPackageHandler(args: FeaturesPackageArgs) {
17-
(async () => await featuresPackage(args))().catch(console.error);
18+
runAsyncHandler(featuresPackage.bind(null, args));
1819
}
1920

2021
async function featuresPackage({

src/spec-node/featuresCLI/publish.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,7 @@ import { getArchiveName, OCICollectionFileName } from '../collectionCommonUtils/
1414
import { publishOptions } from '../collectionCommonUtils/publish';
1515
import { getCollectionRef, getRef, OCICollectionRef } from '../../spec-configuration/containerCollectionsOCI';
1616
import { doPublishCommand, doPublishMetadata } from '../collectionCommonUtils/publishCommandImpl';
17+
import { runAsyncHandler } from '../utils';
1718

1819
const collectionType = 'feature';
1920
export function featuresPublishOptions(y: Argv) {
@@ -23,7 +24,7 @@ export function featuresPublishOptions(y: Argv) {
2324
export type FeaturesPublishArgs = UnpackArgv<ReturnType<typeof featuresPublishOptions>>;
2425

2526
export function featuresPublishHandler(args: FeaturesPublishArgs) {
26-
(async () => await featuresPublish(args))().catch(console.error);
27+
runAsyncHandler(featuresPublish.bind(null, args));
2728
}
2829

2930
async function featuresPublish({

src/spec-node/featuresCLI/resolveDependencies.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import { DevContainerConfig, DevContainerFeature } from '../../spec-configuratio
1010
import { buildDependencyGraph, computeDependsOnInstallationOrder, generateMermaidDiagram } from '../../spec-configuration/containerFeaturesOrder';
1111
import { OCISourceInformation, processFeatureIdentifier, userFeaturesToArray } from '../../spec-configuration/containerFeaturesConfiguration';
1212
import { readLockfile } from '../../spec-configuration/lockfile';
13+
import { runAsyncHandler } from '../utils';
1314

1415
interface JsonOutput {
1516
installOrder?: {
@@ -29,7 +30,7 @@ export function featuresResolveDependenciesOptions(y: Argv) {
2930
export type featuresResolveDependenciesArgs = UnpackArgv<ReturnType<typeof featuresResolveDependenciesOptions>>;
3031

3132
export function featuresResolveDependenciesHandler(args: featuresResolveDependenciesArgs) {
32-
(async () => await featuresResolveDependencies(args))().catch(console.error);
33+
runAsyncHandler(featuresResolveDependencies.bind(null, args));
3334
}
3435

3536
async function featuresResolveDependencies({

src/spec-node/featuresCLI/test.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { LogLevel, mapLogLevel } from '../../spec-utils/log';
55
import { getPackageConfig, PackageConfiguration } from '../../spec-utils/product';
66
import { UnpackArgv } from '../devContainersSpecCLI';
77
import { doFeaturesTestCommand } from './testCommandImpl';
8+
import { runAsyncHandler } from '../utils';
89

910
// -- 'features test' command
1011
export function featuresTestOptions(y: Argv) {
@@ -67,7 +68,7 @@ export interface FeaturesTestCommandInput {
6768
}
6869

6970
export function featuresTestHandler(args: FeaturesTestArgs) {
70-
(async () => await featuresTest(args))().catch(console.error);
71+
runAsyncHandler(featuresTest.bind(null, args));
7172
}
7273

7374
async function featuresTest({

src/spec-node/templatesCLI/apply.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import { createLog } from '../devContainers';
55
import * as jsonc from 'jsonc-parser';
66
import { UnpackArgv } from '../devContainersSpecCLI';
77
import { fetchTemplate, SelectedTemplate, TemplateFeatureOption, TemplateOptions } from '../../spec-configuration/containerTemplatesOCI';
8+
import { runAsyncHandler } from '../utils';
89

910
export function templateApplyOptions(y: Argv) {
1011
return y
@@ -25,7 +26,7 @@ export function templateApplyOptions(y: Argv) {
2526
export type TemplateApplyArgs = UnpackArgv<ReturnType<typeof templateApplyOptions>>;
2627

2728
export function templateApplyHandler(args: TemplateApplyArgs) {
28-
(async () => await templateApply(args))().catch(console.error);
29+
runAsyncHandler(templateApply.bind(null, args));
2930
}
3031

3132
async function templateApply({

src/spec-node/templatesCLI/generateDocs.ts

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import { generateTemplatesDocumentation } from '../collectionCommonUtils/generat
44
import { createLog } from '../devContainers';
55
import { mapLogLevel } from '../../spec-utils/log';
66
import { getPackageConfig } from '../../spec-utils/product';
7+
import { runAsyncHandler } from '../utils';
78

89
// -- 'templates generate-docs' command
910
export function templatesGenerateDocsOptions(y: Argv) {
@@ -22,7 +23,7 @@ export function templatesGenerateDocsOptions(y: Argv) {
2223
export type TemplatesGenerateDocsArgs = UnpackArgv<ReturnType<typeof templatesGenerateDocsOptions>>;
2324

2425
export function templatesGenerateDocsHandler(args: TemplatesGenerateDocsArgs) {
25-
(async () => await templatesGenerateDocs(args))().catch(console.error);
26+
runAsyncHandler(templatesGenerateDocs.bind(null, args));
2627
}
2728

2829
export async function templatesGenerateDocs({

0 commit comments

Comments
 (0)