Skip to content

Commit f676e9d

Browse files
committed
reolve serice environmnet "just in time"
Signed-off-by: Nicolas De Loof <nicolas.deloof@gmail.com>
1 parent 4f491ff commit f676e9d

File tree

4 files changed

+25
-7
lines changed

4 files changed

+25
-7
lines changed

cmd/compose/compose.go

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -180,11 +180,6 @@ func (o *ProjectOptions) WithServices(dockerCli command.Cli, fn ProjectServicesF
180180

181181
ctx = context.WithValue(ctx, tracing.MetricsKey{}, metrics)
182182

183-
project, err = project.WithServicesEnvironmentResolved(true)
184-
if err != nil {
185-
return err
186-
}
187-
188183
return fn(ctx, project, args)
189184
})
190185
}

go.mod

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -212,3 +212,5 @@ exclude (
212212
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc
213213
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2
214214
)
215+
216+
replace github.com/compose-spec/compose-go/v2 => github.com/ndeloof/compose-go/v2 v2.0.1-0.20250616102230-241551c1b4b7

go.sum

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -80,8 +80,6 @@ github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004 h1:lkAMpLVBDaj17e
8080
github.com/cloudflare/cfssl v0.0.0-20180223231731-4e2dcbde5004/go.mod h1:yMWuSON2oQp+43nFtAV/uvKQIFpSPerB57DCt9t8sSA=
8181
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb h1:EDmT6Q9Zs+SbUoc7Ik9EfrFqcylYqgPZ9ANSbTAntnE=
8282
github.com/codahale/rfc6979 v0.0.0-20141003034818-6a90f24967eb/go.mod h1:ZjrT6AXHbDs86ZSdt/osfBi5qfexBrKUdONk989Wnk4=
83-
github.com/compose-spec/compose-go/v2 v2.6.5-0.20250605125952-a0d3b94b8dc9 h1:VULSSHxkc7u/U349sHp1RbnWAcnf7JD0HY3rGeZrMaM=
84-
github.com/compose-spec/compose-go/v2 v2.6.5-0.20250605125952-a0d3b94b8dc9/go.mod h1:TmjkIB9W73fwVxkYY+u2uhMbMUakjiif79DlYgXsyvU=
8583
github.com/containerd/cgroups/v3 v3.0.5 h1:44na7Ud+VwyE7LIoJ8JTNQOa549a8543BmzaJHo6Bzo=
8684
github.com/containerd/cgroups/v3 v3.0.5/go.mod h1:SA5DLYnXO8pTGYiAHXz94qvLQTKfVM5GEVisn4jpins=
8785
github.com/containerd/console v1.0.4 h1:F2g4+oChYvBTsASRTz8NP6iIAi97J3TtSAsLbIFn4ro=
@@ -361,6 +359,8 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8m
361359
github.com/mwitkow/go-conntrack v0.0.0-20161129095857-cc309e4a2223/go.mod h1:qRWi+5nqEBWmkhHvq77mSJWrCKwh8bxhgT7d/eI7P4U=
362360
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f h1:y5//uYreIhSUg3J1GEMiLbxo1LJaP8RfCpH6pymGZus=
363361
github.com/mxk/go-flowrate v0.0.0-20140419014527-cca7078d478f/go.mod h1:ZdcZmHo+o7JKHSa8/e818NopupXU1YMK5fe1lsApnBw=
362+
github.com/ndeloof/compose-go/v2 v2.0.1-0.20250616102230-241551c1b4b7 h1:NMCnTnhygGb9S4NO4Vvy39632Ut8bxVpSi7EbMvLtZs=
363+
github.com/ndeloof/compose-go/v2 v2.0.1-0.20250616102230-241551c1b4b7/go.mod h1:TmjkIB9W73fwVxkYY+u2uhMbMUakjiif79DlYgXsyvU=
364364
github.com/niemeyer/pretty v0.0.0-20200227124842-a10e7caefd8e/go.mod h1:zD1mROLANZcx1PVRCS0qkT7pwLkGfwJo4zjcN/Tysno=
365365
github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE=
366366
github.com/onsi/ginkgo v1.12.0 h1:Iw5WCbBcaAAd0fpRb1c9r5YCylv4XDoCSigm1zLevwU=

pkg/compose/convergence.go

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import (
2727
"sync"
2828
"time"
2929

30+
"github.com/compose-spec/compose-go/v2/template"
3031
"github.com/compose-spec/compose-go/v2/types"
3132
"github.com/containerd/platforms"
3233
containerType "github.com/docker/docker/api/types/container"
@@ -110,6 +111,26 @@ func (c *convergence) apply(ctx context.Context, project *types.Project, options
110111
}
111112

112113
func (c *convergence) ensureService(ctx context.Context, project *types.Project, service types.ServiceConfig, recreate string, inherit bool, timeout *time.Duration) error { //nolint:gocyclo
114+
for key, value := range service.Environment {
115+
if value == nil {
116+
continue
117+
}
118+
interpolated, err := template.Substitute(*value, func(k string) (string, bool) {
119+
if v, ok := project.Environment[k]; ok {
120+
return v, true
121+
}
122+
v, ok := service.Environment[k]
123+
if v == nil {
124+
return "", false
125+
}
126+
return *v, ok
127+
})
128+
if err != nil {
129+
return err
130+
}
131+
service.Environment[key] = &interpolated
132+
}
133+
113134
if service.Provider != nil {
114135
return c.service.runPlugin(ctx, project, service, "up")
115136
}

0 commit comments

Comments
 (0)