argoproj/argo-workflows · warning
CodeNotImplemented
CodeNotImplemented
Error message
IsDirectory currently unimplemented for raw
What it means
The raw artifact driver (in-cluster data mounted via volumes) does not implement IsDirectory and returns CodeNotImplemented. Raw artifacts referencing a path cannot be probed for directory-ness through this interface.
Source
Thrown at workflow/artifacts/raw/raw.go:57
return errors.Errorf(errors.CodeBadRequest, "Raw output artifacts unsupported")
}
// SaveStream is unsupported for raw output artifacts
func (a *ArtifactDriver) SaveStream(ctx context.Context, reader io.Reader, artifact *wfv1.Artifact) error {
return errors.Errorf(errors.CodeBadRequest, "Raw output artifacts unsupported")
}
// Delete is unsupported for raw output artifacts
func (a *ArtifactDriver) Delete(ctx context.Context, s *wfv1.Artifact) error {
return common.ErrDeleteNotSupported
}
func (a *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 (a *ArtifactDriver) IsDirectory(ctx context.Context, artifact *wfv1.Artifact) (bool, error) {
return false, errors.New(errors.CodeNotImplemented, "IsDirectory currently unimplemented for raw")
}
View on GitHub (pinned to 35bff19146)
Solutions
- Treat raw artifacts as files or pre-mount the volume and check with os.Stat in your own step.
- Use a driver that supports directories (S3/GCS/raw alternatives) if directory semantics are required.
- Patch the driver to implement IsDirectory with os.Stat(raw.Source.Path).IsDir().
Example fix
// after (custom patch)
func (a *ArtifactDriver) IsDirectory(ctx context.Context, artifact *wfv1.Artifact) (bool, error) {
st, err := os.Stat(artifact.Raw.Source)
if err != nil { return false, err }
return st.IsDir(), nil
} Defensive patterns
Strategy: fallback
Type guard
if art.Raw != nil {
// raw driver has no IsDirectory; os.Stat the source directly
} Try / catch
isDir, err := driver.IsDirectory(ctx, art)
if err != nil && strings.Contains(err.Error(), "currently unimplemented") {
isDir = false
} Prevention
- Check raw artifact paths directly with os.Stat in your own step
- Avoid directory semantics for raw artifacts
- Prefer S3/GCS drivers when directory listing is needed
When it happens
Trigger: Calling IsDirectory(ctx, artifact) on a raw artifact — e.g. artifact server or UI attempting directory expansion of a raw artifact path.
Common situations: Browsing raw artifacts in the UI; generic code paths that call IsDirectory on every artifact type.
Related errors
- CodeNotImplemented
- CodeNotImplemented
- ListObjects is currently not supported for this artifact typ
- CodeNotFound
- CodeNotFound
AI-assisted analysis of argoproj/argo-workflows@35bff19146 (2026-09-03).
Data as JSON: /api/errors/01f030961a7d27c2.
Report an issue: GitHub.