From 2173691832312bff9ff1145f11182e808b90167f Mon Sep 17 00:00:00 2001 From: kumavis Date: Wed, 2 Oct 2024 18:07:37 -1000 Subject: [PATCH] feat(plugin-workspace-tools): report errors for all non-zero exit codes --- .../sources/commands/foreach.ts | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/packages/plugin-workspace-tools/sources/commands/foreach.ts b/packages/plugin-workspace-tools/sources/commands/foreach.ts index 47668fc447c8..25a9e3bd843f 100644 --- a/packages/plugin-workspace-tools/sources/commands/foreach.ts +++ b/packages/plugin-workspace-tools/sources/commands/foreach.ts @@ -405,7 +405,7 @@ export default class WorkspacesForeachCommand extends BaseCommand { needsProcessing.delete(identHash); processing.delete(workspace.anchoredDescriptor.descriptorHash); - return exitCode; + return {workspace, exitCode}; })); // If we're not executing processes in parallel we can just wait for it @@ -424,13 +424,15 @@ export default class WorkspacesForeachCommand extends BaseCommand { return; } - const exitCodes: Array = await Promise.all(commandPromises); - const errorCode = exitCodes.find(code => code !== 0); + const results: Array<{ workspace: Workspace, exitCode: number }> = await Promise.all(commandPromises); + results.forEach(({workspace, exitCode}) => { + if (exitCode !== 0) { + report.reportError(MessageName.UNNAMED, `The command failed in workspace ${structUtils.prettyLocator(configuration, workspace.anchoredLocator)}`); + } + }); - // The order in which the exit codes will be processed is fairly - // opaque, so better just return a generic "1" for determinism. - if (finalExitCode === null) - finalExitCode = typeof errorCode !== `undefined` ? 1 : finalExitCode; + const exitCodes = results.map(result => result.exitCode); + const errorCode = exitCodes.find(code => code !== 0); if ((this.topological || this.topologicalDev) && typeof errorCode !== `undefined`) { report.reportError(MessageName.UNNAMED, `The command failed for workspaces that are depended upon by other workspaces; can't satisfy the dependency graph`);