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
- Read the wrapped cause to see which artifact and backend failed
- Verify artifact repository credentials and bucket/container configuration
- Confirm the artifact key/path still exists in the storage backend
- 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
- Add retryStrategy to templates that download input artifacts
- Rotate/verify artifact credentials before expiry
- Check artifact keys exist in the backend before referencing them
- Allow pod egress to storage endpoints in NetworkPolicies
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
- failed to load input artifacts from plugin %q: %w
- %w
- %w
- failed to write template: %w
- failed to stage files: %w
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/2481a08dd6070f2e.
Report an issue: GitHub.