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 }