diff --git a/pkg/util/command_util.go b/pkg/util/command_util.go index a0a7ca6862..f2866770b0 100644 --- a/pkg/util/command_util.go +++ b/pkg/util/command_util.go @@ -216,11 +216,17 @@ func URLDestinationFilepath(rawurl, dest, cwd string, envs []string) (string, er } return dest, nil } - urlBase := filepath.Base(rawurl) - urlBase, err := ResolveEnvironmentReplacement(urlBase, envs, true) + + urlBase, err := ResolveEnvironmentReplacement(rawurl, envs, true) + if err != nil { + return "", err + } + + urlBase, err = extractFilename(urlBase) if err != nil { return "", err } + destPath := filepath.Join(dest, urlBase) if !filepath.IsAbs(dest) { @@ -470,3 +476,13 @@ func getUID(userStr string) (uint32, error) { } return uint32(uid), nil } + +// ExtractFilename extracts the filename from a URL without its query url +func extractFilename(rawURL string) (string, error) { + parsedURL, err := url.Parse(rawURL) + if err != nil { + return "", err + } + filename := filepath.Base(parsedURL.Path) + return filename, nil +} diff --git a/pkg/util/command_util_test.go b/pkg/util/command_util_test.go index 19915cfd7a..963427820a 100644 --- a/pkg/util/command_util_test.go +++ b/pkg/util/command_util_test.go @@ -226,6 +226,12 @@ var urlDestFilepathTests = []struct { dest: "/test", expectedDest: "/test", }, + { + url: "https://something/something.tar?foo=bar", + cwd: "/cwd", + dest: "/dir/", + expectedDest: "/dir/something.tar", + }, { url: "https://something/something", cwd: "/test",