@@ -118,21 +118,55 @@ func mapDockerfileToImagesSets(ctx context.Context, cfg *dockerfile.Dockerfile,
118118 }
119119
120120 for ind , instr := range stg .Instructions {
121+ stageName := stage .StageName (fmt .Sprintf ("%d-%s" , ind , instr .GetInstructionData ().Name ()))
122+ isFirstStage := (len (img .stages ) == 0 )
123+ baseStageOptions := & stage.BaseStageOptions {
124+ ImageName : img .Name ,
125+ ImageTmpDir : img .TmpDir ,
126+ ContainerWerfDir : img .ContainerWerfDir ,
127+ ProjectName : opts .ProjectName ,
128+ }
129+
130+ var stg stage.Interface
121131 switch typedInstr := any (instr ).(type ) {
132+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Add ]:
133+ stg = stage_instruction .NewAdd (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
134+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Cmd ]:
135+ stg = stage_instruction .NewCmd (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
136+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Copy ]:
137+ stg = stage_instruction .NewCopy (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
138+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Entrypoint ]:
139+ stg = stage_instruction .NewEntrypoint (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
140+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Env ]:
141+ stg = stage_instruction .NewEnv (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
142+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Expose ]:
143+ stg = stage_instruction .NewExpose (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
144+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Healthcheck ]:
145+ stg = stage_instruction .NewHealthcheck (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
146+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Label ]:
147+ stg = stage_instruction .NewLabel (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
148+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Maintainer ]:
149+ stg = stage_instruction .NewMaintainer (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
150+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.OnBuild ]:
151+ stg = stage_instruction .NewOnBuild (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
122152 case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Run ]:
123- isFirstStage := (len (img .stages ) == 0 )
124-
125- img .stages = append (img .stages , stage_instruction .NewRun (stage .StageName (fmt .Sprintf ("%d-%s" , ind , typedInstr .Data .Name ())), typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , & stage.BaseStageOptions {
126- ImageName : img .Name ,
127- ImageTmpDir : img .TmpDir ,
128- ContainerWerfDir : img .ContainerWerfDir ,
129- ProjectName : opts .ProjectName ,
130- }))
131-
153+ stg = stage_instruction .NewRun (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
154+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Shell ]:
155+ stg = stage_instruction .NewShell (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
156+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.StopSignal ]:
157+ stg = stage_instruction .NewStopSignal (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
158+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.User ]:
159+ stg = stage_instruction .NewUser (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
160+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Volume ]:
161+ stg = stage_instruction .NewVolume (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
162+ case * dockerfile.DockerfileStageInstruction [* dockerfile_instruction.Workdir ]:
163+ stg = stage_instruction .NewWorkdir (stageName , typedInstr , dockerfileImageConfig .Dependencies , ! isFirstStage , baseStageOptions )
132164 default :
133165 panic (fmt .Sprintf ("unsupported instruction type %#v" , instr ))
134166 }
135167
168+ img .stages = append (img .stages , stg )
169+
136170 for _ , dep := range instr .GetDependenciesByStageRef () {
137171 appendQueue (dep , item .Level + 1 )
138172 }
0 commit comments