github.com/openshift/source-to-image@v1.4.1-0.20240516041539-bf52fc02204e/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/dockerfile" 9 "github.com/openshift/source-to-image/pkg/build/strategies/onbuild" 10 "github.com/openshift/source-to-image/pkg/build/strategies/sti" 11 "github.com/openshift/source-to-image/pkg/docker" 12 "github.com/openshift/source-to-image/pkg/util/fs" 13 utilstatus "github.com/openshift/source-to-image/pkg/util/status" 14 ) 15 16 // Strategy creates the appropriate build strategy for the provided config, using 17 // the overrides provided. Not all strategies support all overrides. 18 func Strategy(client docker.Client, config *api.Config, overrides build.Overrides) (build.Builder, api.BuildInfo, error) { 19 var builder build.Builder 20 var buildInfo api.BuildInfo 21 var err error 22 23 fileSystem := fs.NewFileSystem() 24 25 startTime := time.Now() 26 27 if len(config.AsDockerfile) != 0 { 28 builder, err = dockerfile.New(config, fileSystem) 29 if err != nil { 30 buildInfo.FailureReason = utilstatus.NewFailureReason( 31 utilstatus.ReasonGenericS2IBuildFailed, 32 utilstatus.ReasonMessageGenericS2iBuildFailed, 33 ) 34 return nil, buildInfo, err 35 } 36 return builder, buildInfo, nil 37 } 38 39 dkr := docker.New(client, config.PullAuthentication) 40 image, err := docker.GetBuilderImage(dkr, config) 41 buildInfo.Stages = api.RecordStageAndStepInfo(buildInfo.Stages, api.StagePullImages, api.StepPullBuilderImage, startTime, time.Now()) 42 if err != nil { 43 buildInfo.FailureReason = utilstatus.NewFailureReason( 44 utilstatus.ReasonPullBuilderImageFailed, 45 utilstatus.ReasonMessagePullBuilderImageFailed, 46 ) 47 return nil, buildInfo, err 48 } 49 config.HasOnBuild = image.OnBuild 50 51 if config.AssembleUser, err = docker.GetAssembleUser(dkr, config); err != nil { 52 buildInfo.FailureReason = utilstatus.NewFailureReason( 53 utilstatus.ReasonPullBuilderImageFailed, 54 utilstatus.ReasonMessagePullBuilderImageFailed, 55 ) 56 return nil, buildInfo, err 57 } 58 59 // if we're blocking onbuild, just do a normal s2i build flow 60 // which won't do a docker build and invoke the onbuild commands 61 if image.OnBuild && !config.BlockOnBuild { 62 builder, err = onbuild.New(client, config, fileSystem, overrides) 63 if err != nil { 64 buildInfo.FailureReason = utilstatus.NewFailureReason( 65 utilstatus.ReasonGenericS2IBuildFailed, 66 utilstatus.ReasonMessageGenericS2iBuildFailed, 67 ) 68 return nil, buildInfo, err 69 } 70 return builder, buildInfo, nil 71 } 72 73 builder, err = sti.New(client, config, fileSystem, overrides) 74 if err != nil { 75 buildInfo.FailureReason = utilstatus.NewFailureReason( 76 utilstatus.ReasonGenericS2IBuildFailed, 77 utilstatus.ReasonMessageGenericS2iBuildFailed, 78 ) 79 return nil, buildInfo, err 80 } 81 return builder, buildInfo, err 82 }