{"record":{"id":"42967c5e47bf1028","repo":"hasura/graphql-engine","slug":"cannot-validate-new-config-w","errorCode":null,"errorMessage":"cannot validate new config: %w","messagePattern":"cannot validate new config: %w","errorType":"console","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/commands/scripts_update_config_v2.go","lineNumber":428,"sourceCode":"\t\t\tos.Setenv(\"HASURA_GRAPHQL_ACTION_KIND\", ec.Viper.GetString(\"actions.kind\"))\n\t\t\tos.Setenv(\n\t\t\t\t\"HASURA_GRAPHQL_ACTION_HANDLER_WEBHOOK_BASEURL\",\n\t\t\t\tec.Viper.GetString(\"actions.handler_webhook_baseurl\"),\n\t\t\t)\n\n\t\t\tdefer func() {\n\t\t\t\t// unset env\n\t\t\t\tos.Unsetenv(\"HASURA_GRAPHQL_VERSION\")\n\t\t\t\tos.Unsetenv(\"HASURA_GRAPHQL_METADATA_DIRECTORY\")\n\t\t\t\tos.Unsetenv(\"HASURA_GRAPHQL_ACTION_KIND\")\n\t\t\t\tos.Unsetenv(\"HASURA_GRAPHQL_ACTION_HANDLER_WEBHOOK_BASEURL\")\n\t\t\t}()\n\n\t\t\tec.Spin(\"Reloading config file...\")\n\n\t\t\terr = ec.Validate()\n\t\t\tif err != nil {\n\t\t\t\treturn errors.E(op, fmt.Errorf(\"cannot validate new config: %w\", err))\n\t\t\t}\n\n\t\t\tdefer func() {\n\t\t\t\tif err != nil {\n\t\t\t\t\tos.RemoveAll(ec.MetadataDir)\n\t\t\t\t}\n\t\t\t}()\n\t\t\t// set codegen to nil, so that it is not exported in yaml\n\t\t\tec.Config.ActionConfig.Codegen = nil\n\t\t\t// run metadata export\n\t\t\tec.Spin(\"Exporting metadata...\")\n\n\t\t\tvar files map[string][]byte\n\n\t\t\tmdHandler := projectmetadata.NewHandlerFromEC(ec)\n\n\t\t\tfiles, err = mdHandler.ExportMetadata()\n\t\t\tif err != nil {","sourceCodeStart":410,"sourceCodeEnd":446,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/cli/commands/scripts_update_config_v2.go#L410-L446","documentation":"After setting HASURA_GRAPHQL_VERSION=2 and reloading, the CLI re-validates the project config; this fires when ec.Validate() rejects the config under v2 rules. It usually means required v2 settings (metadata_directory, actions endpoints, version) are missing or malformed after the env-var switch.","triggerScenarios":"Running update-project-v2 with no metadata_directory set in config.yaml, missing actions.kind / handler_webhook_baseurl, or a config.yaml that was hand-edited into an invalid shape before the upgrade.","commonSituations":"Upgrading a v1 project whose config.yaml lacks v2-required fields; stale env vars overriding viper values; YAML syntax errors introduced by manual edits.","solutions":["Set metadata_directory (and actions.kind, actions.handler_webhook_baseurl if actions are used) in config.yaml before re-running","Inspect config.yaml for syntax errors with a YAML linter","Ensure no stale HASURA_GRAPHQL_* env vars conflict with the new config","Re-run `hasura scripts update-project-v2`"],"exampleFix":"# before\nmetadata_directory:\n# after\nmetadata_directory: metadata","handlingStrategy":"validation","validationCode":"// pre-flight: confirm v2-required keys exist\nv := viper.New(); v.SetConfigFile(\"config.yaml\"); _ = v.ReadInConfig()\nif v.GetString(\"metadata_directory\") == \"\" { log.Fatal(\"set metadata_directory\") }","typeGuard":null,"tryCatchPattern":"if err := cmd.RunE(cmd, args); err != nil && strings.Contains(err.Error(), \"cannot validate new config\") {\n    // inspect config.yaml, add missing keys, re-run\n}","preventionTips":["Fill in metadata_directory and actions settings before upgrading","Lint config.yaml before running the script","Avoid manual edits mid-upgrade"],"tags":["config","validation","yaml","hasura-cli"],"backgroundTag":"config-validation-failed","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}