1
0
mirror of https://github.com/go-task/task.git synced 2025-04-25 12:25:07 +02:00

#378 - allow for missing env files as they may be bootstrapped.

This commit is contained in:
Chris Garrett 2020-10-03 16:39:58 -06:00
parent ce4ac97269
commit c6138a0660
5 changed files with 30 additions and 31 deletions

View File

@ -819,7 +819,7 @@ func TestShortTaskNotation(t *testing.T) {
func TestDotenvShouldIncludeAllEnvFiles(t *testing.T) {
tt := fileContentTest{
Dir: "testdata/dotenv",
Dir: "testdata/dotenv/default",
Target: "default",
TrimSpace: false,
Files: map[string]string{
@ -829,26 +829,9 @@ func TestDotenvShouldIncludeAllEnvFiles(t *testing.T) {
tt.Run(t)
}
func TestDotenvShouldErrorWithIncludeEnvPath(t *testing.T) {
const dir = "testdata/dotenv"
const entry = "Taskfile-errors1.yml"
var buff bytes.Buffer
e := task.Executor{
Dir: dir,
Entrypoint: entry,
Summary: true,
Stdout: &buff,
Stderr: &buff,
}
err := e.Setup()
assert.Error(t, err)
assert.Contains(t, err.Error(), "no such file")
}
func TestDotenvShouldErrorWhenIncludingDependantDotenvs(t *testing.T) {
const dir = "testdata/dotenv"
const entry = "Taskfile-errors2.yml"
const dir = "testdata/dotenv/error_included_envs"
const entry = "Taskfile.yml"
var buff bytes.Buffer
e := task.Executor{
@ -863,3 +846,15 @@ func TestDotenvShouldErrorWhenIncludingDependantDotenvs(t *testing.T) {
assert.Error(t, err)
assert.Contains(t, err.Error(), "move the dotenv")
}
func TestDotenvShouldAllowMissingEnv(t *testing.T) {
tt := fileContentTest{
Dir: "testdata/dotenv/missing_env",
Target: "default",
TrimSpace: false,
Files: map[string]string{
"include.txt": "INCLUDE1='' INCLUDE2=''\n",
},
}
tt.Run(t)
}

View File

@ -42,14 +42,18 @@ func Taskfile(dir string, entrypoint string) (*taskfile.Taskfile, error) {
if !filepath.IsAbs(dotEnvPath) {
dotEnvPath = filepath.Join(dir, dotEnvPath)
}
envs, err := godotenv.Read(dotEnvPath)
if err != nil {
return nil, err
}
for key, value := range envs {
if _, ok := t.Env.Mapping[key]; !ok {
t.Env.Set(key, taskfile.Var{Static: value})
// allow for missing env files since they may be created by a bootstrap task
if _, err := os.Stat(dotEnvPath); !os.IsNotExist(err) {
envs, err := godotenv.Read(dotEnvPath)
if err != nil {
return nil, err
}
for key, value := range envs {
if _, ok := t.Env.Mapping[key]; !ok {
t.Env.Set(key, taskfile.Var{Static: value})
}
}
} else {
}
}
}

View File

@ -1,8 +1,8 @@
version: '3'
dotenv: ['include1/.env', 'include1/envs/.env', 'file-does-not-exist']
dotenv: ['../include1/.env', '../include1/envs/.env']
tasks:
default:
cmds:
- echo "INCLUDE1='$INCLUDE1' INCLUDE2='$INCLUDE2'" > include-errors1.txt
- echo "INCLUDE1='$INCLUDE1' INCLUDE2='$INCLUDE2'" > include.txt

View File

@ -1,7 +1,7 @@
version: '3'
includes:
include1: './include1'
include1: '../include1'
tasks:
default:

View File

@ -1,6 +1,6 @@
version: '3'
dotenv: ['include1/.env', 'include1/envs/.env']
dotenv: ['.env']
tasks:
default: