optimize: don't parse Dockerfile twice and just reuse stages
This commit is contained in:
parent
0fe0a64113
commit
a3ce1cebf3
|
|
@ -487,11 +487,7 @@ func (s *stageBuilder) saveLayerToImage(layer v1.Layer, createdBy string) error
|
||||||
return err
|
return err
|
||||||
}
|
}
|
||||||
|
|
||||||
func CalculateDependencies(opts *config.KanikoOptions) (map[int][]string, error) {
|
func CalculateDependencies(stages []config.KanikoStage, opts *config.KanikoOptions) (map[int][]string, error) {
|
||||||
stages, err := dockerfile.Stages(opts)
|
|
||||||
if err != nil {
|
|
||||||
return nil, err
|
|
||||||
}
|
|
||||||
images := []v1.Image{}
|
images := []v1.Image{}
|
||||||
depGraph := map[int][]string{}
|
depGraph := map[int][]string{}
|
||||||
for _, s := range stages {
|
for _, s := range stages {
|
||||||
|
|
@ -559,15 +555,18 @@ func DoBuild(opts *config.KanikoOptions) (v1.Image, error) {
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// TODO is this even used?
|
||||||
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
|
||||||
}
|
}
|
||||||
|
|
||||||
// Some stages may refer to other random images, not previous stages
|
// Some stages may refer to other random images, not previous stages
|
||||||
if err := fetchExtraStages(stages, opts); err != nil {
|
if err := fetchExtraStages(stages, opts); err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
crossStageDependencies, err := CalculateDependencies(opts)
|
crossStageDependencies, err := CalculateDependencies(stages, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -322,8 +322,12 @@ COPY --from=stage2 /bar /bat
|
||||||
opts := &config.KanikoOptions{
|
opts := &config.KanikoOptions{
|
||||||
DockerfilePath: f.Name(),
|
DockerfilePath: f.Name(),
|
||||||
}
|
}
|
||||||
|
testStages, err := dockerfile.Stages(opts)
|
||||||
|
if err != nil {
|
||||||
|
t.Errorf("Failed to parse test dockerfile to stages: %s", err)
|
||||||
|
}
|
||||||
|
|
||||||
got, err := CalculateDependencies(opts)
|
got, err := CalculateDependencies(testStages, opts)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
t.Errorf("got error: %s,", err)
|
t.Errorf("got error: %s,", err)
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue