{"record":{"id":"212784bb5fd62667","repo":"hasura/graphql-engine","slug":"cannot-write-migration-directory-w","errorCode":null,"errorMessage":"cannot write migration directory: %w","messagePattern":"cannot write migration directory: %w","errorType":"exception","errorClass":null,"httpStatus":null,"severity":"error","filePath":"cli/commands/init.go","lineNumber":295,"sourceCode":"\tif o.AdminSecret != \"\" {\n\t\tconfig.AdminSecret = o.AdminSecret\n\t}\n\n\t// write the config file\n\to.EC.Config = config\n\to.EC.ConfigFile = filepath.Join(o.EC.ExecutionDirectory, \"config.yaml\")\n\n\terr = o.EC.WriteConfig(nil)\n\tif err != nil {\n\t\treturn errors.E(op, fmt.Errorf(\"cannot write config file: %w\", err))\n\t}\n\n\t// create migrations directory\n\to.EC.MigrationDir = filepath.Join(o.EC.ExecutionDirectory, cli.DefaultMigrationsDirectory)\n\n\terr = os.MkdirAll(o.EC.MigrationDir, os.ModePerm)\n\tif err != nil {\n\t\treturn errors.E(op, fmt.Errorf(\"cannot write migration directory: %w\", err))\n\t}\n\n\tif config.Version >= cli.V2 {\n\t\t// create metadata directory\n\t\to.EC.MetadataDir = filepath.Join(o.EC.ExecutionDirectory, cli.DefaultMetadataDirectory)\n\n\t\terr = os.MkdirAll(o.EC.MetadataDir, os.ModePerm)\n\t\tif err != nil {\n\t\t\treturn errors.E(op, fmt.Errorf(\"cannot write metadata directory: %w\", err))\n\t\t}\n\n\t\terr = o.EC.Version.GetServerFeatureFlags()\n\t\tif err != nil {\n\t\t\to.EC.Logger.Warnf(\"error determining server feature flags: %v\", err)\n\t\t}\n\n\t\t// create metadata files\n\t\tplugins := make(metadataobject.Objects, 0)","sourceCodeStart":277,"sourceCodeEnd":313,"githubUrl":"https://github.com/hasura/graphql-engine/blob/724551b9ae87845594ef0408cff0e50eb6c90dc5/cli/commands/init.go#L277-L313","documentation":"os.MkdirAll failed for the migrations directory (<ExecutionDirectory>/migrations) during `hasura init`. Every init creates this directory regardless of config version.","triggerScenarios":"Migrations directory cannot be created: permissions, ENOTDIR on a path component, or read-only filesystem.","commonSituations":"Same as other init mkdir failures: restricted containers, quota, path collisions with files named 'migrations'.","solutions":["Verify writability of the project dir and that no file named 'migrations' exists","Free space / fix mount options","Re-run init in a clean directory"],"exampleFix":null,"handlingStrategy":"validation","validationCode":"if fi, err := os.Lstat(filepath.Join(dir, \"migrations\")); err == nil && !fi.IsDir() {\n    log.Fatal(\"'migrations' exists but is not a directory\")\n}","typeGuard":null,"tryCatchPattern":null,"preventionTips":["Ensure no regular files shadow migrations/metadata/seeds dirs","Verify writability before init"],"tags":["hasura","cli","init","migrations","mkdir"],"backgroundTag":"directory-create-failed","analyzedSha":"724551b9ae87845594ef0408cff0e50eb6c90dc5","analyzedAt":"2026-08-28T07:32:55.105Z","schemaVersion":2},"datasetVersion":"2026-08-28T11:17:15.048Z"}