fix: stages are now resolved correctly if skip-unused

This commit is contained in:
Jordan Goasdoue 2020-05-04 17:51:07 +02:00 committed by goasdoue
parent ae9c9b2813
commit a9c7839491
2 changed files with 15 additions and 8 deletions

View File

@ -575,12 +575,12 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) {
if err != nil {
return nil, err
}
stageNameToIdx := ResolveCrossStageInstructions(stages)
kanikoStages, err := dockerfile.MakeKanikoStages(opts, stages, metaArgs)
if err != nil {
return nil, err
}
stageNameToIdx := ResolveCrossStageInstructions(kanikoStages)
if err := util.GetExcludedFiles(opts.DockerfilePath, opts.SrcContext); err != nil {
return nil, err
@ -841,9 +841,9 @@ func reviewConfig(stage config.KanikoStage, config *v1.Config) {
}
}
// iterates over a list of stages and resolves instructions referring to earlier stages
// iterates over a list of KanikoStage and resolves instructions referring to earlier stages
// returns a mapping of stage name to stage id, f.e - ["first": "0", "second": "1", "target": "2"]
func ResolveCrossStageInstructions(stages []instructions.Stage) map[string]string {
func ResolveCrossStageInstructions(stages []config.KanikoStage) map[string]string {
nameToIndex := make(map[string]string)
for i, stage := range stages {
index := strconv.Itoa(i)

View File

@ -379,11 +379,11 @@ COPY --from=second /bar /bat
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
}
stageNameToIdx := ResolveCrossStageInstructions(testStages)
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
if err != nil {
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
}
stageNameToIdx := ResolveCrossStageInstructions(kanikoStages)
got, err := CalculateDependencies(kanikoStages, opts, stageNameToIdx)
if err != nil {
@ -933,11 +933,12 @@ COPY %s bar.txt
if err != nil {
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
}
_ = ResolveCrossStageInstructions(testStages)
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
if err != nil {
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
}
_ = ResolveCrossStageInstructions(kanikoStages)
stage := kanikoStages[0]
cmds := stage.Commands
@ -1008,11 +1009,12 @@ COPY %s bar.txt
if err != nil {
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
}
_ = ResolveCrossStageInstructions(testStages)
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
if err != nil {
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
}
_ = ResolveCrossStageInstructions(kanikoStages)
stage := kanikoStages[0]
@ -1333,11 +1335,16 @@ func Test_ResolveCrossStageInstructions(t *testing.T) {
COPY --from=third /hi3 /hi4
COPY --from=2 /hi3 /hi4
`
stages, _, err := dockerfile.Parse([]byte(df))
stages, metaArgs, err := dockerfile.Parse([]byte(df))
if err != nil {
t.Fatal(err)
}
stageToIdx := ResolveCrossStageInstructions(stages)
opts := &config.KanikoOptions{}
kanikoStages, err := dockerfile.MakeKanikoStages(opts, stages, metaArgs)
if err != nil {
t.Fatal(err)
}
stageToIdx := ResolveCrossStageInstructions(kanikoStages)
for index, stage := range stages {
if index == 0 {
continue