Fix COPY fails when multiple files are copied to path specified in ENV (#3034)
* Fixed unsolved ENV variable used as dest of COPY * added unit test for copy cmd using env var as dest * remove comment
This commit is contained in:
parent
8148159c30
commit
ba433abdb6
|
|
@ -426,6 +426,70 @@ func Test_resolveIfSymlink(t *testing.T) {
|
|||
}
|
||||
}
|
||||
|
||||
func Test_CopyEnvAndWildcards(t *testing.T) {
|
||||
setupDirs := func(t *testing.T) (string, string) {
|
||||
testDir := t.TempDir()
|
||||
|
||||
dir := filepath.Join(testDir, "bar")
|
||||
|
||||
if err := os.MkdirAll(dir, 0777); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
file := filepath.Join(dir, "bam.txt")
|
||||
|
||||
if err := os.WriteFile(file, []byte("meow"), 0777); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
targetPath := filepath.Join(dir, "dam.txt")
|
||||
if err := os.WriteFile(targetPath, []byte("woof"), 0777); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
if err := os.Symlink("dam.txt", filepath.Join(dir, "sym.link")); err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
return testDir, filepath.Base(dir)
|
||||
}
|
||||
testDir, srcDir := setupDirs(t)
|
||||
t.Run("copy sources into a dir defined in env variable", func(t *testing.T) {
|
||||
defer os.RemoveAll(testDir)
|
||||
expected, err := readDirectory(filepath.Join(testDir, srcDir))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
targetPath := filepath.Join(testDir, "target") + "/"
|
||||
|
||||
cmd := CopyCommand{
|
||||
cmd: &instructions.CopyCommand{
|
||||
SourcesAndDest: instructions.SourcesAndDest{SourcePaths: []string{srcDir + "/*"}, DestPath: "$TARGET_PATH"},
|
||||
},
|
||||
fileContext: util.FileContext{Root: testDir},
|
||||
}
|
||||
|
||||
cfg := &v1.Config{
|
||||
Cmd: nil,
|
||||
Env: []string{"TARGET_PATH=" + targetPath},
|
||||
WorkingDir: testDir,
|
||||
}
|
||||
|
||||
err = cmd.ExecuteCommand(cfg, dockerfile.NewBuildArgs([]string{}))
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
testutil.CheckNoError(t, err)
|
||||
|
||||
actual, err := readDirectory(targetPath)
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
for i, f := range actual {
|
||||
testutil.CheckDeepEqual(t, expected[i].Name(), f.Name())
|
||||
testutil.CheckDeepEqual(t, expected[i].Mode(), f.Mode())
|
||||
}
|
||||
})
|
||||
}
|
||||
|
||||
func TestCopyCommand_ExecuteCommand_Extended(t *testing.T) {
|
||||
setupDirs := func(t *testing.T) (string, string) {
|
||||
testDir := t.TempDir()
|
||||
|
|
|
|||
|
|
@ -99,6 +99,7 @@ func ResolveEnvAndWildcards(sd instructions.SourcesAndDest, fileContext FileCont
|
|||
return nil, "", errors.Wrap(err, "failed to resolve environment for dest path")
|
||||
}
|
||||
dest := dests[0]
|
||||
sd.DestPath = dest
|
||||
// Resolve wildcards and get a list of resolved sources
|
||||
srcs, err := ResolveSources(resolvedEnvs, fileContext.Root)
|
||||
if err != nil {
|
||||
|
|
|
|||
Loading…
Reference in New Issue