From 37b23f5a7c22f430cd800d859b0cea84fb5b8048 Mon Sep 17 00:00:00 2001 From: Milas Bowman Date: Fri, 5 May 2023 14:17:16 -0400 Subject: [PATCH] load: clarify project name validation rules in errors This error message showed a regex previously, which has confused some users, as it's not necessarily apparent that the `a-z` was implying case sensitivity. Updated message adapted from the release notes. Signed-off-by: Milas Bowman --- cli/options_test.go | 16 ++++++++-------- loader/loader.go | 4 ++-- 2 files changed, 10 insertions(+), 10 deletions(-) diff --git a/cli/options_test.go b/cli/options_test.go index 8f9a081c..458ed31b 100644 --- a/cli/options_test.go +++ b/cli/options_test.go @@ -91,53 +91,53 @@ func TestProjectName(t *testing.T) { t.Run("by name start with invalid char '-'", func(t *testing.T) { _, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithName("-my_project")) - assert.ErrorContains(t, err, `"-my_project" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "-my_project"`) opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithEnv([]string{ fmt.Sprintf("%s=%s", consts.ComposeProjectName, "-my_project"), })) assert.NilError(t, err) p, err := ProjectFromOptions(opts) - assert.ErrorContains(t, err, `"-my_project" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "-my_project"`) assert.Assert(t, p == nil) }) t.Run("by name start with invalid char '_'", func(t *testing.T) { _, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithName("_my_project")) - assert.ErrorContains(t, err, `"_my_project" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "_my_project"`) opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithEnv([]string{ fmt.Sprintf("%s=%s", consts.ComposeProjectName, "_my_project"), })) assert.NilError(t, err) p, err := ProjectFromOptions(opts) - assert.ErrorContains(t, err, `"_my_project" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "_my_project"`) assert.Assert(t, p == nil) }) t.Run("by name contains dots", func(t *testing.T) { _, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithName("www.my.project")) - assert.ErrorContains(t, err, `"www.my.project" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "www.my.project"`) opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithEnv([]string{ fmt.Sprintf("%s=%s", consts.ComposeProjectName, "www.my.project"), })) assert.NilError(t, err) p, err := ProjectFromOptions(opts) - assert.ErrorContains(t, err, `"www.my.project" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "www.my.project"`) assert.Assert(t, p == nil) }) t.Run("by name uppercase", func(t *testing.T) { _, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithName("MY_PROJECT")) - assert.ErrorContains(t, err, `"MY_PROJECT" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "MY_PROJECT"`) opts, err := NewProjectOptions([]string{"testdata/simple/compose.yaml"}, WithEnv([]string{ fmt.Sprintf("%s=%s", consts.ComposeProjectName, "MY_PROJECT"), })) assert.NilError(t, err) p, err := ProjectFromOptions(opts) - assert.ErrorContains(t, err, `"MY_PROJECT" is not a valid project name`) + assert.ErrorContains(t, err, `invalid project name "MY_PROJECT"`) assert.Assert(t, p == nil) }) diff --git a/loader/loader.go b/loader/loader.go index 9a4bbbb6..8873b29b 100644 --- a/loader/loader.go +++ b/loader/loader.go @@ -294,8 +294,8 @@ func Load(configDetails types.ConfigDetails, options ...func(*Options)) (*types. func InvalidProjectNameErr(v string) error { return fmt.Errorf( - "%q is not a valid project name: it must contain only "+ - "characters from [a-z0-9_-] and start with [a-z0-9]", v, + "invalid project name %q: must consist only of lowercase alphanumeric characters, hyphens, and underscores as well as start with a letter or number", + v, ) }