bake: load .env file from working dir for compose files

Signed-off-by: CrazyMax <crazy-max@users.noreply.github.com>
This commit is contained in:
CrazyMax
2022-08-10 03:24:33 +02:00
parent a378f8095e
commit 7d8a6bc1d7
4 changed files with 171 additions and 37 deletions

View File

@ -2,6 +2,7 @@ package bake
import (
"os"
"path/filepath"
"sort"
"testing"
@ -37,7 +38,7 @@ secrets:
file: /root/.aws/credentials
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, 1, len(c.Groups))
@ -75,7 +76,7 @@ services:
webapp:
build: ./db
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, 1, len(c.Groups))
}
@ -93,7 +94,7 @@ services:
target: webapp
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, 2, len(c.Targets))
@ -118,7 +119,7 @@ services:
target: webapp
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, 2, len(c.Targets))
sort.Slice(c.Targets, func(i, j int) bool {
@ -152,7 +153,7 @@ services:
os.Setenv("ZZZ_BAR", "zzz_foo")
defer os.Unsetenv("ZZZ_BAR")
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, sliceToMap(os.Environ()))
require.NoError(t, err)
require.Equal(t, "bar", c.Targets[0].Args["FOO"])
require.Equal(t, "zzz_foo", c.Targets[0].Args["BAR"])
@ -166,7 +167,7 @@ services:
entrypoint: echo 1
`)
_, err := ParseCompose(dt)
_, err := ParseCompose(dt, nil)
require.NoError(t, err)
}
@ -191,7 +192,7 @@ networks:
gateway: 10.5.0.254
`)
_, err := ParseCompose(dt)
_, err := ParseCompose(dt, nil)
require.NoError(t, err)
}
@ -208,7 +209,7 @@ services:
- bar
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, []string{"foo", "bar"}, c.Targets[0].Tags)
}
@ -245,7 +246,7 @@ networks:
name: test-net
`)
_, err := ParseCompose(dt)
_, err := ParseCompose(dt, nil)
require.NoError(t, err)
}
@ -298,7 +299,7 @@ services:
no-cache: true
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, 2, len(c.Targets))
sort.Slice(c.Targets, func(i, j int) bool {
@ -342,7 +343,7 @@ services:
- type=local,dest=path/to/cache
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, 1, len(c.Targets))
require.Equal(t, []string{"ct-addon:foo", "ct-addon:baz"}, c.Targets[0].Tags)
@ -375,11 +376,32 @@ services:
- ` + envf.Name() + `
`)
c, err := ParseCompose(dt)
c, err := ParseCompose(dt, nil)
require.NoError(t, err)
require.Equal(t, map[string]string{"CT_ECR": "foo", "FOO": "bsdf -csdf", "NODE_ENV": "test"}, c.Targets[0].Args)
}
func TestDotEnv(t *testing.T) {
tmpdir := t.TempDir()
err := os.WriteFile(filepath.Join(tmpdir, ".env"), []byte("FOO=bar"), 0644)
require.NoError(t, err)
var dt = []byte(`
services:
scratch:
build:
context: .
args:
FOO:
`)
chdir(t, tmpdir)
c, _, err := ParseComposeFile(dt, "docker-compose.yml")
require.NoError(t, err)
require.Equal(t, map[string]string{"FOO": "bar"}, c.Targets[0].Args)
}
func TestPorts(t *testing.T) {
var dt = []byte(`
services:
@ -397,7 +419,7 @@ services:
published: "3306"
protocol: tcp
`)
_, err := ParseCompose(dt)
_, err := ParseCompose(dt, nil)
require.NoError(t, err)
}
@ -445,10 +467,10 @@ func TestServiceName(t *testing.T) {
t.Run(tt.svc, func(t *testing.T) {
_, err := ParseCompose([]byte(`
services:
` + tt.svc + `:
`+tt.svc+`:
build:
context: .
`))
`), nil)
if tt.wantErr {
require.Error(t, err)
} else {
@ -514,7 +536,7 @@ services:
for _, tt := range cases {
tt := tt
t.Run(tt.name, func(t *testing.T) {
_, err := ParseCompose(tt.dt)
_, err := ParseCompose(tt.dt, nil)
if tt.wantErr {
require.Error(t, err)
} else {
@ -523,3 +545,21 @@ services:
})
}
}
// chdir changes the current working directory to the named directory,
// and then restore the original working directory at the end of the test.
func chdir(t *testing.T, dir string) {
olddir, err := os.Getwd()
if err != nil {
t.Fatalf("chdir: %v", err)
}
if err := os.Chdir(dir); err != nil {
t.Fatalf("chdir %s: %v", dir, err)
}
t.Cleanup(func() {
if err := os.Chdir(olddir); err != nil {
t.Errorf("chdir to original working directory %s: %v", olddir, err)
os.Exit(1)
}
})
}