Skip to content

Commit

Permalink
Merge pull request #1885 from crazy-max/v0.11.1_backport
Browse files Browse the repository at this point in the history
  • Loading branch information
jedevc committed Jun 21, 2023
2 parents 687feca + 9f844df commit ff87dd1
Show file tree
Hide file tree
Showing 5 changed files with 55 additions and 12 deletions.
6 changes: 3 additions & 3 deletions bake/bake.go
Original file line number Diff line number Diff line change
Expand Up @@ -1048,12 +1048,12 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) {
bi.DockerfileInline = *t.DockerfileInline
}
updateContext(&bi, inp)
if !build.IsRemoteURL(bi.ContextPath) && bi.ContextState == nil && !path.IsAbs(bi.DockerfilePath) {
bi.DockerfilePath = path.Join(bi.ContextPath, bi.DockerfilePath)
}
if strings.HasPrefix(bi.ContextPath, "cwd://") {
bi.ContextPath = path.Clean(strings.TrimPrefix(bi.ContextPath, "cwd://"))
}
if !build.IsRemoteURL(bi.ContextPath) && bi.ContextState == nil && !path.IsAbs(bi.DockerfilePath) {
bi.DockerfilePath = path.Join(bi.ContextPath, bi.DockerfilePath)
}
for k, v := range bi.NamedContexts {
if strings.HasPrefix(v.Path, "cwd://") {
bi.NamedContexts[k] = build.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))}
Expand Down
15 changes: 8 additions & 7 deletions bake/bake_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -386,18 +386,19 @@ func TestHCLCwdPrefix(t *testing.T) {
m, g, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
require.NoError(t, err)

require.Equal(t, 1, len(m))
_, ok := m["app"]
require.True(t, ok)

_, err = TargetsToBuildOpt(m, &Input{})
bo, err := TargetsToBuildOpt(m, &Input{})
require.NoError(t, err)

require.Equal(t, 1, len(g))
require.Equal(t, []string{"app"}, g["default"].Targets)

require.Equal(t, 1, len(m))
require.Contains(t, m, "app")
require.Equal(t, "test", *m["app"].Dockerfile)
require.Equal(t, "foo", *m["app"].Context)

require.Equal(t, 1, len(g))
require.Equal(t, []string{"app"}, g["default"].Targets)
require.Equal(t, "foo/test", bo["app"].Inputs.DockerfilePath)
require.Equal(t, "foo", bo["app"].Inputs.ContextPath)
}

func TestOverrideMerge(t *testing.T) {
Expand Down
23 changes: 23 additions & 0 deletions store/store_test.go
Original file line number Diff line number Diff line change
Expand Up @@ -235,3 +235,26 @@ func TestNodeManagement(t *testing.T) {
require.NotNil(t, ng)
require.Equal(t, "mybuild", ng.Name)
}

func TestNodeInvalidName(t *testing.T) {
t.Parallel()
tmpdir := t.TempDir()

s, err := New(tmpdir)
require.NoError(t, err)

txn, release, err := s.Txn()
require.NoError(t, err)
defer release()

_, err = txn.NodeGroupByName("123builder")
require.Error(t, err)
require.True(t, IsErrInvalidName(err))

err = txn.Save(&NodeGroup{
Name: "123builder",
Driver: "mydriver",
})
require.Error(t, err)
require.True(t, IsErrInvalidName(err))
}
2 changes: 1 addition & 1 deletion store/storeutil/storeutil.go
Original file line number Diff line number Diff line change
Expand Up @@ -74,7 +74,7 @@ func GetCurrentInstance(txn *store.Txn, dockerCli command.Cli) (*store.NodeGroup
func GetNodeGroup(txn *store.Txn, dockerCli command.Cli, name string) (*store.NodeGroup, error) {
ng, err := txn.NodeGroupByName(name)
if err != nil {
if !os.IsNotExist(errors.Cause(err)) {
if !os.IsNotExist(errors.Cause(err)) && !store.IsErrInvalidName(err) {
return nil, err
}
}
Expand Down
21 changes: 20 additions & 1 deletion store/util.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,9 +11,28 @@ import (

var namePattern = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9\.\-_]*$`)

type errInvalidName struct {
error
}

func (e *errInvalidName) Error() string {
return e.error.Error()
}

func (e *errInvalidName) Unwrap() error {
return e.error
}

func IsErrInvalidName(err error) bool {
_, ok := err.(*errInvalidName)
return ok
}

func ValidateName(s string) (string, error) {
if !namePattern.MatchString(s) {
return "", errors.Errorf("invalid name %s, name needs to start with a letter and may not contain symbols, except ._-", s)
return "", &errInvalidName{
errors.Errorf("invalid name %s, name needs to start with a letter and may not contain symbols, except ._-", s),
}
}
return strings.ToLower(s), nil
}
Expand Down

0 comments on commit ff87dd1

Please sign in to comment.