github.com/nak3/source-to-image@v1.1.10-0.20180319140719-2ed55639898d/pkg/build/strategies/strategies.go (about)

     1  package strategies
     2  
     3  import (
     4  	"time"
     5  
     6  	"github.com/openshift/source-to-image/pkg/api"
     7  	"github.com/openshift/source-to-image/pkg/build"
     8  	"github.com/openshift/source-to-image/pkg/build/strategies/onbuild"
     9  	"github.com/openshift/source-to-image/pkg/build/strategies/sti"
    10  	"github.com/openshift/source-to-image/pkg/docker"
    11  	"github.com/openshift/source-to-image/pkg/util/fs"
    12  	utilstatus "github.com/openshift/source-to-image/pkg/util/status"
    13  )
    14  
    15  // GetStrategy decides what build strategy will be used for the STI build.
    16  // TODO: deprecated, use Strategy() instead
    17  func GetStrategy(client docker.Client, config *api.Config) (build.Builder, api.BuildInfo, error) {
    18  	return Strategy(client, config, build.Overrides{})
    19  }
    20  
    21  // Strategy creates the appropriate build strategy for the provided config, using
    22  // the overrides provided. Not all strategies support all overrides.
    23  func Strategy(client docker.Client, config *api.Config, overrides build.Overrides) (build.Builder, api.BuildInfo, error) {
    24  	var builder build.Builder
    25  	var buildInfo api.BuildInfo
    26  	var err error
    27  
    28  	fileSystem := fs.NewFileSystem()
    29  
    30  	startTime := time.Now()
    31  
    32  	image, err := docker.GetBuilderImage(client, config)
    33  	buildInfo.Stages = api.RecordStageAndStepInfo(buildInfo.Stages, api.StagePullImages, api.StepPullBuilderImage, startTime, time.Now())
    34  	if err != nil {
    35  		buildInfo.FailureReason = utilstatus.NewFailureReason(
    36  			utilstatus.ReasonPullBuilderImageFailed,
    37  			utilstatus.ReasonMessagePullBuilderImageFailed,
    38  		)
    39  		return nil, buildInfo, err
    40  	}
    41  	config.HasOnBuild = image.OnBuild
    42  
    43  	if config.AssembleUser, err = docker.GetAssembleUser(client, config); err != nil {
    44  		buildInfo.FailureReason = utilstatus.NewFailureReason(
    45  			utilstatus.ReasonPullBuilderImageFailed,
    46  			utilstatus.ReasonMessagePullBuilderImageFailed,
    47  		)
    48  		return nil, buildInfo, err
    49  	}
    50  
    51  	// if we're blocking onbuild, just do a normal s2i build flow
    52  	// which won't do a docker build and invoke the onbuild commands
    53  	if image.OnBuild && !config.BlockOnBuild {
    54  		builder, err = onbuild.New(client, config, fileSystem, overrides)
    55  		if err != nil {
    56  			buildInfo.FailureReason = utilstatus.NewFailureReason(
    57  				utilstatus.ReasonGenericS2IBuildFailed,
    58  				utilstatus.ReasonMessageGenericS2iBuildFailed,
    59  			)
    60  			return nil, buildInfo, err
    61  		}
    62  		return builder, buildInfo, nil
    63  	}
    64  
    65  	builder, err = sti.New(client, config, fileSystem, overrides)
    66  	if err != nil {
    67  		buildInfo.FailureReason = utilstatus.NewFailureReason(
    68  			utilstatus.ReasonGenericS2IBuildFailed,
    69  			utilstatus.ReasonMessageGenericS2iBuildFailed,
    70  		)
    71  		return nil, buildInfo, err
    72  	}
    73  	return builder, buildInfo, err
    74  }