diff --git a/go.mod b/go.mod index 36dc16c..f3135ca 100644 --- a/go.mod +++ b/go.mod @@ -12,7 +12,7 @@ require ( github.com/charmbracelet/bubbletea v0.24.2 github.com/charmbracelet/lipgloss v0.7.1 github.com/cli/safeexec v1.0.0 - github.com/compose-spec/compose-go v1.6.0 + github.com/compose-spec/compose-go/v2 v2.1.3 github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 github.com/containerd/containerd v1.6.20 github.com/containerd/log v0.1.0 @@ -44,9 +44,9 @@ require ( github.com/zclconf/go-cty v1.10.0 go.opentelemetry.io/otel/trace v1.20.0 go.opentelemetry.io/proto/otlp v0.12.0 - golang.org/x/exp v0.0.0-20220428152302-39d4317da171 + golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 golang.org/x/net v0.21.0 - golang.org/x/sync v0.3.0 + golang.org/x/sync v0.6.0 google.golang.org/grpc v1.59.0 google.golang.org/protobuf v1.32.0 gopkg.in/yaml.v2 v2.4.0 @@ -56,6 +56,7 @@ require ( require ( github.com/Azure/go-ansiterm v0.0.0-20210617225240-d185dfc1b5a1 // indirect github.com/Microsoft/go-winio v0.6.0 // indirect + github.com/Shopify/logrus-bugsnag v0.0.0-20171204204709-577dee27f20d // indirect github.com/agext/levenshtein v1.2.3 // indirect github.com/agl/ed25519 v0.0.0-20170116200512-5312a6153412 // indirect github.com/apparentlymart/go-cidr v1.0.1 // indirect @@ -82,7 +83,6 @@ require ( github.com/containerd/typeurl v1.0.2 // indirect github.com/creack/pty v1.1.12 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/distribution/distribution/v3 v3.0.0-20220725133111-4bf3547399eb // indirect github.com/docker/distribution v2.8.3+incompatible // indirect github.com/docker/docker-credential-helpers v0.7.0 // indirect github.com/docker/go v1.5.1-1.0.20160303222718-d30aec9fd63c // indirect @@ -93,7 +93,9 @@ require ( github.com/fvbommel/sortorder v1.0.1 // indirect github.com/go-logr/logr v1.3.0 // indirect github.com/go-logr/stdr v1.2.2 // indirect + github.com/go-viper/mapstructure/v2 v2.0.0 // indirect github.com/gofrs/flock v0.8.1 // indirect + github.com/gofrs/uuid v4.0.0+incompatible // indirect github.com/gogo/googleapis v1.4.1 // indirect github.com/golang/protobuf v1.5.3 // indirect github.com/google/go-cmp v0.6.0 // indirect @@ -165,13 +167,13 @@ require ( go.opentelemetry.io/otel/metric v1.20.0 // indirect go.opentelemetry.io/otel/sdk v1.20.0 // indirect golang.org/x/crypto v0.19.0 // indirect - golang.org/x/mod v0.8.0 // indirect + golang.org/x/mod v0.14.0 // indirect golang.org/x/oauth2 v0.11.0 // indirect golang.org/x/sys v0.17.0 // indirect golang.org/x/term v0.17.0 // indirect golang.org/x/text v0.14.0 // indirect golang.org/x/time v0.1.0 // indirect - golang.org/x/tools v0.6.0 // indirect + golang.org/x/tools v0.17.0 // indirect google.golang.org/appengine v1.6.7 // indirect google.golang.org/genproto v0.0.0-20230822172742-b8732ec3820d // indirect google.golang.org/genproto/googleapis/api v0.0.0-20230822172742-b8732ec3820d // indirect diff --git a/go.sum b/go.sum index f7e011e..5686251 100644 --- a/go.sum +++ b/go.sum @@ -159,8 +159,8 @@ github.com/cncf/xds/go v0.0.0-20210922020428-25de7278fc84/go.mod h1:eXthEFrGJvWH github.com/cncf/xds/go v0.0.0-20211011173535-cb28da3451f1/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4 h1:/inchEIKaYC1Akx+H+gqO04wryn5h75LSazbRlnya1k= github.com/cncf/xds/go v0.0.0-20230607035331-e9ce68804cb4/go.mod h1:eXthEFrGJvWHgFFCl3hGmgk+/aYT6PnTQLykKQRLhEs= -github.com/compose-spec/compose-go v1.6.0 h1:7Ol/UULMUtbPmB0EYrETASRoum821JpOh/XaEf+hN+Q= -github.com/compose-spec/compose-go v1.6.0/go.mod h1:os+Ulh2jlZxY1XT1hbciERadjSUU/BtZ6+gcN7vD7J0= +github.com/compose-spec/compose-go/v2 v2.1.3 h1:bD67uqLuL/XgkAK6ir3xZvNLFPxPScEi1KW7R5esrLE= +github.com/compose-spec/compose-go/v2 v2.1.3/go.mod h1:lFN0DrMxIncJGYAXTfWuajfwj5haBJqrBkarHcnjJKc= github.com/containerd/cgroups v1.0.4 h1:jN/mbWBEaz+T1pi5OFtnkQ+8qnmEbAr1Oo1FRm5B0dA= github.com/containerd/cgroups v1.0.4/go.mod h1:nLNQtsF7Sl2HxNebu77i1R0oDlhiTG+kO4JTrUzo6IA= github.com/containerd/console v1.0.4-0.20230313162750-1ae8d489ac81 h1:q2hJAaP1k2wIvVRd/hEHD7lacgqrCPS+k8g1MndzfWY= @@ -191,8 +191,6 @@ github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/depot/buildkit v0.11.6-depot.39 h1:/FyslZ+pOEf1R9NdOLhTgXTWGcHQuE99SGrNFvCwkyI= github.com/depot/buildkit v0.11.6-depot.39/go.mod h1:UWjGnq1o1zCJMboFIcyOmFba+R0+CF1lu5ZoGRwPtaM= -github.com/distribution/distribution/v3 v3.0.0-20220725133111-4bf3547399eb h1:oCCuuU3kMO3sjZH/p7LamvQNW9SWoT4yQuMGcdSxGAE= -github.com/distribution/distribution/v3 v3.0.0-20220725133111-4bf3547399eb/go.mod h1:28YO/VJk9/64+sTGNuYaBjWxrXTPrj0C0XmgTIOjxX4= github.com/distribution/reference v0.5.0 h1:/FUIFXtfc/x2gpa5/VGfiGLuOIdYa1t65IKK2OFGvA0= github.com/distribution/reference v0.5.0/go.mod h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E= github.com/docker/buildx v0.10.3 h1:9bPC/SZV85ZQDAa1rk5bjodsrK8HIBFThOUpWc052t0= @@ -281,6 +279,8 @@ github.com/go-sql-driver/mysql v1.6.0/go.mod h1:DCzpHaOWr8IXmIStZouvnhqoel9Qv2LB github.com/go-stack/stack v1.8.0/go.mod h1:v0f6uXyyMGvRgIKkXu+yp6POWl0qKG85gN/melR3HDY= github.com/go-test/deep v1.0.3 h1:ZrJSEWsXzPOxaZnFteGEfooLba+ju3FYIbOrS+rQd68= github.com/go-test/deep v1.0.3/go.mod h1:wGDj63lr65AM2AQyKZd/NYHGb0R+1RLqB8NKt3aSFNA= +github.com/go-viper/mapstructure/v2 v2.0.0 h1:dhn8MZ1gZ0mzeodTG3jt5Vj/o87xZKuNAprG2mQfMfc= +github.com/go-viper/mapstructure/v2 v2.0.0/go.mod h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM= github.com/gofrs/flock v0.8.1 h1:+gYjHKf32LDeiEEFhQaotPbLuUXjY5ZqxKgXy7n59aw= github.com/gofrs/flock v0.8.1/go.mod h1:F1TvTiK9OcQqauNUHlbJvyl9Qa1QvF/gOUDKA14jxHU= github.com/gofrs/uuid v4.0.0+incompatible h1:1SD/1F5pU8p29ybwgQSwpQk+mwdRrXCYuPhW6m+TnJw= @@ -729,8 +729,8 @@ golang.org/x/exp v0.0.0-20191227195350-da58074b4299/go.mod h1:2RIsYlXP63K8oxa1u0 golang.org/x/exp v0.0.0-20200119233911-0405dc783f0a/go.mod h1:2RIsYlXP63K8oxa1u096TMicItID8zy7Y6sNkU49FU4= golang.org/x/exp v0.0.0-20200207192155-f17229e696bd/go.mod h1:J/WKrq2StrnmMY6+EHIKF9dgMWnmCNThgcyBT1FY9mM= golang.org/x/exp v0.0.0-20200224162631-6cc2880d07d6/go.mod h1:3jZMyOhIsHpP37uCMkUooju7aAi5cS1Q23tOzKc+0MU= -golang.org/x/exp v0.0.0-20220428152302-39d4317da171 h1:TfdoLivD44QwvssI9Sv1xwa5DcL5XQr4au4sZ2F2NV4= -golang.org/x/exp v0.0.0-20220428152302-39d4317da171/go.mod h1:lgLbSvA5ygNOMpwM/9anMpWVlVJ7Z+cHWq/eFuinpGE= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3 h1:hNQpMuAJe5CtcUqCXaWga3FHu+kQvCqcsoVaQgSV60o= +golang.org/x/exp v0.0.0-20240112132812-db7319d0e0e3/go.mod h1:idGWGoKP1toJGkd5/ig9ZLuPcZBC3ewk7SzmH0uou08= golang.org/x/image v0.0.0-20190227222117-0694c2d4d067/go.mod h1:kZ7UVZpmo3dzQBMxlp+ypCbDeSB+sBbTgSJuh5dn5js= golang.org/x/image v0.0.0-20190802002840-cff245a6509b/go.mod h1:FeLwcggjj3mMvU+oOTbSwawSJRM1uh48EjtB4UJZlP0= golang.org/x/lint v0.0.0-20181026193005-c67002cb31c3/go.mod h1:UVdnD1Gm6xHRNCYTkRU2/jEulfH38KcIWyp/GAMgvoE= @@ -755,8 +755,8 @@ golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.1/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.8.0 h1:LUYupSeNrTNCGzR/hVBk2NHZO4hXcVaW1k4Qx7rjPx8= -golang.org/x/mod v0.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs= +golang.org/x/mod v0.14.0 h1:dGoOF9QVLYng8IHTm7BAyWqCqSheQ5pYWGhzW00YJr0= +golang.org/x/mod v0.14.0/go.mod h1:hTbmBsO62+eylJbnUtE2MGJUyE7QWk4xUqPFrRgJ+7c= golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180811021610-c39426892332/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4= @@ -825,8 +825,8 @@ golang.org/x/sync v0.0.0-20200625203802-6e8e738ad208/go.mod h1:RxMgew5VJxzue5/jJ golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201207232520-09787c993a3a/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.3.0 h1:ftCYgMx6zT/asHUrPw8BLLscYtGznsLAnjq5RH9P66E= -golang.org/x/sync v0.3.0/go.mod h1:FU7BRWz2tNW+3quACPkgCx/L+uEAv1htQ0V83Z9Rj+Y= +golang.org/x/sync v0.6.0 h1:5BMeUDZ7vkXGfEr1x9B4bRcTH4lpkTkpdh0T/J+qjbQ= +golang.org/x/sync v0.6.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180905080454-ebe1bf3edb33/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20180909124046-d0be0721c37e/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= @@ -969,8 +969,8 @@ golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4f golang.org/x/tools v0.0.0-20210108195828-e2f9c7f1fc8e/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= golang.org/x/tools v0.1.0/go.mod h1:xkSsbof2nBLbhDlRMhhhyNLN/zl3eTqcnHD5viDpcZ0= golang.org/x/tools v0.1.5/go.mod h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk= -golang.org/x/tools v0.6.0 h1:BOw41kyTf3PuCW1pVQf8+Cyg8pMlkYB1oo9iJ6D/lKM= -golang.org/x/tools v0.6.0/go.mod h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU= +golang.org/x/tools v0.17.0 h1:FvmRgNOcs3kOa+T20R1uhfP9F6HgG2mfxDv1vrx1Htc= +golang.org/x/tools v0.17.0/go.mod h1:xsh6VxdV005rRVaS6SSAf9oiAqljS7UZUacMZ8Bnsps= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= @@ -1119,8 +1119,8 @@ gopkg.in/yaml.v3 v3.0.0-20210107192922-496545a6307b/go.mod h1:K4uyk7z7BCEPqu6E+C gopkg.in/yaml.v3 v3.0.0/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -gotest.tools/v3 v3.3.0 h1:MfDY1b1/0xN1CyMlQDac0ziEy9zJQd9CXBRRDHw2jJo= -gotest.tools/v3 v3.3.0/go.mod h1:Mcr9QNxkg0uMvy/YElmo4SpXgJKWgQvYrT7Kw5RzJ1A= +gotest.tools/v3 v3.4.0 h1:ZazjZUfuVeZGLAmlKKuyv3IKP5orXcwtOwDQH6YVr6o= +gotest.tools/v3 v3.4.0/go.mod h1:CtbdzLSsqVhDgMtKsx03ird5YTGB3ar27v0u/yKBW5g= honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4= diff --git a/pkg/buildx/bake/bake.go b/pkg/buildx/bake/bake.go index c20f64a..f938a85 100644 --- a/pkg/buildx/bake/bake.go +++ b/pkg/buildx/bake/bake.go @@ -13,7 +13,7 @@ import ( "strconv" "strings" - composecli "github.com/compose-spec/compose-go/cli" + composecli "github.com/compose-spec/compose-go/v2/cli" "github.com/depot/cli/pkg/buildx/bake/hclparser" "github.com/docker/buildx/build" "github.com/docker/buildx/util/buildflags" diff --git a/pkg/buildx/bake/compose.go b/pkg/buildx/bake/compose.go index 801809d..3a8cf37 100644 --- a/pkg/buildx/bake/compose.go +++ b/pkg/buildx/bake/compose.go @@ -1,13 +1,16 @@ package bake import ( + "context" "os" "path/filepath" + "sort" "strings" - "github.com/compose-spec/compose-go/dotenv" - "github.com/compose-spec/compose-go/loader" - compose "github.com/compose-spec/compose-go/types" + "github.com/compose-spec/compose-go/v2/consts" + "github.com/compose-spec/compose-go/v2/dotenv" + "github.com/compose-spec/compose-go/v2/loader" + compose "github.com/compose-spec/compose-go/v2/types" "github.com/pkg/errors" "gopkg.in/yaml.v3" ) @@ -28,11 +31,20 @@ func ParseComposeFiles(fs []File) (*Config, error) { } func ParseCompose(cfgs []compose.ConfigFile, envs map[string]string) (*Config, error) { - cfg, err := loader.Load(compose.ConfigDetails{ + if envs == nil { + envs = make(map[string]string) + } + cfg, err := loader.LoadWithContext(context.Background(), compose.ConfigDetails{ ConfigFiles: cfgs, Environment: envs, }, func(options *loader.Options) { + projectName := "bake" + if v, ok := envs[consts.ComposeProjectName]; ok && v != "" { + projectName = v + } + options.SetProjectName(projectName, false) options.SkipNormalization = true + options.Profiles = []string{"*"} }) if err != nil { return nil, err @@ -65,6 +77,26 @@ func ParseCompose(cfgs []compose.ConfigFile, envs map[string]string) (*Config, e dockerfilePath := s.Build.Dockerfile dockerfilePathP = &dockerfilePath } + var dockerfileInlineP *string + if s.Build.DockerfileInline != "" { + dockerfileInline := s.Build.DockerfileInline + dockerfileInlineP = &dockerfileInline + } + + var additionalContexts map[string]string + if s.Build.AdditionalContexts != nil { + additionalContexts = map[string]string{} + for k, v := range s.Build.AdditionalContexts { + additionalContexts[k] = v + } + } + + var ssh []string + for _, bkey := range s.Build.SSH { + sshkey := composeToBuildkitSSH(bkey) + ssh = append(ssh, sshkey) + } + sort.Strings(ssh) var secrets []string for _, bs := range s.Build.Secrets { @@ -84,11 +116,13 @@ func ParseCompose(cfgs []compose.ConfigFile, envs map[string]string) (*Config, e g.Targets = append(g.Targets, targetName) t := &Target{ - Name: targetName, - Context: contextPathP, - Dockerfile: dockerfilePathP, - Tags: s.Build.Tags, - Labels: labels, + Name: targetName, + Context: contextPathP, + Contexts: additionalContexts, + Dockerfile: dockerfilePathP, + DockerfileInline: dockerfileInlineP, + Tags: s.Build.Tags, + Labels: labels, Args: flatten(s.Build.Args.Resolve(func(val string) (string, bool) { if val, ok := s.Environment[val]; ok && val != nil { return *val, true @@ -99,6 +133,7 @@ func ParseCompose(cfgs []compose.ConfigFile, envs map[string]string) (*Config, e CacheFrom: s.Build.CacheFrom, CacheTo: s.Build.CacheTo, NetworkMode: &s.Build.Network, + SSH: ssh, Secrets: secrets, } if err = t.composeExtTarget(s.Build.Extensions); err != nil { @@ -145,6 +180,7 @@ func validateCompose(dt []byte, envs map[string]string) error { }, Environment: envs, }, func(options *loader.Options) { + options.SetProjectName("bake", false) options.SkipNormalization = true // consistency is checked later in ParseCompose to ensure multiple // compose files can be merged together @@ -185,7 +221,7 @@ func loadDotEnv(curenv map[string]string, workingDir string) (map[string]string, return nil, err } - envs, err := dotenv.UnmarshalBytes(dt) + envs, err := dotenv.UnmarshalBytesWithLookup(dt, nil) if err != nil { return nil, err } @@ -295,6 +331,7 @@ func (t *Target) composeExtTarget(exts map[string]interface{}) error { } if len(xb.SSH) > 0 { t.SSH = dedupSlice(append(t.SSH, xb.SSH...)) + sort.Strings(t.SSH) } if len(xb.Platforms) > 0 { t.Platforms = dedupSlice(append(t.Platforms, xb.Platforms...)) @@ -321,7 +358,7 @@ func (t *Target) composeExtTarget(exts map[string]interface{}) error { // composeToBuildkitSecret converts secret from compose format to buildkit's // csv format. func composeToBuildkitSecret(inp compose.ServiceSecretConfig, psecret compose.SecretConfig) (string, error) { - if psecret.External.External { + if psecret.External { return "", errors.Errorf("unsupported external secret %s", psecret.Name) } @@ -338,3 +375,17 @@ func composeToBuildkitSecret(inp compose.ServiceSecretConfig, psecret compose.Se return strings.Join(bkattrs, ","), nil } + +// composeToBuildkitSSH converts secret from compose format to buildkit's +// csv format. +func composeToBuildkitSSH(sshKey compose.SSHKey) string { + var bkattrs []string + + bkattrs = append(bkattrs, sshKey.ID) + + if sshKey.Path != "" { + bkattrs = append(bkattrs, sshKey.Path) + } + + return strings.Join(bkattrs, "=") +} diff --git a/pkg/compose/compose.go b/pkg/compose/compose.go index 9b08d12..9f71daf 100644 --- a/pkg/compose/compose.go +++ b/pkg/compose/compose.go @@ -7,10 +7,10 @@ import ( "regexp" "strings" - "github.com/compose-spec/compose-go/dotenv" - "github.com/compose-spec/compose-go/loader" - "github.com/compose-spec/compose-go/types" - compose "github.com/compose-spec/compose-go/types" + "github.com/compose-spec/compose-go/v2/dotenv" + "github.com/compose-spec/compose-go/v2/loader" + "github.com/compose-spec/compose-go/v2/types" + compose "github.com/compose-spec/compose-go/v2/types" "github.com/depot/cli/pkg/buildx/bake" "gopkg.in/yaml.v2" ) @@ -186,7 +186,7 @@ func loadDotEnv(curenv map[string]string, workingDir string) (map[string]string, return nil, err } - envs, err := dotenv.UnmarshalBytes(dt) + envs, err := dotenv.UnmarshalBytesWithLookup(dt, nil) if err != nil { return nil, err }