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, nilView on GitHub (pinned to 35bff19146)
Solutions
- Inspect the semicolon-separated segments to find which artifact upload failed
- Check artifact repository credentials, bucket existence, and network from the pod
- 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.