Skip to content

Commit 43ebbb4

Browse files
authored
Merge pull request #2668 from corneliusweig/w/default-config-name
init: Add default config name
2 parents 1409a9b + 3693b15 commit 43ebbb4

File tree

2 files changed

+80
-4
lines changed

2 files changed

+80
-4
lines changed

pkg/skaffold/initializer/init.go

+39-4
Original file line numberDiff line numberDiff line change
@@ -26,9 +26,15 @@ import (
2626
"os"
2727
"os/exec"
2828
"path/filepath"
29+
"regexp"
2930
"sort"
3031
"strings"
3132

33+
"github.com/pkg/errors"
34+
"github.com/sirupsen/logrus"
35+
"gopkg.in/AlecAivazis/survey.v1"
36+
"gopkg.in/yaml.v2"
37+
3238
"github.com/GoogleContainerTools/skaffold/cmd/skaffold/app/tips"
3339
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/config"
3440
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker"
@@ -38,10 +44,6 @@ import (
3844
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
3945
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
4046
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/warnings"
41-
"github.com/pkg/errors"
42-
"github.com/sirupsen/logrus"
43-
survey "gopkg.in/AlecAivazis/survey.v1"
44-
yaml "gopkg.in/yaml.v2"
4547
)
4648

4749
// For testing
@@ -391,9 +393,15 @@ func generateSkaffoldConfig(k Initializer, buildConfigPairs []builderImagePair)
391393
// if the user doesn't have any k8s yamls, generate one for each dockerfile
392394
logrus.Info("generating skaffold config")
393395

396+
name, err := suggestConfigName()
397+
if err != nil {
398+
warnings.Printf("Couldn't generate default config name: %s", err.Error())
399+
}
400+
394401
cfg := &latest.SkaffoldConfig{
395402
APIVersion: latest.Version,
396403
Kind: "Config",
404+
Metadata: latest.Metadata{Name: name},
397405
}
398406
if err := defaults.Set(cfg); err != nil {
399407
return nil, errors.Wrap(err, "generating default pipeline")
@@ -410,6 +418,33 @@ func generateSkaffoldConfig(k Initializer, buildConfigPairs []builderImagePair)
410418
return pipelineStr, nil
411419
}
412420

421+
func suggestConfigName() (string, error) {
422+
cwd, err := os.Getwd()
423+
if err != nil {
424+
return "", err
425+
}
426+
427+
base := filepath.Base(cwd)
428+
429+
// give up for edge cases
430+
if base == "." || base == string(filepath.Separator) {
431+
return "", nil
432+
}
433+
434+
return canonicalizeName(base), nil
435+
}
436+
437+
// canonicalizeName converts a given string to a valid k8s name string.
438+
// See https://kubernetes.io/docs/concepts/overview/working-with-objects/names/#names for details
439+
func canonicalizeName(name string) string {
440+
forbidden := regexp.MustCompile(`[^-.a-z]+`)
441+
canonicalized := forbidden.ReplaceAllString(strings.ToLower(name), "-")
442+
if len(canonicalized) <= 253 {
443+
return canonicalized
444+
}
445+
return canonicalized[:253]
446+
}
447+
413448
func printAnalyzeJSONNoJib(out io.Writer, skipBuild bool, pairs []builderImagePair, unresolvedBuilders []InitBuilder, unresolvedImages []string) error {
414449
if !skipBuild && len(unresolvedBuilders) == 0 {
415450
return errors.New("one or more valid Dockerfiles must be present to build images with skaffold; please provide at least one Dockerfile and try again, or run `skaffold init --skip-build`")

pkg/skaffold/initializer/init_test.go

+41
Original file line numberDiff line numberDiff line change
@@ -498,3 +498,44 @@ func TestProcessCliArtifacts(t *testing.T) {
498498
})
499499
}
500500
}
501+
502+
func Test_canonicalizeName(t *testing.T) {
503+
const length253 = "aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa-aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa-aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaaaaaaaa.aaa"
504+
tests := []struct {
505+
in, out string
506+
}{
507+
{
508+
in: "abc def",
509+
out: "abc-def",
510+
},
511+
{
512+
in: "abc def",
513+
out: "abc-def",
514+
},
515+
{
516+
in: "abc...def",
517+
out: "abc...def",
518+
},
519+
{
520+
in: "abc---def",
521+
out: "abc---def",
522+
},
523+
{
524+
in: "aBc DeF",
525+
out: "abc-def",
526+
},
527+
{
528+
in: length253 + "XXXXXXX",
529+
out: length253,
530+
},
531+
}
532+
533+
for _, test := range tests {
534+
t.Run(test.in, func(t *testing.T) {
535+
actual := canonicalizeName(test.in)
536+
if actual != test.out {
537+
t.Errorf("%s: expected %s, found %s", test.in, test.out, actual)
538+
}
539+
})
540+
}
541+
}

0 commit comments

Comments
 (0)