@@ -18,11 +18,13 @@ package loader
1818
1919import (
2020 "context"
21+ "os"
2122 "path/filepath"
2223 "testing"
2324
2425 "github.com/compose-spec/compose-go/v2/types"
2526 "gotest.tools/v3/assert"
27+ is "gotest.tools/v3/assert/cmp"
2628)
2729
2830func TestExtends (t * testing.T ) {
@@ -202,3 +204,58 @@ services:
202204 assert .Equal (t , len (p .Services ["test" ].Ports ), 1 )
203205
204206}
207+
208+ func TestLoadExtendsSameFile (t * testing.T ) {
209+ tmpdir := t .TempDir ()
210+
211+ aDir := filepath .Join (tmpdir , "sub" )
212+ assert .NilError (t , os .Mkdir (aDir , 0o700 ))
213+ aYAML := `
214+ services:
215+ base:
216+ build:
217+ context: ..
218+ service:
219+ extends: base
220+ build:
221+ target: target
222+ `
223+
224+ assert .NilError (t , os .WriteFile (filepath .Join (tmpdir , "sub" , "compose.yaml" ), []byte (aYAML ), 0o600 ))
225+
226+ rootYAML := `
227+ services:
228+ out-base:
229+ extends:
230+ file: sub/compose.yaml
231+ service: base
232+ out-service:
233+ extends:
234+ file: sub/compose.yaml
235+ service: service
236+ `
237+
238+ assert .NilError (t , os .WriteFile (filepath .Join (tmpdir , "compose.yaml" ), []byte (rootYAML ), 0o600 ))
239+
240+ actual , err := Load (types.ConfigDetails {
241+ WorkingDir : tmpdir ,
242+ ConfigFiles : []types.ConfigFile {{
243+ Filename : filepath .Join (tmpdir , "compose.yaml" ),
244+ }},
245+ Environment : nil ,
246+ }, func (options * Options ) {
247+ options .SkipNormalization = true
248+ options .SkipConsistencyCheck = true
249+ options .SetProjectName ("project" , true )
250+ })
251+ assert .NilError (t , err )
252+ assert .Assert (t , is .Len (actual .Services , 2 ))
253+
254+ svcA , err := actual .GetService ("out-base" )
255+ assert .NilError (t , err )
256+ assert .Equal (t , svcA .Build .Context , tmpdir )
257+
258+ svcB , err := actual .GetService ("out-service" )
259+ assert .NilError (t , err )
260+ assert .Equal (t , svcB .Build .Context , tmpdir )
261+ }
0 commit comments