@@ -26,9 +26,15 @@ import (
26
26
"os"
27
27
"os/exec"
28
28
"path/filepath"
29
+ "regexp"
29
30
"sort"
30
31
"strings"
31
32
33
+ "github.com/pkg/errors"
34
+ "github.com/sirupsen/logrus"
35
+ "gopkg.in/AlecAivazis/survey.v1"
36
+ "gopkg.in/yaml.v2"
37
+
32
38
"github.com/GoogleContainerTools/skaffold/cmd/skaffold/app/tips"
33
39
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/config"
34
40
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/docker"
@@ -38,10 +44,6 @@ import (
38
44
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/schema/latest"
39
45
"github.com/GoogleContainerTools/skaffold/pkg/skaffold/util"
40
46
"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"
45
47
)
46
48
47
49
// For testing
@@ -391,9 +393,15 @@ func generateSkaffoldConfig(k Initializer, buildConfigPairs []builderImagePair)
391
393
// if the user doesn't have any k8s yamls, generate one for each dockerfile
392
394
logrus .Info ("generating skaffold config" )
393
395
396
+ name , err := suggestConfigName ()
397
+ if err != nil {
398
+ warnings .Printf ("Couldn't generate default config name: %s" , err .Error ())
399
+ }
400
+
394
401
cfg := & latest.SkaffoldConfig {
395
402
APIVersion : latest .Version ,
396
403
Kind : "Config" ,
404
+ Metadata : latest.Metadata {Name : name },
397
405
}
398
406
if err := defaults .Set (cfg ); err != nil {
399
407
return nil , errors .Wrap (err , "generating default pipeline" )
@@ -410,6 +418,33 @@ func generateSkaffoldConfig(k Initializer, buildConfigPairs []builderImagePair)
410
418
return pipelineStr , nil
411
419
}
412
420
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
+
413
448
func printAnalyzeJSONNoJib (out io.Writer , skipBuild bool , pairs []builderImagePair , unresolvedBuilders []InitBuilder , unresolvedImages []string ) error {
414
449
if ! skipBuild && len (unresolvedBuilders ) == 0 {
415
450
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`" )
0 commit comments