1
0
mirror of https://github.com/go-task/task.git synced 2025-04-18 12:04:04 +03:00
task/taskfile/dotenv.go
Pete Davison 6604b9a8cc
fix: special variable type errors in vars with no task context (#2107)
* fix: stop dotenv trying to fetch variables when no dotenv specified

* fix: set special variables to "" when they can't be calculated
2025-03-10 11:46:07 +00:00

42 lines
897 B
Go

package taskfile
import (
"fmt"
"os"
"github.com/joho/godotenv"
"github.com/go-task/task/v3/internal/filepathext"
"github.com/go-task/task/v3/internal/templater"
"github.com/go-task/task/v3/taskfile/ast"
)
func Dotenv(vars *ast.Vars, tf *ast.Taskfile, dir string) (*ast.Vars, error) {
env := ast.NewVars()
cache := &templater.Cache{Vars: vars}
for _, dotEnvPath := range tf.Dotenv {
dotEnvPath = templater.Replace(dotEnvPath, cache)
if dotEnvPath == "" {
continue
}
dotEnvPath = filepathext.SmartJoin(dir, dotEnvPath)
if _, err := os.Stat(dotEnvPath); os.IsNotExist(err) {
continue
}
envs, err := godotenv.Read(dotEnvPath)
if err != nil {
return nil, fmt.Errorf("error reading env file %s: %w", dotEnvPath, err)
}
for key, value := range envs {
if _, ok := env.Get(key); !ok {
env.Set(key, ast.Var{Value: value})
}
}
}
return env, nil
}