|
11 | 11 | import static io.harness.beans.sweepingoutputs.CISweepingOutputNames.CODE_BASE_CONNECTOR_REF; |
12 | 12 | import static io.harness.data.structure.EmptyPredicate.isEmpty; |
13 | 13 | import static io.harness.data.structure.EmptyPredicate.isNotEmpty; |
| 14 | +import static io.harness.data.structure.HarnessStringUtils.emptyIfNull; |
14 | 15 | import static io.harness.steps.StepUtils.buildAbstractions; |
15 | 16 |
|
16 | 17 | import static java.util.Collections.singletonList; |
|
49 | 50 | import io.harness.ci.utils.HostedVmSecretResolver; |
50 | 51 | import io.harness.data.structure.CollectionUtils; |
51 | 52 | import io.harness.delegate.TaskSelector; |
| 53 | +import io.harness.delegate.beans.ErrorNotifyResponseData; |
52 | 54 | import io.harness.delegate.beans.TaskData; |
53 | 55 | import io.harness.delegate.beans.ci.CIExecuteStepTaskParams; |
54 | 56 | import io.harness.delegate.beans.ci.vm.CIVmExecuteStepTaskParams; |
|
61 | 63 | import io.harness.delegate.task.stepstatus.artifact.Artifact; |
62 | 64 | import io.harness.delegate.task.stepstatus.artifact.ArtifactMetadata; |
63 | 65 | import io.harness.encryption.Scope; |
| 66 | +import io.harness.exception.ExceptionUtils; |
64 | 67 | import io.harness.exception.ngexception.CIStageExecutionException; |
65 | 68 | import io.harness.execution.CIDelegateTaskExecutor; |
66 | 69 | import io.harness.helper.SerializedResponseDataHelper; |
@@ -269,9 +272,13 @@ public StepResponse handleVmStepResponse(Ambiance ambiance, String stepIdentifie |
269 | 272 | VmTaskExecutionResponse taskResponse = filterVmStepResponse(responseDataMap); |
270 | 273 | if (taskResponse == null) { |
271 | 274 | log.error("stepStatusTaskResponseData should not be null for step {}", stepIdentifier); |
| 275 | + String errorMessage = filterVmStepErrorResponse(responseDataMap); |
272 | 276 | return StepResponse.builder() |
273 | 277 | .status(Status.FAILED) |
274 | | - .failureInfo(FailureInfo.newBuilder().addAllFailureTypes(EnumSet.of(FailureType.APPLICATION_FAILURE)).build()) |
| 278 | + .failureInfo(FailureInfo.newBuilder() |
| 279 | + .setErrorMessage(errorMessage) |
| 280 | + .addAllFailureTypes(EnumSet.of(FailureType.APPLICATION_FAILURE)) |
| 281 | + .build()) |
275 | 282 | .build(); |
276 | 283 | } |
277 | 284 |
|
@@ -443,6 +450,18 @@ private VmTaskExecutionResponse filterVmStepResponse(Map<String, ResponseData> r |
443 | 450 | .orElse(null); |
444 | 451 | } |
445 | 452 |
|
| 453 | + private String filterVmStepErrorResponse(Map<String, ResponseData> responseDataMap) { |
| 454 | + // Filter error response from step |
| 455 | + for (Map.Entry<String, ResponseData> entry : responseDataMap.entrySet()) { |
| 456 | + ResponseData responseData = entry.getValue(); |
| 457 | + if (responseData instanceof ErrorNotifyResponseData) { |
| 458 | + return emptyIfNull(ExceptionUtils.getMessage( |
| 459 | + new CIStageExecutionException(((ErrorNotifyResponseData) responseData).getErrorMessage()))); |
| 460 | + } |
| 461 | + } |
| 462 | + return "Error while executing step, please validate the configuration or reach out to [email protected]"; |
| 463 | + } |
| 464 | + |
446 | 465 | private void logBackgroundStepForBackwardCompatibility( |
447 | 466 | CIStepInfo stepInfo, String completeIdentifier, String identifier, String planExecutionId) { |
448 | 467 | // Right now background step only takes stepGroup id upto 1 level. Logging this to check which all pipelines |
|
0 commit comments