We read every piece of feedback, and take your input very seriously.
To see all available qualifiers, see our documentation.
There was an error while loading. Please reload this page.
2 parents 2d2e1dc + fb6434f commit 12baf42Copy full SHA for 12baf42
cli/options.go
@@ -335,7 +335,7 @@ func ProjectFromOptions(options *ProjectOptions) (*types.Project, error) {
335
} else {
336
opts.Name = filepath.Base(absWorkingDir)
337
}
338
- opts.Name = regexp.MustCompile(`(?m)[a-z0-9]+[-_a-z0-9]*`).FindString(strings.ToLower(opts.Name))
+ opts.Name = normalizeName(opts.Name)
339
340
options.loadOptions = append(options.loadOptions, nameLoadOpt)
341
@@ -352,6 +352,13 @@ func ProjectFromOptions(options *ProjectOptions) (*types.Project, error) {
352
return project, nil
353
354
355
+func normalizeName(s string) string {
356
+ r := regexp.MustCompile("[a-z0-9_-]")
357
+ s = strings.ToLower(s)
358
+ s = strings.Join(r.FindAllString(s, -1), "")
359
+ return strings.TrimLeft(s, "_-")
360
+}
361
+
362
// getConfigPathsFromOptions retrieves the config files for project based on project options
363
func getConfigPathsFromOptions(options *ProjectOptions) ([]string, error) {
364
if len(options.ConfigPaths) != 0 {
cli/options_test.go
@@ -82,6 +82,22 @@ func TestProjectName(t *testing.T) {
82
assert.Equal(t, p.Name, "my_project")
83
})
84
85
+ t.Run("by name contains dots", func(t *testing.T) {
86
+ opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithName("www.my.project"))
87
+ assert.NilError(t, err)
88
+ p, err := ProjectFromOptions(opts)
89
90
+ assert.Equal(t, p.Name, "wwwmyproject")
91
+ })
92
93
+ t.Run("by name uppercase", func(t *testing.T) {
94
+ opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithName("MY_PROJECT"))
95
96
97
98
+ assert.Equal(t, p.Name, "my_project")
99
100
101
t.Run("by working dir", func(t *testing.T) {
102
opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithWorkingDirectory("."))
103
assert.NilError(t, err)
0 commit comments