From 60bf70c5b847d6aa5c4af6b6e80810bcc00c796d Mon Sep 17 00:00:00 2001 From: Ogunaru Date: Wed, 11 Mar 2026 10:57:53 +0900 Subject: [PATCH] =?UTF-8?q?fix=20Prisma=207=20=ED=99=98=EA=B2=BD=EC=97=90?= =?UTF-8?q?=EC=84=9C=20DB=20URL=EB=A5=BC=20=EA=B0=90=EC=A7=80=ED=95=98?= =?UTF-8?q?=EC=A7=80=20=EB=AA=BB=ED=95=A8=20Fixes=20#10?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pkg/prisma/datasource.go | 40 ++++++++++++++++++++++++++++++---------- 1 file changed, 30 insertions(+), 10 deletions(-) diff --git a/pkg/prisma/datasource.go b/pkg/prisma/datasource.go index a8affb6..bb2d05e 100644 --- a/pkg/prisma/datasource.go +++ b/pkg/prisma/datasource.go @@ -315,22 +315,42 @@ func resolveEnvVar(projectDir, envVar string) string { return val } - // 2. Check .env in project root - if val := readEnvFile(filepath.Join(projectDir, ".env"), envVar); val != "" { - return val + // Search workspace-local env files first, then walk parent directories + // so monorepo-style root .env files are still discovered. + for _, path := range envSearchPaths(projectDir) { + if val := readEnvFile(path, envVar); val != "" { + return val + } } - // 3. Check .env in schema directory - if val := readEnvFile(filepath.Join(projectDir, SchemaDirName, ".env"), envVar); val != "" { - return val + return "" +} + +func envSearchPaths(projectDir string) []string { + paths := make([]string, 0, 5) + seen := make(map[string]struct{}) + addPath := func(path string) { + if _, ok := seen[path]; ok { + return + } + seen[path] = struct{}{} + paths = append(paths, path) } - // 4. Check .env in prisma directory - if val := readEnvFile(filepath.Join(projectDir, "prisma", ".env"), envVar); val != "" { - return val + addPath(filepath.Join(projectDir, ".env")) + addPath(filepath.Join(projectDir, SchemaDirName, ".env")) + + currentDir := projectDir + for i := 0; i < 3; i++ { + parentDir := filepath.Dir(currentDir) + if parentDir == currentDir { + break + } + addPath(filepath.Join(parentDir, ".env")) + currentDir = parentDir } - return "" + return paths } // readEnvFile reads a specific environment variable from a .env file