mirror of
https://gitea.com/Lydanne/buildx.git
synced 2025-05-19 01:47:43 +08:00
Merge pull request #1885 from crazy-max/v0.11.1_backport
This commit is contained in:
commit
ff87dd183a
@ -1048,12 +1048,12 @@ func toBuildOpt(t *Target, inp *Input) (*build.Options, error) {
|
|||||||
bi.DockerfileInline = *t.DockerfileInline
|
bi.DockerfileInline = *t.DockerfileInline
|
||||||
}
|
}
|
||||||
updateContext(&bi, inp)
|
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://") {
|
if strings.HasPrefix(bi.ContextPath, "cwd://") {
|
||||||
bi.ContextPath = path.Clean(strings.TrimPrefix(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 {
|
for k, v := range bi.NamedContexts {
|
||||||
if strings.HasPrefix(v.Path, "cwd://") {
|
if strings.HasPrefix(v.Path, "cwd://") {
|
||||||
bi.NamedContexts[k] = build.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))}
|
bi.NamedContexts[k] = build.NamedContext{Path: path.Clean(strings.TrimPrefix(v.Path, "cwd://"))}
|
||||||
|
@ -386,18 +386,19 @@ func TestHCLCwdPrefix(t *testing.T) {
|
|||||||
m, g, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
|
m, g, err := ReadTargets(ctx, []File{fp}, []string{"app"}, nil, nil)
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, 1, len(m))
|
bo, err := TargetsToBuildOpt(m, &Input{})
|
||||||
_, ok := m["app"]
|
|
||||||
require.True(t, ok)
|
|
||||||
|
|
||||||
_, err = TargetsToBuildOpt(m, &Input{})
|
|
||||||
require.NoError(t, err)
|
require.NoError(t, err)
|
||||||
|
|
||||||
require.Equal(t, "test", *m["app"].Dockerfile)
|
|
||||||
require.Equal(t, "foo", *m["app"].Context)
|
|
||||||
|
|
||||||
require.Equal(t, 1, len(g))
|
require.Equal(t, 1, len(g))
|
||||||
require.Equal(t, []string{"app"}, g["default"].Targets)
|
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, "foo/test", bo["app"].Inputs.DockerfilePath)
|
||||||
|
require.Equal(t, "foo", bo["app"].Inputs.ContextPath)
|
||||||
}
|
}
|
||||||
|
|
||||||
func TestOverrideMerge(t *testing.T) {
|
func TestOverrideMerge(t *testing.T) {
|
||||||
|
@ -235,3 +235,26 @@ func TestNodeManagement(t *testing.T) {
|
|||||||
require.NotNil(t, ng)
|
require.NotNil(t, ng)
|
||||||
require.Equal(t, "mybuild", ng.Name)
|
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))
|
||||||
|
}
|
||||||
|
@ -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) {
|
func GetNodeGroup(txn *store.Txn, dockerCli command.Cli, name string) (*store.NodeGroup, error) {
|
||||||
ng, err := txn.NodeGroupByName(name)
|
ng, err := txn.NodeGroupByName(name)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
if !os.IsNotExist(errors.Cause(err)) {
|
if !os.IsNotExist(errors.Cause(err)) && !store.IsErrInvalidName(err) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -11,9 +11,28 @@ import (
|
|||||||
|
|
||||||
var namePattern = regexp.MustCompile(`^[a-zA-Z][a-zA-Z0-9\.\-_]*$`)
|
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) {
|
func ValidateName(s string) (string, error) {
|
||||||
if !namePattern.MatchString(s) {
|
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
|
return strings.ToLower(s), nil
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user