{"record":{"id":"d788021246cd8204","repo":"hasura/graphql-engine","slug":"reading-metadata-file-w-d78802","errorCode":null,"errorMessage":"reading metadata file: %w","messagePattern":"reading metadata file: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/pkg/metadata/mode_handlers.go","lineNumber":141,"sourceCode":"type metadataModeJSONHandler struct{}\n\nfunc (m *metadataModeJSONHandler) Apply(p *ProjectMetadata) (io.Reader, error) {\n\tvar op errors.Op = \"metadata.metadataModeJSONHandler.Apply\"\n\n\tr, err := apply(p, p.ec.MetadataMode)\n\tif err != nil {\n\t\treturn nil, errors.E(op, err)\n\t}\n\n\treturn r, nil\n}\n\nfunc (m *metadataModeJSONHandler) Parse(p *ProjectMetadata) (io.Reader, error) {\n\tvar op errors.Op = \"metadata.metadataModeJSONHandler.Parse\"\n\n\tmetadataJSON, err := os.ReadFile(p.ec.MetadataFile)\n\tif err != nil {\n\t\treturn nil, errors.E(op, fmt.Errorf(\"reading metadata file: %w\", err))\n\t}\n\n\treturn bytes.NewReader(metadataJSON), nil\n}\n\nfunc (m *metadataModeJSONHandler) Diff(p *ProjectMetadata) (io.Reader, error) {\n\tvar op errors.Op = \"metadata.metadataModeJSONHandler.Diff\"\n\n\tr, err := diff(p)\n\tif err != nil {\n\t\treturn nil, errors.E(op, err)\n\t}\n\n\treturn r, nil\n}\n\nfunc (m *metadataModeJSONHandler) Export(p *ProjectMetadata) (io.Reader, error) {\n\tvar op errors.Op = \"metadata.metadataModeDirectoryHandler.Export\"","sourceCodeStart":123,"sourceCodeEnd":159,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/cli/pkg/metadata/mode_handlers.go#L123-L159","documentation":"The JSON-mode metadata handler reads the file at ec.MetadataFile (default metadata.json) with os.ReadFile; any IO failure becomes 'reading metadata file'. Typically the file doesn't exist (metadata is in YAML/directory format) or isn't readable.","triggerScenarios":"Running a metadata command when the CLI is configured for JSON metadata format but metadata.json is absent — e.g. project uses metadata.yaml while config expects JSON — or the file lacks read permission.","commonSituations":"Fresh clone where metadata.json is gitignored; project switched to metadata.yaml but config still points at JSON; wrong working directory; file deleted or renamed.","solutions":["Check that the file in `metadata_file` (config.yaml) exists relative to the project root","If your metadata is YAML, set the correct format/filename in config.yaml (metadata_file: metadata.yaml)","Create or restore metadata.json (git checkout or `hasura metadata export` after switching format)","Verify read permissions"],"exampleFix":"# before (config.yaml)\nmetadata_file: metadata.json   # file doesn't exist\n\n# after\nmetadata_file: metadata.yaml","handlingStrategy":"validation","validationCode":"if _, err := os.Stat(ec.MetadataFile); err != nil {\n    return fmt.Errorf(\"metadata file %s missing; run hasura metadata export\", ec.MetadataFile)\n}","typeGuard":null,"tryCatchPattern":"if _, err := h.Parse(&p); err != nil {\n    if strings.Contains(err.Error(), \"reading metadata file\") {\n        // fix metadata_file in config.yaml or restore the file\n    }\n}","preventionTips":["Commit metadata files to VCS","Keep metadata_file format consistent with actual file (json vs yaml)","Run commands from the project root"],"tags":["metadata","file-not-found","json","hasura"],"backgroundTag":"file-read-error","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}