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

  1. Check the exact artifact name via `argo get` on the node
  2. 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.