When multiple processes try to download the same chart version
concurrently (e.g., via Terraform), they can race to write the
destination file. On Windows, this results in 'Access Denied'
errors because the file cannot be renamed while another process
has a handle to the destination.
This commit introduces 'PlatformAtomicWriteFile' to the fileutil
package. On Unix-like systems, it simply delegates to AtomicWriteFile,
maintaining existing behavior. On Windows, it coordinates writes using
a lock file (.lock). It acquires the lock, then performs the atomic
write.
Crucially, this implementation ensures that existing files are
overwritten (rather than skipped). This ensures that if a chart is
republished with the same version, the local cache is correctly updated,
preventing stale data issues.
Fixes#31633
Signed-off-by: Orgad Shaneh <orgad.shaneh@audiocodes.com>
* feat(create): add hidden --chart-api-version flag
Add --chart-api-version flag to helm create command to allow selecting
chart API version (v2 or v3) when creating a new chart.
- Default is v2 (existing behavior unchanged)
- v3 uses internal/chart/v3 scaffold generator
- Invalid versions return clear error message
- Works with --starter flag
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
* Add HELM_EXPERIMENTAL_CHART_V3 feature gate to create command
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
* make chartv3 private and use loader to load the chart
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
* Hide chart-api-version flag until chart v3 is officially released
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
* Conditionally hide the --chart-api-version flag if chart v3 is not enabled
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
* Add internal gates package for internal feature gates
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
* Add doc for internal/gates package
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
---------
Signed-off-by: Evans Mungai <mbuevans@gmail.com>
Signed-off-by: Luke Reed <luke@lreed.net>
support OCI registries as well
Signed-off-by: Luke Reed <luke@lreed.net>
revert changes to DownloadTo function and implement using the ChartDownloader object instead
Signed-off-by: Luke Reed <luke@lreed.net>
make sure update will still update repoURL
Signed-off-by: Luke Reed <luke@lreed.net>
Signed-off-by: Andy Suderman <andy@suderman.dev>
Set the repository URL to path if a URL is not found
Signed-off-by: Andy Suderman <andy@suderman.dev>
Fixes
Signed-off-by: Andy Suderman <andy@suderman.dev>
Signed-off-by: Aleksei Krugliak <aleksei.krugliak@altenar.com>
The --hide-notes and --render-subchart-notes flags have no effect for
`helm template` since template output never includes notes. Mark these
flags as deprecated and hide them from help output.
The flags are preserved for backwards compatibility in Helm 4 and will
be removed in Helm 5.
Fixes#31752
Signed-off-by: Scott Rigby <scott@r6by.com>
When copying slices containing nil interface{} elements, the copyValue
function would panic with 'reflect: call of reflect.Value.Set on zero
Value'. This occurred because reflect.ValueOf(nil) returns a zero Value
that cannot be set.
This issue was introduced in v4.1.0 when replacing mitchellh/copystructure
with an internal implementation. The fix mirrors the existing nil handling
logic used for map values.
Fixes helm template panic when processing charts with YAML like:
extraArgs:
-
Added test case to verify slice elements with nil values are properly
handled during deep copy operations.
Signed-off-by: Philipp Born <git@pborn.eu>
Improve the description to explain the three usage scenarios:
- --wait alone defaults to 'watcher' strategy
- --wait=<value> uses the specified strategy
- flag omitted defaults to 'hookOnly'
Signed-off-by: Evans Mungai <mbuevans@gmail.com>