argoproj/argo-workflows · error
artifact not found: %s, isInput=%t, Workflow Status=%+v
Error message
artifact not found: %s, isInput=%t, Workflow Status=%+v
What it means
The node was found but neither its inputs nor outputs contain an artifact with the requested name (isInput selects which map is searched). The message dumps the whole workflow status to help spot the mismatch between requested and actual artifact names.
Source
Thrown at server/artifacts/artifact_server.go:689
func (a *ArtifactServer) getArtifactAndDriver(ctx context.Context, nodeID, artifactName string, isInput bool, wf *wfv1.Workflow, fileName *string) (*wfv1.Artifact, common.ArtifactDriver, error) {
logger := logging.RequireLoggerFromContext(ctx)
kubeClient := auth.GetKubeClient(ctx)
var art *wfv1.Artifact
nodeStatus, err := wf.Status.Nodes.Get(nodeID)
if err != nil {
logger.WithError(err).WithField("nodeID", nodeID).Error(ctx, "Was unable to retrieve node")
return nil, nil, fmt.Errorf("was not able to retrieve node")
}
if isInput {
art = nodeStatus.Inputs.GetArtifactByName(artifactName)
} else {
art = nodeStatus.Outputs.GetArtifactByName(artifactName)
}
if art == nil {
return nil, nil, fmt.Errorf("artifact not found: %s, isInput=%t, Workflow Status=%+v", artifactName, isInput, wf.Status)
}
// Artifact Location can be defined in various places:
// 1. In the Artifact itself
// 2. Defined by Controller configmap
// 3. Workflow spec defines artifactRepositoryRef which is a ConfigMap which defines the location
// 4. Template defines ArchiveLocation
// 5. Inline Template
var archiveLocation *wfv1.ArtifactLocation
templateNode, err := wf.Status.Nodes.Get(nodeID)
if err != nil {
logger.WithError(err).WithField("nodeID", nodeID).Error(ctx, "was unable to retrieve node")
return nil, nil, fmt.Errorf("unable to get artifact and driver; could not get node for %s: %w", nodeID, err)
}
templateName := util.GetTemplateFromNode(*templateNode)
if templateName != "" {
template := wf.GetTemplateByName(templateName)View on GitHub (pinned to 35bff19146)
Solutions
- Check the exact artifact name via `argo get` on the node
- Distinguish input vs output artifacts — artifacts declared under outputs are not in inputs
Defensive patterns
Strategy: validation
When it happens
Trigger: Thrown at server/artifacts/artifact_server.go:689 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/a2058664edb9dc22.
Report an issue: GitHub.