argoproj/argo-workflows · warning

ListObjects is currently not supported for this artifact typ

Error message

ListObjects is currently not supported for this artifact type, but it will be in a future version

What it means

The HTTP artifact driver does not implement ListObjects and returns a fixed placeholder error, since HTTP artifacts are single fetched URLs with nothing to enumerate. The method only exists to satisfy the ArtifactDriver interface. Any attempt to list HTTP artifacts fails with this exact message.

Source

Thrown at workflow/artifacts/http/http.go:189

	if outputArtifact.HTTP != nil && outputArtifact.HTTP.SaveStreamViaFile {
		return common.SaveStreamViaTempFile(reader, "http-upload-*", func(path string) error {
			return h.Save(ctx, path, outputArtifact)
		})
	}
	req, url, err := h.buildPutRequest(ctx, reader, outputArtifact)
	if err != nil {
		return err
	}
	return h.doPutRequest(req, url, "saving stream")
}

// Delete is unsupported for the http artifacts
func (h *ArtifactDriver) Delete(ctx context.Context, s *wfv1.Artifact) error {
	return common.ErrDeleteNotSupported
}

func (h *ArtifactDriver) ListObjects(ctx context.Context, artifact *wfv1.Artifact) ([]string, error) {
	return nil, fmt.Errorf("ListObjects is currently not supported for this artifact type, but it will be in a future version")
}

func (h *ArtifactDriver) IsDirectory(ctx context.Context, artifact *wfv1.Artifact) (bool, error) {
	return false, errors.New(errors.CodeNotImplemented, "IsDirectory currently unimplemented for http")
}

View on GitHub (pinned to 35bff19146)

Solutions

  1. Do not use list-dependent artifact features on http artifacts; reference the URL directly when managing files.
  2. Store artifacts that need enumeration in S3/GCS/Azure/OSS instead of serving them over plain HTTP.
  3. If deletion/GC of downloaded artifacts matters, use a real artifact repository backend for those artifacts.
  4. If you hit this unexpectedly, check the artifact's type field — an http: artifact was passed to a listing API.

Example fix

// before
inputs:
  artifacts:
    - name: data
      http:
        url: https://example.com/data.bin
// after (if listing/GC needed)
inputs:
  artifacts:
    - name: data
      s3:
        bucket: my-bucket
        key: data.bin
Defensive patterns

Strategy: fallback

Validate before calling

func supportsListObjects(artifactType string) bool {
	switch artifactType {
	case "s3", "gcs", "azure", "oss":
		return true
	default:
		return false
	}
}

Try / catch

keys, err := driver.ListObjects(ctx, art)
if err != nil && strings.Contains(err.Error(), "ListObjects is currently not supported") {
	// http artifacts have nothing to enumerate; handle without listing
}

Prevention

When it happens

Trigger: Calling ListObjects on an artifact of type `http:` (e.g. artifact GC or any prefix-enumeration feature) — the call fails unconditionally for http:// or https:// artifacts.

Common situations: Users pull input artifacts over HTTP and then enable archive/GC or other list-dependent features expecting enumeration; workflows mixing artifact types hit the error only for the http ones.

Related errors


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