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  }