From a9c7839491675401d6e9b2cea960e65a26688d47 Mon Sep 17 00:00:00 2001 From: Jordan Goasdoue Date: Mon, 4 May 2020 17:51:07 +0200 Subject: [PATCH] fix: stages are now resolved correctly if skip-unused --- pkg/executor/build.go | 6 +++--- pkg/executor/build_test.go | 17 ++++++++++++----- 2 files changed, 15 insertions(+), 8 deletions(-) diff --git a/pkg/executor/build.go b/pkg/executor/build.go index 374f626a5..87a44df43 100644 --- a/pkg/executor/build.go +++ b/pkg/executor/build.go @@ -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) diff --git a/pkg/executor/build_test.go b/pkg/executor/build_test.go index 385f5fe7e..dd1a377ce 100644 --- a/pkg/executor/build_test.go +++ b/pkg/executor/build_test.go @@ -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