{"record":{"id":"01f030961a7d27c2","repo":"argoproj/argo-workflows","slug":"codenotimplemented-01f030","errorCode":"CodeNotImplemented","errorMessage":"IsDirectory currently unimplemented for raw","messagePattern":"IsDirectory currently unimplemented for raw","errorType":"error_code","errorClass":null,"httpStatus":null,"severity":"warning","filePath":"workflow/artifacts/raw/raw.go","lineNumber":57,"sourceCode":"\treturn errors.Errorf(errors.CodeBadRequest, \"Raw output artifacts unsupported\")\n}\n\n// SaveStream is unsupported for raw output artifacts\nfunc (a *ArtifactDriver) SaveStream(ctx context.Context, reader io.Reader, artifact *wfv1.Artifact) error {\n\treturn errors.Errorf(errors.CodeBadRequest, \"Raw output artifacts unsupported\")\n}\n\n// Delete is unsupported for raw output artifacts\nfunc (a *ArtifactDriver) Delete(ctx context.Context, s *wfv1.Artifact) error {\n\treturn common.ErrDeleteNotSupported\n}\n\nfunc (a *ArtifactDriver) ListObjects(ctx context.Context, artifact *wfv1.Artifact) ([]string, error) {\n\treturn nil, fmt.Errorf(\"ListObjects is currently not supported for this artifact type, but it will be in a future version\")\n}\n\nfunc (a *ArtifactDriver) IsDirectory(ctx context.Context, artifact *wfv1.Artifact) (bool, error) {\n\treturn false, errors.New(errors.CodeNotImplemented, \"IsDirectory currently unimplemented for raw\")\n}\n","sourceCodeStart":39,"sourceCodeEnd":59,"githubUrl":"https://github.com/argoproj/argo-workflows/blob/35bff19146f5a6ada77468c431f2624bd577e373/workflow/artifacts/raw/raw.go#L39-L59","documentation":"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.","triggerScenarios":"Calling IsDirectory(ctx, artifact) on a raw artifact — e.g. artifact server or UI attempting directory expansion of a raw artifact path.","commonSituations":"Browsing raw artifacts in the UI; generic code paths that call IsDirectory on every artifact type.","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()."],"exampleFix":"// after (custom patch)\nfunc (a *ArtifactDriver) IsDirectory(ctx context.Context, artifact *wfv1.Artifact) (bool, error) {\n\tst, err := os.Stat(artifact.Raw.Source)\n\tif err != nil { return false, err }\n\treturn st.IsDir(), nil\n}","handlingStrategy":"fallback","validationCode":null,"typeGuard":"if art.Raw != nil {\n    // raw driver has no IsDirectory; os.Stat the source directly\n}","tryCatchPattern":"isDir, err := driver.IsDirectory(ctx, art)\nif err != nil && strings.Contains(err.Error(), \"currently unimplemented\") {\n    isDir = false\n}","preventionTips":["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"],"tags":["raw","unimplemented","artifact"],"backgroundTag":"artifact-driver-not-implemented","analyzedSha":"35bff19146f5a6ada77468c431f2624bd577e373","analyzedAt":"2026-09-03T19:34:35.908Z","contentChangedAt":"2026-09-03T19:34:35.908Z","schemaVersion":2},"datasetVersion":"2026-09-08T10:18:20.063Z"}