hasura/graphql-engine · error
creating target seeds directory: %w
Error message
creating target seeds directory: %w
What it means
UpdateProjectV3 fails to create the seeds subdirectory for the target database (<seeds>/<targetDatabase>) while converting the project to config v3's per-database layout. It wraps the afero Mkdir error.
Source
Thrown at cli/internal/scripts/update-project-v3.go:179
return errors.E(op, fmt.Errorf("getting list of migrations to move: %w", err))
}
// move seed child directories
// get directory names to move
seedFilesToMove, err := getSeedFiles(opts.Fs, opts.SeedsAbsDirectoryPath)
if err != nil {
return errors.E(op, fmt.Errorf("getting list of seed files to move: %w", err))
}
// create a new directory for TargetDatabase
targetMigrationsDirectoryName := filepath.Join(opts.MigrationsAbsDirectoryPath, targetDatabase)
if err = opts.Fs.Mkdir(targetMigrationsDirectoryName, 0o755); err != nil {
return errors.E(op, fmt.Errorf("creating target migrations directory: %w", err))
}
// create a new directory for TargetDatabase
targetSeedsDirectoryName := filepath.Join(opts.SeedsAbsDirectoryPath, targetDatabase)
if err = opts.Fs.Mkdir(targetSeedsDirectoryName, 0o755); err != nil {
return errors.E(op, fmt.Errorf("creating target seeds directory: %w", err))
}
// move migration directories to target database directory
if err := copyMigrations(
opts.Fs,
migrationDirectoriesToMove,
opts.MigrationsAbsDirectoryPath,
targetMigrationsDirectoryName,
); err != nil {
return errors.E(op, fmt.Errorf("moving migrations to target database directory: %w", err))
}
// move seed directories to target database directory
if err := copyFiles(
opts.Fs,
seedFilesToMove,
opts.SeedsAbsDirectoryPath,
targetSeedsDirectoryName,
); err != nil {View on GitHub (pinned to 724551b9ae)
Solutions
- Inspect the wrapped error (EACCES/EEXIST/EROFS) and grant write access to the seeds directory
- Delete partially created seeds/<database> directory before re-running
- Verify the seeds path in config exists and is a writable directory
- Re-run the update-project-v3 script
Example fix
# before hasura scripts update-project-v3 # mkdir /path/to/seeds/postgres: permission denied # after sudo chown -R $USER seeds/ hasura scripts update-project-v3
Defensive patterns
Strategy: validation
Validate before calling
if _, err := os.Stat(filepath.Join(seedsDir, targetDB)); err == nil {
return fmt.Errorf("target seeds dir already exists; remove it first")
} Try / catch
if err := scripts.UpdateProjectV3(opts); err != nil {
if strings.Contains(err.Error(), "creating target seeds directory") { /* fix perms or remove existing dir */ }
} Prevention
- Ensure seeds/ is writable
- Clean partial runs before retrying
- Keep the project on a filesystem the CLI user can write
When it happens
Trigger: `hasura scripts update-project-v3` with an unwritable, read-only, or already-occupied seeds directory path (permissions denied, directory exists from a partial run, same-named file present).
Common situations: Seeds directory owned by another user, CI running as non-root against a protected volume, or re-running the migration script after it failed halfway.
Related errors
- creating target migrations directory: %w
- cannot create global config directory: %w
- creating metadata file %s failed: %w
- getting list of seed files to move: %w
- moving seeds to target database directory: %w
AI-assisted analysis of hasura/graphql-engine@724551b9ae (2026-08-28).
Data as JSON: /api/errors/b923c46bb10c65a9.
Report an issue: GitHub.