Fix arg handling for multi-stage images in COPY instructions. (#621)

This commit is contained in:
dlorenc
2019-03-22 12:24:43 -05:00
committed by GitHub
parent 1bf4421047
commit c8fabdf6e4
4 changed files with 60 additions and 13 deletions
+8 -3
View File
@@ -383,8 +383,7 @@ func CalculateDependencies(opts *config.KanikoOptions) (map[int][]string, error)
return nil, err
}
}
initializeConfig(image)
cfg, err := image.ConfigFile()
cfg, err := initializeConfig(image)
if err != nil {
return nil, err
}
@@ -396,7 +395,7 @@ func CalculateDependencies(opts *config.KanikoOptions) (map[int][]string, error)
if err != nil {
continue
}
resolved, err := util.ResolveEnvironmentReplacementList(cmd.SourcesAndDest, cfg.Config.Env, true)
resolved, err := util.ResolveEnvironmentReplacementList(cmd.SourcesAndDest, ba.ReplacementEnvs(cfg.Config.Env), true)
if err != nil {
return nil, err
}
@@ -411,6 +410,12 @@ func CalculateDependencies(opts *config.KanikoOptions) (map[int][]string, error)
if err != nil {
return nil, err
}
case *instructions.ArgCommand:
k, v, err := commands.ParseArg(cmd.Key, cmd.Value, cfg.Config.Env, ba)
if err != nil {
return nil, err
}
ba.AddArg(k, v)
}
}
images = append(images, image)
+23 -1
View File
@@ -207,6 +207,23 @@ RUN bar
},
want: map[int][]string{},
},
{
name: "args",
args: args{
dockerfile: `
ARG myFile=foo
FROM debian as stage1
RUN foo
FROM stage1
ARG myFile
COPY --from=stage1 /tmp/$myFile.txt .
RUN bar
`,
},
want: map[int][]string{
0: {"/tmp/foo.txt"},
},
},
{
name: "simple deps",
args: args{
@@ -300,7 +317,12 @@ COPY --from=stage2 /bar /bat
DockerfilePath: f.Name(),
}
if got, _ := CalculateDependencies(opts); !reflect.DeepEqual(got, tt.want) {
got, err := CalculateDependencies(opts)
if err != nil {
t.Errorf("got error: %s,", err)
}
if !reflect.DeepEqual(got, tt.want) {
diff := cmp.Diff(got, tt.want)
t.Errorf("CalculateDependencies() = %v, want %v, diff %v", got, tt.want, diff)
}