argoproj/argo-workflows · error

unsupported artifact driver

Error message

unsupported artifact driver

What it means

ErrUnsupportedDriver is a sentinel error returned by newDriver/NewDriver when an artifact's type does not match any of the built-in artifact drivers (s3, gcs, azure, oss, hdfs, git, http, raw, plugin). It surfaces in the executor as a 400 BadRequest 'Unsupported artifact driver for <name>'.

Source

Thrown at workflow/artifacts/artifacts.go:24

	gohttp "net/http"

	wfv1 "github.com/argoproj/argo-workflows/v4/pkg/apis/workflow/v1alpha1"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/azure"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/common"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/gcs"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/git"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/hdfs"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/http"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/logging"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/oss"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/plugin"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/raw"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/resource"
	"github.com/argoproj/argo-workflows/v4/workflow/artifacts/s3"
	"github.com/argoproj/argo-workflows/v4/workflow/tracing"
)

var ErrUnsupportedDriver = fmt.Errorf("unsupported artifact driver")

type NewDriverFunc func(ctx context.Context, art *wfv1.Artifact, ri resource.Interface) (common.ArtifactDriver, error)

// NewDriver initializes an instance of an artifact driver
func NewDriver(ctx context.Context, art *wfv1.Artifact, ri resource.Interface) (common.ArtifactDriver, error) {
	drv, err := newDriver(ctx, art, ri)
	if err != nil {
		return nil, err
	}
	return logging.New(drv), nil
}

func newDriver(ctx context.Context, art *wfv1.Artifact, ri resource.Interface) (common.ArtifactDriver, error) {
	if art.S3 != nil {
		var accessKey string
		var secretKey string
		var sessionToken string
		var serverSideCustomerKey string

View on GitHub (pinned to 35bff19146)

Solutions

  1. Set exactly one recognized artifact type stanza (s3, git, http, raw, gcs, azure, oss, hdfs, or plugin) on the artifact.
  2. Check the controller/server version supports the artifact type you are using (e.g. plugin artifacts require recent Argo).
  3. Verify the rendered template actually populates the artifact type — an empty artifact yields the same error.

Example fix

// before
artifacts:
  - name: output
    path: /tmp/out
    s3:
      key: my/key
# after — type must actually be registered; here 'gcs' was intended
artifacts:
  - name: output
    path: /tmp/out
    gcs:
      bucket: my-bucket
      key: my/key
Defensive patterns

Strategy: validation

Validate before calling

func hasArtifactDriver(art *wfv1.Artifact) bool {
	return art != nil && (art.S3 != nil || art.GCS != nil || art.Azure != nil || art.OSS != nil ||
		art.HDFS != nil || art.Git != nil || art.HTTP != nil || art.Raw != nil || art.Plugin != nil)
}

Type guard

func isSupportedArtifact(art *wfv1.Artifact) bool { return hasArtifactDriver(art) }

Try / catch

driver, err := artifacts.NewDriver(ctx, art, ri)
if errors.Is(err, artifacts.ErrUnsupportedDriver) {
	return argoerrs.Errorf(argoerrs.CodeBadRequest, "Unsupported artifact driver for %s", art.Name)
}
if err != nil { return err }

Prevention

When it happens

Trigger: Calling artifacts.NewDriver with a wfv1.Artifact whose type field (S3/GCS/Azure/OSS/HDFS/Git/HTTP/Raw/Plugin) is all unset or is a type the current build does not implement; newDriver falls through every type switch case and returns the sentinel at artifacts.go:290.

Common situations: Submitting a workflow with a typo'd or missing artifact type; using an artifact type introduced in a newer Argo version while running an older controller; generating artifacts programmatically and forgetting to set exactly one type stanza.

Related errors


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