From 6b8c39143f8375680e260e5f8f204e4cf9031599 Mon Sep 17 00:00:00 2001 From: ewy Date: Tue, 14 Apr 2026 18:05:59 +0200 Subject: add loading of .env files --- env/env.go | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) create mode 100644 env/env.go (limited to 'env/env.go') diff --git a/env/env.go b/env/env.go new file mode 100644 index 0000000..1bf0bd1 --- /dev/null +++ b/env/env.go @@ -0,0 +1,60 @@ +package env + +import ( + "github.com/joho/godotenv" + "io/fs" + "os" + "path/filepath" + "pik/flags" + "pik/indexers/pikdex" + "pik/model" + "pik/spool" + "slices" +) + +func IsEnv(file string) bool { + options := []string{ + ".env", + } + for _, e := range *flags.Env { + options = append(options, + ".env-"+e, + ".env."+e, + e+".env") + } + return slices.Contains(options, file) +} + +func EnvFiles(f fs.FS, p string, deep bool) []string { + var result []string + dir, err := fs.ReadDir(f, p) + if err != nil { + return nil + } + for _, e := range dir { + if e.IsDir() && slices.Contains(pikdex.Roots, e.Name()) && deep { + result = append(result, EnvFiles(f, e.Name(), false)...) + } + if !e.IsDir() && IsEnv(e.Name()) { + result = append(result, filepath.Join(p, e.Name())) + } + } + return result +} + +func Get(src *model.Source) []string { + f := os.DirFS(src.Path) + var result []string + files := EnvFiles(f, ".", true) + for _, f := range files { + res, err := godotenv.Read(filepath.Join(src.Path, f)) + if err != nil { + spool.Warn("%v", err) + continue + } + for k, v := range res { + result = append(result, k+"="+v) + } + } + return result +} -- cgit v1.3