argoproj/argo-workflows · error

aggregateError.String()

Error message

aggregateError.String()

What it means

SaveArtifacts aggregates the per-artifact upload errors from saveArtifact into one error, joined by '; '. It fires only after all output artifacts were attempted; successfully saved artifacts are still returned alongside the error.

Source

Thrown at workflow/executor/executor.go:481

	}

	var aggregateError strings.Builder
	for _, art := range we.Template.Outputs.Artifacts {
		span.AddEvent("upload artifact",
			trace.WithAttributes(attribute.KeyValue{Key: "file", Value: attribute.StringValue(art.Name)}))
		saved, err := we.saveArtifact(ctx, common.MainContainerName, &art)
		if err != nil {
			aggregateError.WriteString(err.Error())
			aggregateError.WriteString("; ")
		}
		if saved {
			artifacts = append(artifacts, art)
		}
	}
	if aggregateError.Len() == 0 {
		return artifacts, nil
	}
	return artifacts, errors.New(aggregateError.String())
}

// save artifact
// return whether artifact was in fact saved, and if there was an error
func (we *WorkflowExecutor) saveArtifact(ctx context.Context, containerName string, art *wfv1.Artifact) (bool, error) {
	logger := logging.RequireLoggerFromContext(ctx)
	// Determine the file path of where to find the artifact
	err := art.CleanPath()
	if err != nil {
		return false, err
	}
	ctx, span := we.Tracing.StartSaveArtifact(ctx)
	defer span.End()
	fileName, localArtPath, err := we.stageArchiveFile(ctx, containerName, art)
	if err != nil {
		if art.Optional && argoerrs.IsCode(argoerrs.CodeNotFound, err) {
			logger.WithField("name", art.Name).WithField("path", art.Path).WithError(err).Warn(ctx, "Ignoring optional artifact which does not exist in path")
			return false, nil

View on GitHub (pinned to 35bff19146)

Solutions

  1. Inspect the semicolon-separated segments to find which artifact upload failed
  2. Check artifact repository credentials, bucket existence, and network from the pod
  3. Fix the failing artifact config and retry the workflow
Defensive patterns

Strategy: retry

When it happens

Trigger: Thrown at workflow/executor/executor.go:481 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03). Data as JSON: /api/errors/c35299230ca8589c. Report an issue: GitHub.