1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950 |
- package taskfile
- import (
- "os"
- "github.com/joho/godotenv"
- "github.com/go-task/task/v3/internal/compiler"
- "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(c *compiler.Compiler, tf *ast.Taskfile, dir string) (*ast.Vars, error) {
- if len(tf.Dotenv) == 0 {
- return nil, nil
- }
- vars, err := c.GetTaskfileVariables()
- if err != nil {
- return nil, err
- }
- env := &ast.Vars{}
- 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, err
- }
- for key, value := range envs {
- if ok := env.Exists(key); !ok {
- env.Set(key, ast.Var{Value: value})
- }
- }
- }
- return env, nil
- }
|