Skip to content

Commit 6b2dff5

Browse files
committed
Add support for wildcards selecting compose files
Signed-off-by: Nicolas De Loof <[email protected]>
1 parent d2c9f1e commit 6b2dff5

File tree

4 files changed

+53
-11
lines changed

4 files changed

+53
-11
lines changed

cli/options.go

Lines changed: 30 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ import (
2121
"io"
2222
"os"
2323
"path/filepath"
24+
"slices"
2425
"strconv"
2526
"strings"
2627

@@ -403,36 +404,54 @@ func (o *ProjectOptions) GetWorkingDir() (string, error) {
403404
}
404405

405406
// ReadConfigFiles reads ConfigFiles and populates the content field
406-
func (o *ProjectOptions) ReadConfigFiles(ctx context.Context, workingDir string, options *ProjectOptions) (*types.ConfigDetails, error) {
407-
config, err := loader.LoadConfigFiles(ctx, options.ConfigPaths, workingDir, options.loadOptions...)
407+
func (o *ProjectOptions) ReadConfigFiles(ctx context.Context, workingDir string) (*types.ConfigDetails, error) {
408+
config, err := loader.LoadConfigFiles(ctx, o.ConfigPaths, workingDir, o.loadOptions...)
408409
if err != nil {
409410
return nil, err
410411
}
411-
configs := make([][]byte, len(config.ConfigFiles))
412-
413-
for i, c := range config.ConfigFiles {
412+
configs := make([]types.ConfigFile, 0, len(config.ConfigFiles))
413+
for _, c := range config.ConfigFiles {
414414
var err error
415415
var b []byte
416416
if c.IsStdin() {
417417
b, err = io.ReadAll(os.Stdin)
418418
if err != nil {
419419
return nil, err
420420
}
421+
422+
configs = append(configs, types.ConfigFile{
423+
Filename: "-",
424+
Content: b,
425+
Config: nil,
426+
})
421427
} else {
422428
f, err := filepath.Abs(c.Filename)
423429
if err != nil {
424430
return nil, err
425431
}
426-
b, err = os.ReadFile(f)
432+
433+
matches, err := filepath.Glob(f)
427434
if err != nil {
428435
return nil, err
429436
}
437+
438+
slices.Sort(matches)
439+
440+
for _, match := range matches {
441+
b, err = os.ReadFile(match)
442+
if err != nil {
443+
return nil, err
444+
}
445+
446+
configs = append(configs, types.ConfigFile{
447+
Filename: match,
448+
Content: b,
449+
Config: nil,
450+
})
451+
}
430452
}
431-
configs[i] = b
432-
}
433-
for i, c := range configs {
434-
config.ConfigFiles[i].Content = c
435453
}
454+
config.ConfigFiles = configs
436455
return config, nil
437456
}
438457

@@ -476,7 +495,7 @@ func (o *ProjectOptions) prepare(ctx context.Context) (*types.ConfigDetails, err
476495
return &types.ConfigDetails{}, err
477496
}
478497

479-
configDetails, err := o.ReadConfigFiles(ctx, defaultDir, o)
498+
configDetails, err := o.ReadConfigFiles(ctx, defaultDir)
480499
if err != nil {
481500
return configDetails, err
482501
}

cli/options_test.go

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -384,3 +384,26 @@ func TestEnvVariablePrecedence(t *testing.T) {
384384
})
385385
}
386386
}
387+
388+
func TestWildcards(t *testing.T) {
389+
options, err := NewProjectOptions([]string{"testdata/wildcards/compose-*.yaml"})
390+
assert.NilError(t, err)
391+
files, err := options.ReadConfigFiles(context.TODO(), ".")
392+
assert.NilError(t, err)
393+
394+
abs, err := filepath.Abs("testdata/wildcards")
395+
assert.NilError(t, err)
396+
assert.DeepEqual(t, files, &types.ConfigDetails{
397+
WorkingDir: ".",
398+
ConfigFiles: []types.ConfigFile{
399+
{
400+
Filename: filepath.Join(abs, "compose-A.yaml"),
401+
Content: []byte{},
402+
},
403+
{
404+
Filename: filepath.Join(abs, "compose-B.yaml"),
405+
Content: []byte{},
406+
},
407+
},
408+
})
409+
}

cli/testdata/wildcards/compose-A.yaml

Whitespace-only changes.

cli/testdata/wildcards/compose-B.yaml

Whitespace-only changes.

0 commit comments

Comments
 (0)