argoproj/argo-workflows · error

failed to load non-plugin input artifacts: %w

Error message

failed to load non-plugin input artifacts: %w

What it means

In runSupervisorPreMain, artifact loading is parallelized with an errgroup; the goroutine calling LoadArtifactsWithoutPlugins wraps its error as "failed to load non-plugin input artifacts". This covers all input artifacts that are not fetched via artifact plugins (s3, gcs, git, http, raw, etc.); a failure in any of them fails the errgroup and the whole pre-main phase.

Source

Thrown at cmd/argoexec/commands/supervisor.go:153

	// heartbeat's initial RUNNING write (startStatusHeartbeat, before we get
	// here) has already overwritten it with a fresh mtime.
	return runSupervisorPreMain(ctx, wfExecutor, inputArtifactPluginNames())
}

// runSupervisorPreMain is the testable core of supervisorPreMain. Takes
// the plugin name list explicitly so tests don't have to mutate env vars.
func runSupervisorPreMain(ctx context.Context, stages preMainStages, pluginNames []wfv1.ArtifactPluginName) error {
	if err := stages.WriteTemplate(); err != nil {
		return fmt.Errorf("failed to write template: %w", err)
	}
	if err := stages.StageFiles(ctx); err != nil {
		return fmt.Errorf("failed to stage files: %w", err)
	}

	g, gctx := errgroup.WithContext(ctx)
	g.Go(func() error {
		if err := stages.LoadArtifactsWithoutPlugins(gctx); err != nil {
			return fmt.Errorf("failed to load non-plugin input artifacts: %w", err)
		}
		return nil
	})
	for _, name := range pluginNames {
		g.Go(func() error {
			if err := stages.LoadArtifactsFromPlugin(gctx, name); err != nil {
				return fmt.Errorf("failed to load input artifacts from plugin %q: %w", name, err)
			}
			return nil
		})
	}
	return g.Wait()
}

// inputArtifactPluginNames reads the controller-supplied list of input
// artifact plugin names from the supervisor's environment.
func inputArtifactPluginNames() []wfv1.ArtifactPluginName {
	raw := common.SplitPluginNames(os.Getenv(common.EnvVarInputArtifactPluginNames))

View on GitHub (pinned to 35bff19146)

Solutions

  1. Read the wrapped cause to see which artifact and backend failed
  2. Verify artifact repository credentials and bucket/container configuration
  3. Confirm the artifact key/path still exists in the storage backend
  4. Test network connectivity from the pod to the artifact endpoint
Defensive patterns

Strategy: retry

Validate before calling

// before submit: confirm artifacts are reachable with the configured credentials
// aws s3 ls s3://<bucket>/<key>  # or gsutil/gcloud equivalent

Try / catch

// artifact downloads are often transient — retry at the workflow level
// retryStrategy:
//   limit: "3"
//   retryPolicy: "TransientError"
// and in code: use util/errors.IsTransientErr(ctx, err) to decide retries

Prevention

When it happens

Trigger: supervisorPreMain's errgroup goroutine: LoadArtifactsWithoutPlugins returned an error while downloading a non-plugin input artifact — bad credentials, nonexistent key, unsupported backend, or network failure.

Common situations: Expired/rotated S3 or GCS credentials in the artifact repository config; deleted artifact keys referenced by the Workflow; egress firewalls blocking storage endpoints; artifact plugin wrongly excluded from the artifact's driver path.

Related errors


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