diff --git a/task_test.go b/task_test.go index 4e31de427f..bfd3c554b7 100644 --- a/task_test.go +++ b/task_test.go @@ -1657,6 +1657,18 @@ func TestDotenvHasEnvVarInPath(t *testing.T) { tt.Run(t) } +func TestTaskDotenvParseErrorMessage(t *testing.T) { + e := task.Executor{ + Dir: "testdata/dotenv/parse_error", + } + + path, _ := filepath.Abs(filepath.Join(e.Dir, ".env-with-error")) + expected := fmt.Sprintf("error reading env file %s:", path) + + err := e.Setup() + require.ErrorContains(t, err, expected) +} + func TestTaskDotenv(t *testing.T) { tt := fileContentTest{ Dir: "testdata/dotenv_task/default", diff --git a/taskfile/dotenv.go b/taskfile/dotenv.go index 3971a9d233..cabb40168c 100644 --- a/taskfile/dotenv.go +++ b/taskfile/dotenv.go @@ -1,6 +1,7 @@ package taskfile import ( + "fmt" "os" "github.com/joho/godotenv" @@ -37,7 +38,7 @@ func Dotenv(c *compiler.Compiler, tf *ast.Taskfile, dir string) (*ast.Vars, erro envs, err := godotenv.Read(dotEnvPath) if err != nil { - return nil, err + return nil, fmt.Errorf("error reading env file %s: %w", dotEnvPath, err) } for key, value := range envs { if ok := env.Exists(key); !ok { diff --git a/testdata/dotenv/parse_error/.env-with-error b/testdata/dotenv/parse_error/.env-with-error new file mode 100644 index 0000000000..3286e2924a --- /dev/null +++ b/testdata/dotenv/parse_error/.env-with-error @@ -0,0 +1,2 @@ +#intentional parse error +SOME_VAR diff --git a/testdata/dotenv/parse_error/Taskfile.yml b/testdata/dotenv/parse_error/Taskfile.yml new file mode 100644 index 0000000000..37623e77d8 --- /dev/null +++ b/testdata/dotenv/parse_error/Taskfile.yml @@ -0,0 +1,8 @@ +version: '3' + +dotenv: ['.env-with-error'] + +tasks: + default: + cmd: "true" +