55 "context"
66 "fmt"
77 "path/filepath"
8+ "strings"
89
910 "github.com/docker/docker/builder/dockerignore"
1011 "github.com/moby/buildkit/frontend/dockerfile/instructions"
@@ -68,15 +69,17 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
6869 WerfImageName string
6970 Stage * dockerfile.DockerfileStage
7071 Level int
72+ IsTargetStage bool
7173 }{
72- {WerfImageName : dockerfileImageConfig .Name , Stage : targetStage , Level : 0 },
74+ {WerfImageName : dockerfileImageConfig .Name , Stage : targetStage , Level : 0 , IsTargetStage : true },
7375 }
7476
7577 appendQueue := func (werfImageName string , stage * dockerfile.DockerfileStage , level int ) {
7678 queue = append (queue , struct {
7779 WerfImageName string
7880 Stage * dockerfile.DockerfileStage
7981 Level int
82+ IsTargetStage bool
8083 }{WerfImageName : werfImageName , Stage : stage , Level : level })
8184 }
8285
@@ -103,6 +106,7 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
103106 if baseStg := cfg .FindStage (stg .BaseName ); baseStg != nil {
104107 img , err = NewImage (ctx , item .WerfImageName , StageAsBaseImage , ImageOptions {
105108 IsDockerfileImage : true ,
109+ IsDockerfileTargetStage : item .IsTargetStage ,
106110 DockerfileImageConfig : dockerfileImageConfig ,
107111 CommonImageOptions : opts ,
108112 BaseImageName : baseStg .WerfImageName (),
@@ -116,6 +120,7 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
116120 } else {
117121 img , err = NewImage (ctx , item .WerfImageName , ImageFromRegistryAsBaseImage , ImageOptions {
118122 IsDockerfileImage : true ,
123+ IsDockerfileTargetStage : item .IsTargetStage ,
119124 DockerfileImageConfig : dockerfileImageConfig ,
120125 CommonImageOptions : opts ,
121126 BaseImageReference : stg .BaseName ,
@@ -127,10 +132,11 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
127132 }
128133
129134 for ind , instr := range stg .Instructions {
130- stageName := stage . StageName ( fmt .Sprintf ("%s%d" , instr .GetInstructionData ().Name (), ind ) )
135+ stageLogName := fmt .Sprintf ("%s%d" , strings . ToUpper ( instr .GetInstructionData ().Name ()) , ind + 1 )
131136 isFirstStage := (len (img .stages ) == 0 )
132137 baseStageOptions := & stage.BaseStageOptions {
133138 ImageName : img .Name ,
139+ LogName : stageLogName ,
134140 ImageTmpDir : img .TmpDir ,
135141 ContainerWerfDir : img .ContainerWerfDir ,
136142 ProjectName : opts .ProjectName ,
@@ -141,37 +147,37 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
141147 case * dockerfile.DockerfileStageInstruction [* instructions.ArgCommand ]:
142148 continue
143149 case * dockerfile.DockerfileStageInstruction [* instructions.AddCommand ]:
144- stg = stage_instruction .NewAdd (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
150+ stg = stage_instruction .NewAdd (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
145151 case * dockerfile.DockerfileStageInstruction [* instructions.CmdCommand ]:
146- stg = stage_instruction .NewCmd (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
152+ stg = stage_instruction .NewCmd (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
147153 case * dockerfile.DockerfileStageInstruction [* instructions.CopyCommand ]:
148- stg = stage_instruction .NewCopy (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
154+ stg = stage_instruction .NewCopy (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
149155 case * dockerfile.DockerfileStageInstruction [* instructions.EntrypointCommand ]:
150- stg = stage_instruction .NewEntrypoint (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
156+ stg = stage_instruction .NewEntrypoint (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
151157 case * dockerfile.DockerfileStageInstruction [* instructions.EnvCommand ]:
152- stg = stage_instruction .NewEnv (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
158+ stg = stage_instruction .NewEnv (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
153159 case * dockerfile.DockerfileStageInstruction [* instructions.ExposeCommand ]:
154- stg = stage_instruction .NewExpose (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
160+ stg = stage_instruction .NewExpose (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
155161 case * dockerfile.DockerfileStageInstruction [* instructions.HealthCheckCommand ]:
156- stg = stage_instruction .NewHealthcheck (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
162+ stg = stage_instruction .NewHealthcheck (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
157163 case * dockerfile.DockerfileStageInstruction [* instructions.LabelCommand ]:
158- stg = stage_instruction .NewLabel (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
164+ stg = stage_instruction .NewLabel (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
159165 case * dockerfile.DockerfileStageInstruction [* instructions.MaintainerCommand ]:
160- stg = stage_instruction .NewMaintainer (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
166+ stg = stage_instruction .NewMaintainer (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
161167 case * dockerfile.DockerfileStageInstruction [* instructions.OnbuildCommand ]:
162- stg = stage_instruction .NewOnBuild (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
168+ stg = stage_instruction .NewOnBuild (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
163169 case * dockerfile.DockerfileStageInstruction [* instructions.RunCommand ]:
164- stg = stage_instruction .NewRun (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
170+ stg = stage_instruction .NewRun (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
165171 case * dockerfile.DockerfileStageInstruction [* instructions.ShellCommand ]:
166- stg = stage_instruction .NewShell (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
172+ stg = stage_instruction .NewShell (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
167173 case * dockerfile.DockerfileStageInstruction [* instructions.StopSignalCommand ]:
168- stg = stage_instruction .NewStopSignal (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
174+ stg = stage_instruction .NewStopSignal (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
169175 case * dockerfile.DockerfileStageInstruction [* instructions.UserCommand ]:
170- stg = stage_instruction .NewUser (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
176+ stg = stage_instruction .NewUser (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
171177 case * dockerfile.DockerfileStageInstruction [* instructions.VolumeCommand ]:
172- stg = stage_instruction .NewVolume (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
178+ stg = stage_instruction .NewVolume (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
173179 case * dockerfile.DockerfileStageInstruction [* instructions.WorkdirCommand ]:
174- stg = stage_instruction .NewWorkdir (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
180+ stg = stage_instruction .NewWorkdir (typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
175181 default :
176182 panic (fmt .Sprintf ("unsupported instruction type %#v" , instr ))
177183 }
@@ -191,9 +197,10 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
191197
192198func mapLegacyDockerfileToImage (ctx context.Context , dockerfileImageConfig * config.ImageFromDockerfile , opts CommonImageOptions ) (* Image , error ) {
193199 img , err := NewImage (ctx , dockerfileImageConfig .Name , NoBaseImage , ImageOptions {
194- CommonImageOptions : opts ,
195- IsDockerfileImage : true ,
196- DockerfileImageConfig : dockerfileImageConfig ,
200+ CommonImageOptions : opts ,
201+ IsDockerfileImage : true ,
202+ IsDockerfileTargetStage : true ,
203+ DockerfileImageConfig : dockerfileImageConfig ,
197204 })
198205 if err != nil {
199206 return nil , fmt .Errorf ("unable to create image %q: %w" , dockerfileImageConfig .Name , err )
0 commit comments