github.com/nak3/source-to-image@v1.1.10-0.20180319140719-2ed55639898d/pkg/build/config.go (about) 1 package build 2 3 import ( 4 "errors" 5 "fmt" 6 7 "github.com/openshift/source-to-image/pkg/api" 8 "github.com/openshift/source-to-image/pkg/docker" 9 "github.com/openshift/source-to-image/pkg/scm/git" 10 ) 11 12 // GenerateConfigFromLabels generates the S2I Config struct from the Docker 13 // image labels. 14 func GenerateConfigFromLabels(config *api.Config, metadata *docker.PullResult) error { 15 if config == nil { 16 return errors.New("config must be provided to GenerateConfigFromLabels") 17 } 18 if metadata == nil { 19 return errors.New("image metadata must be provided to GenerateConfigFromLabels") 20 } 21 22 labels := metadata.Image.Config.Labels 23 24 if builderVersion, ok := labels["io.openshift.builder-version"]; ok { 25 config.BuilderImageVersion = builderVersion 26 config.BuilderBaseImageVersion = labels["io.openshift.builder-base-version"] 27 } 28 29 config.ScriptsURL = labels[api.DefaultNamespace+"scripts-url"] 30 if len(config.ScriptsURL) == 0 { 31 // FIXME: Backward compatibility 32 config.ScriptsURL = labels["io.s2i.scripts-url"] 33 } 34 35 config.Description = labels[api.KubernetesNamespace+"description"] 36 config.DisplayName = labels[api.KubernetesNamespace+"display-name"] 37 38 if builder, ok := labels[api.DefaultNamespace+"build.image"]; ok { 39 config.BuilderImage = builder 40 } else { 41 return fmt.Errorf("required label %q not found in image", api.DefaultNamespace+"build.image") 42 } 43 44 if repo, ok := labels[api.DefaultNamespace+"build.source-location"]; ok { 45 source, err := git.Parse(repo) 46 if err != nil { 47 return fmt.Errorf("couldn't parse label %q value %s: %v", api.DefaultNamespace+"build.source-location", repo, err) 48 } 49 config.Source = source 50 } else { 51 return fmt.Errorf("required label %q not found in image", api.DefaultNamespace+"build.source-location") 52 } 53 54 config.ContextDir = labels[api.DefaultNamespace+"build.source-context-dir"] 55 config.Source.URL.Fragment = labels[api.DefaultNamespace+"build.commit.ref"] 56 57 return nil 58 }