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 stringView on GitHub (pinned to 35bff19146)
Solutions
- Set exactly one recognized artifact type stanza (s3, git, http, raw, gcs, azure, oss, hdfs, or plugin) on the artifact.
- Check the controller/server version supports the artifact type you are using (e.g. plugin artifacts require recent Argo).
- 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
- Always set exactly one artifact type stanza per artifact.
- Lint workflows (argo lint) before submit — validation catches unknown artifact shapes.
- Pin the artifact types you use to features present in your controller's Argo version.
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
- failed to re-enter working directory %q after staging input
- failed to stat input artifact %q at %s: %w
- failed to create parent directory for artifact %q at %s: %w
- failed to stat artifact path %q at %s: %w
- failed to resolve parent of artifact path %q at %s: %w
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/cd69400fbefbf910.
Report an issue: GitHub.