fix: stages are now resolved correctly if skip-unused
This commit is contained in:
parent
ae9c9b2813
commit
a9c7839491
|
|
@ -575,12 +575,12 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
stageNameToIdx := ResolveCrossStageInstructions(stages)
|
|
||||||
|
|
||||||
kanikoStages, err := dockerfile.MakeKanikoStages(opts, stages, metaArgs)
|
kanikoStages, err := dockerfile.MakeKanikoStages(opts, stages, metaArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
stageNameToIdx := ResolveCrossStageInstructions(kanikoStages)
|
||||||
|
|
||||||
if err := util.GetExcludedFiles(opts.DockerfilePath, opts.SrcContext); err != nil {
|
if err := util.GetExcludedFiles(opts.DockerfilePath, opts.SrcContext); err != nil {
|
||||||
return nil, err
|
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"]
|
// 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)
|
nameToIndex := make(map[string]string)
|
||||||
for i, stage := range stages {
|
for i, stage := range stages {
|
||||||
index := strconv.Itoa(i)
|
index := strconv.Itoa(i)
|
||||||
|
|
|
||||||
|
|
@ -379,11 +379,11 @@ COPY --from=second /bar /bat
|
||||||
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
||||||
}
|
}
|
||||||
|
|
||||||
stageNameToIdx := ResolveCrossStageInstructions(testStages)
|
|
||||||
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
|
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
|
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
|
||||||
}
|
}
|
||||||
|
stageNameToIdx := ResolveCrossStageInstructions(kanikoStages)
|
||||||
|
|
||||||
got, err := CalculateDependencies(kanikoStages, opts, stageNameToIdx)
|
got, err := CalculateDependencies(kanikoStages, opts, stageNameToIdx)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
|
@ -933,11 +933,12 @@ COPY %s bar.txt
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
||||||
}
|
}
|
||||||
_ = ResolveCrossStageInstructions(testStages)
|
|
||||||
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
|
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
|
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
|
||||||
}
|
}
|
||||||
|
_ = ResolveCrossStageInstructions(kanikoStages)
|
||||||
stage := kanikoStages[0]
|
stage := kanikoStages[0]
|
||||||
|
|
||||||
cmds := stage.Commands
|
cmds := stage.Commands
|
||||||
|
|
@ -1008,11 +1009,12 @@ COPY %s bar.txt
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
||||||
}
|
}
|
||||||
_ = ResolveCrossStageInstructions(testStages)
|
|
||||||
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
|
kanikoStages, err := dockerfile.MakeKanikoStages(opts, testStages, metaArgs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
|
t.Errorf("Failed to parse stages to Kaniko Stages: %s", err)
|
||||||
}
|
}
|
||||||
|
_ = ResolveCrossStageInstructions(kanikoStages)
|
||||||
|
|
||||||
stage := kanikoStages[0]
|
stage := kanikoStages[0]
|
||||||
|
|
||||||
|
|
@ -1333,11 +1335,16 @@ func Test_ResolveCrossStageInstructions(t *testing.T) {
|
||||||
COPY --from=third /hi3 /hi4
|
COPY --from=third /hi3 /hi4
|
||||||
COPY --from=2 /hi3 /hi4
|
COPY --from=2 /hi3 /hi4
|
||||||
`
|
`
|
||||||
stages, _, err := dockerfile.Parse([]byte(df))
|
stages, metaArgs, err := dockerfile.Parse([]byte(df))
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Fatal(err)
|
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 {
|
for index, stage := range stages {
|
||||||
if index == 0 {
|
if index == 0 {
|
||||||
continue
|
continue
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue