Manager.downloadAll derives its scratch directory as tmpcharts-<pid>
(added in #13120 to fix#13110, a race between separate helm process
invocations sharing a chart directory). That fix does not cover the
case where downloadAll is called concurrently by multiple goroutines
within a single process - e.g. a caller embedding Helm as a library
that renders several profiles against the same chart path in parallel
(this is how Skaffold's built-in Helm renderer works). All such calls
share one PID, so they still resolve to the same tmpcharts-<pid> path
and race on it: one goroutine's deferred os.RemoveAll can delete the
directory out from under another goroutine's in-flight download,
surfacing as:
lstat .../tmpcharts-<pid>: no such file or directory
Switch to os.MkdirTemp, which atomically allocates a directory with a
guaranteed-unique name, while keeping the PID as a prefix for
debuggability. Adds TestDownloadAllConcurrent, which reproduces the
race under -race with the old code and passes reliably with the fix.
Fixes#32532
Signed-off-by: Anis Khan <2815766+aniskhan001@users.noreply.github.com>