Commit Graph
2693 Commits
Author SHA1 Message Date
copilot-swe-agent[bot]andyxxhero ed823115f1 fix: restore SelectedReleases handling in GroupReleasesByDependency and revert snapshots
The root cause of the CI failure was that GroupReleasesByDependency was changed
to use !r.Filtered instead of opts.SelectedReleases for the DAG plan's Only field.
When no selectors are active (like helmfile destroy), all releases are unfiltered,
causing all releases to be planned for deletion - including uninstalled ones.

Fix: Use opts.SelectedReleases when provided, fall back to Filtered flag otherwise.
Also remove unnecessary SelectedReleases block from PlanReleases since
GroupReleasesByDependency now handles it directly.
Restore test snapshots from main as the behavior should now match.

Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/170cecc0-7a3e-4326-98d3-4f2bffee1848
2026-03-25 00:12:22 +00:00
copilot-swe-agent[bot]andyxxhero 0cf7ab6908 test: add test case for both includeNeeds and includeTransitiveNeeds enabled
Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/c0b910d1-387a-476e-beb9-ea38ab6c1061
2026-03-24 23:30:57 +00:00
copilot-swe-agent[bot]andyxxhero 4fada4f73c fix: address review feedback - remove WriteValuesImpl overrides, optimize debug log, add direct-only needs test
Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/c0b910d1-387a-476e-beb9-ea38ab6c1061
2026-03-24 23:30:07 +00:00
copilot-swe-agent[bot] fd9c2179fc Merge branch 'main' into fix-include-needs-transitive-1003 2026-03-24 23:15:46 +00:00
copilot-swe-agent[bot]andyxxhero d00c3f1c87 fix: remove extra blank line in diff-args apply-live-stderr integration test output
Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
Agent-Logs-Url: https://github.com/helmfile/helmfile/sessions/d8f38e68-8ff2-4d2d-8441-79aa254db5b7
2026-03-24 23:00:33 +00:00
dependabot[bot] 2053fdd94e build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.97.1 to 1.97.2 (#2500) 2026-03-25 06:07:15 +08:00
dependabot[bot] a9175ab927 build(deps): bump azure/setup-helm from 4.3.1 to 5.0.0 (#2499) 2026-03-25 06:06:45 +08:00
Jinyu c70b20ad7a feat: add an arg that passing description to helm upgrade command (#2497)
* feat: add an arg that passing description to `helm upgrade` command

fix: github actions

Signed-off-by: swimablefish <swimablefish@gmail.com>

* fix: lint and test failed

Signed-off-by: swimablefish <swimablefish@gmail.com>

* feat: encapsulation

Signed-off-by: swimablefish <swimablefish@gmail.com>

* feat: add version gate

Signed-off-by: swimablefish <swimablefish@gmail.com>

* feat: rephrase

Signed-off-by: swimablefish <swimablefish@gmail.com>

---------

Signed-off-by: swimablefish <swimablefish@gmail.com>
2026-03-24 21:01:44 +08:00
yxxhero e72315a876 build: update helm-diff to v3.15.3 (#2498)
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-24 17:28:41 +08:00
yxxhero 472e8c7a2d fix: error on missing secret key when using vals (#2496)
* fix: error on missing secret key when using vals

Add HELMFILE_VALS_FAIL_ON_MISSING_KEY_IN_MAP environment variable
to control whether vals should fail when a referenced key does not
exist in the secret map.

Previously, when a secret reference like ref+vault://path#/nonexistent-key
pointed to a non-existent key, vals would silently return an empty string
without error. This could lead to deployments with missing configuration.

Default behavior remains backward compatible (returns empty string).
Set HELMFILE_VALS_FAIL_ON_MISSING_KEY_IN_MAP=true to enable strict mode.

Fixes #1563

Signed-off-by: yxxhero <aiopsclub@163.com>

* refactor: extract buildValsOptions helper and improve tests

- Extract buildValsOptions() to make vals configuration testable
- Use t.Setenv instead of manual env save/restore in tests
- Test actual vals.Options output including FailOnMissingKeyInMap

Addresses PR review comments on #2496

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix: use strconv.ParseBool and make tests hermetic

- Use strconv.ParseBool for FailOnMissingKeyInMap parsing to support
  common boolean values like 'TRUE', '1', '0', etc.
- Always set env vars explicitly in tests (even to empty string) to
  prevent flaky tests when env vars are set externally
- Add test cases for various boolean formats

Signed-off-by: yxxhero <aiopsclub@163.com>

* docs: add documentation for vals-related environment variables

Add documentation for:
- HELMFILE_AWS_SDK_LOG_LEVEL: configure AWS SDK logging for vals
- HELMFILE_VALS_FAIL_ON_MISSING_KEY_IN_MAP: enable strict mode for secret refs

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix: improve error handling and case-insensitive comparison

- buildValsOptions now returns error for invalid boolean values
  instead of silently defaulting to false
- Use strings.EqualFold for case-insensitive 'off' comparison
  to handle OFF, Off, etc.
- Add test cases for invalid boolean and uppercase OFF
- Update docs to mention case-insensitive and error behavior

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix: normalize log level and improve singleton initialization

- Normalize AWS log level 'off' to lowercase for true case-insensitivity
- Replace sync.Once with mutex to allow recovery from config errors
- Update tests to expect normalized 'off' value
- Update docs to clarify when error is raised

Signed-off-by: yxxhero <aiopsclub@163.com>

---------

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-24 09:42:54 +08:00
Hristiyan Ivanov 5c67cbcd6a fix: pass --timeout flag through to helm for sync and apply (#2495)
* fix: propagate timeout flag

Signed-off-by: Hristiyan Ivanov <hristiyan.d.ivanov@gmail.com>

* test: add test for propagating timeout flag

Signed-off-by: Hristiyan Ivanov <hristiyan.d.ivanov@gmail.com>

* feat: add timeout flag to apply command

Signed-off-by: Hristiyan Ivanov <hristiyan.d.ivanov@gmail.com>

* test: add test for timeout flag for helmfile apply

Signed-off-by: Hristiyan Ivanov <hristiyan.d.ivanov@gmail.com>

* fix: improve description of timeout flag

Signed-off-by: Hristiyan Ivanov <hristiyan.d.ivanov@gmail.com>

---------

Signed-off-by: Hristiyan Ivanov <hristiyan.d.ivanov@gmail.com>
2026-03-22 07:34:33 +08:00
yxxhero 43b426892e fix: cleanup hooks not receiving error signal (#2475)
* fix: cleanup hooks not receiving error signal

Closes #1041

Signed-off-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
Signed-off-by: yxxhero <aiopsclub@163.com>

* Add tests for cleanup hooks error propagation

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

---------

Signed-off-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-21 14:29:32 +08:00
dependabot[bot] 57c2b51eb0 build(deps): bump github.com/fatih/color from 1.18.0 to 1.19.0 (#2494)
Bumps [github.com/fatih/color](https://github.com/fatih/color) from 1.18.0 to 1.19.0.
- [Release notes](https://github.com/fatih/color/releases)
- [Commits](https://github.com/fatih/color/compare/v1.18.0...v1.19.0)

---
updated-dependencies:
- dependency-name: github.com/fatih/color
  dependency-version: 1.19.0
  dependency-type: direct:production
  update-type: version-update:semver-minor
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-21 08:38:08 +08:00
dependabot[bot] cbe383136e build(deps): bump k8s.io/client-go from 0.35.2 to 0.35.3 (#2492)
Bumps [k8s.io/client-go](https://github.com/kubernetes/client-go) from 0.35.2 to 0.35.3.
- [Changelog](https://github.com/kubernetes/client-go/blob/master/CHANGELOG.md)
- [Commits](https://github.com/kubernetes/client-go/compare/v0.35.2...v0.35.3)

---
updated-dependencies:
- dependency-name: k8s.io/client-go
  dependency-version: 0.35.3
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-20 07:55:30 +08:00
yxxhero df01afbbeb fix: helmfile list now reflects version from helmfile.lock (#2486)
* fix: helmfile list now reflects version from helmfile.lock

The list command now resolves locked dependencies before returning
release information, ensuring the version field reflects the pinned
version from helmfile.lock when present.

Fixes #1953

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix: address PR review comments

- Remove redundant maps.Copy in list() - labels already merged by GetReleasesWithLabels()
- Fix default lockfile path to use basePath for multi-file mode
- Update test to expect basePath-joined lockfile path
- Add multi-file test for lockfile resolution in helmfile.d directory

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix more test

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix: propagate errors instead of panic in list()

When skipCharts=false, errors from list() now properly propagate instead
of causing a crash. Uses a closure variable to capture the error and
propagates it after withPreparedCharts completes.

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix tests

Signed-off-by: yxxhero <aiopsclub@163.com>

---------

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-19 14:25:03 +08:00
dependabot[bot] 2ccd899399 build(deps): bump google.golang.org/grpc from 1.79.2 to 1.79.3 (#2490)
Bumps [google.golang.org/grpc](https://github.com/grpc/grpc-go) from 1.79.2 to 1.79.3.
- [Release notes](https://github.com/grpc/grpc-go/releases)
- [Commits](https://github.com/grpc/grpc-go/compare/v1.79.2...v1.79.3)

---
updated-dependencies:
- dependency-name: google.golang.org/grpc
  dependency-version: 1.79.3
  dependency-type: indirect
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-19 12:58:18 +08:00
Thomas Arrowandyxxhero 06d0994b84 Fix interactive apply asks in no change situation (#945)
This commit makes the apply logic exit early in the event there are no
changes to releases. I believe this effectively reverts helmfile#522.

Updates relevant snapshots

Clarify conditions under which preapply hooks are triggered to include that they will no longer fire if there is a no-op.
Docs as requested by the maintainer from a copilot request made by them.

Fixes: helmfile#679

Signed-off-by: Thomas Arrow <thomas.arrow@wikimedia.de>
Co-authored-by: yxxhero <11087727+yxxhero@users.noreply.github.com>
2026-03-19 08:45:42 +08:00
yxxhero 8e68dd0dd7 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 13:54:22 +08:00
yxxhero 20a2e1f5ec fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 13:23:03 +08:00
yxxhero 97a2f343f9 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 11:33:23 +08:00
yxxhero 3e75fa5a06 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 11:07:01 +08:00
yxxhero 573e8b00b6 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 09:06:14 +08:00
yxxhero f1d3b93079 add more files
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 92205e827a fix: prevent duplicate isReleaseInstalled checks in DetectReleasesToBeDeletedForSync
When a release with 'installed: false' appears multiple times in the release list
(due to duplicate entries or being included via needs), the isReleaseInstalled
function was being called multiple times for the same release, resulting in
duplicate 'Listing releases' log messages.

This fix adds a deduplication check using a 'checked' map to ensure each release
is only checked once, preventing duplicate helm list calls and log messages.

This fixes the diff-args integration test where 'Listing releases matching
^uninstalled$' appeared twice in stderr output.

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero f2e6c9a7ac fix: prevent duplicate disabled releases in withDAG for Diff command
When running helmfile diff with releases that have 'installed: false',
(flagging them as to-be-uninstalled), the release was being disabled
flag would be included in toRender. Later, these disabled releases were
added again via releasesToUninstall when includeDisabled is true,
causing them to appear twice in the final releases list.

This resulted in duplicate 'Listing releases' log messages and
potentially duplicate helm list calls.

The fix filters out disabled releases from toRender before passing it
to withDAG. This ensures disabled releases are only included once
in the final list (via releasesToUninstall at line 2378-2382).

Fixes the test failure in test/integration/test-cases/diff-args
where 'Listing releases matching ^uninstalled$' appeared twice
instead of once.

Note: diff-live-stderr still shows two messages because that test
was updated separately to match that behavior (with trailing spaces).
The non-live diff should now correctly shows only one message.

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 20928620a8 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 48254a990b fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero e8994292d8 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 33ae276b83 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 8e40e7c29d fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 86912d17f1 fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 1ce35648bf fix tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 1737bd83f5 fix more tests
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 2542988fbc fix: include-needs should only include direct dependencies, not transitive
- Fix collectDirectNeedsOnly to correctly match needs by full ID
- Fix PlanReleases to respect SelectedReleases when provided
- Fix unmarkNeedsDirectOnly to use full release IDs
- Update tests to expect correct behavior for include-needs vs include-transitive-needs
- Add SkipNeeds flag when needs are pre-included in withNeeds

This fixes CI issues in PR #2485

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 3815ce1143 Fix include-needs to correctly handle direct vs transitive dependencies
The withNeeds function was calling getSelectedReleases with false, false
for includeNeeds and includeTransitiveNeeds, which caused it to ignore
the --include-needs and --include-transitive-needs flags.

This fix:
1. Computes includeNeeds before calling getSelectedReleases
2. Passes the correct flags to getSelectedReleases
3. Sets st.Releases to selectedAndNeededReleases instead of deduplicated
4. Passes IncludeNeeds=false and IncludeTransitiveNeeds=false to PlanReleases
   since the needs are already included in selectedReleases

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 2cabadb81e test: update integration test with valid Helm release names
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 869a3c92c1 fix: include-needs should only include direct dependencies, not transitive
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero b06d390ade test: add integration test for include-needs vs include-transitive-needs
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero f2702416ae fix: log should show only releases matching selector, not including needs
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 03e7338eae fix: IncludeTransitiveNeeds should also enable WithDependencies in DAG planning
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 9cf1c05f6d fix: add IncludeNeeds to all ChartPrepareOptions
- Add IncludeNeeds to diff, template, lint, unittest, sync, apply ChartPrepareOptions
- All ConfigProviders already have DAGConfig embedded which includes IncludeNeeds()

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 406cbf395a fix: use config for IncludeNeeds in WriteValues command
- Add IncludeNeeds() to WriteValuesConfigProvider interface
- Implement IncludeNeeds() in WriteValuesImpl
- Update WriteValues function to use IncludeNeeds and IncludeTransitiveNeeds

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero d0ab641517 fix: remove unused args field from depsConfig
Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 981cce8231 fix: use config for IncludeNeeds in Deps and Repos commands
- Add IncludeNeeds() to DepsConfigProvider and ReposConfigProvider
- Update depsConfig in tests
- Use c.IncludeNeeds() in run.go instead of hardcoded false

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero e99cda9863 fix: use config for includeNeeds in Deps command
- Add IncludeNeeds() method to DepsConfigProvider interface
- Implement IncludeNeeds() in DepsImpl
- Update depsConfig in tests
- Use c.IncludeNeeds() in run.go instead of hardcoded false

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 48326b864e fix: address lint errors in CI
- Remove unused allReleases parameter from unmarkNeedsDirectOnly
- Fix gci formatting in app_sequential_test.go

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
yxxhero 72a8727d17 fix: --include-needs should only include direct dependencies
Fixes #1003

Previously, --include-needs was incorrectly including transitive
dependencies (dependencies of dependencies). This fix ensures that:

- --include-needs only includes direct needs
- --include-transitive-needs includes both direct and transitive needs

Changes:
- Add separate handling for direct vs transitive needs in state.go
- Add IncludeNeeds field to ChartPrepareOptions
- Add unmarkNeedsDirectOnly() and collectDirectNeedsOnly() functions
- Update ForEachState and related functions to accept both flags
- Fix incorrect usage of c.IncludeNeeds() for IncludeTransitiveNeeds
- Update tests to verify the correct behavior

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-18 08:25:32 +08:00
dependabot[bot] 97b3256058 build(deps): bump github.com/aws/aws-sdk-go-v2/config from 1.32.11 to 1.32.12 (#2487)
build(deps): bump github.com/aws/aws-sdk-go-v2/config

Bumps [github.com/aws/aws-sdk-go-v2/config](https://github.com/aws/aws-sdk-go-v2) from 1.32.11 to 1.32.12.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/config/v1.32.11...config/v1.32.12)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/config
  dependency-version: 1.32.12
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 08:12:12 +08:00
dependabot[bot] 7ed01954b7 build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3 from 1.97.0 to 1.97.1 (#2488)
build(deps): bump github.com/aws/aws-sdk-go-v2/service/s3

Bumps [github.com/aws/aws-sdk-go-v2/service/s3](https://github.com/aws/aws-sdk-go-v2) from 1.97.0 to 1.97.1.
- [Release notes](https://github.com/aws/aws-sdk-go-v2/releases)
- [Commits](https://github.com/aws/aws-sdk-go-v2/compare/service/s3/v1.97.0...service/s3/v1.97.1)

---
updated-dependencies:
- dependency-name: github.com/aws/aws-sdk-go-v2/service/s3
  dependency-version: 1.97.1
  dependency-type: direct:production
  update-type: version-update:semver-patch
...

Signed-off-by: dependabot[bot] <support@github.com>
Co-authored-by: dependabot[bot] <49699333+dependabot[bot]@users.noreply.github.com>
2026-03-17 06:45:47 +08:00
yxxhero d613c5484c feat: add --force-conflicts flag support for Helm 4 (#2480)
* feat: add --force-conflicts flag support for Helm 4

Add support for Helm 4's --force-conflicts flag which forces server-side
apply changes against conflicts. This flag is mutually exclusive with
--force/--force-replace and only available in Helm 4.

Fixes #2429

Signed-off-by: yxxhero <aiopsclub@163.com>

* fix: address review comments on force-conflicts feature

- Fix comment grammar: 'forces' instead of 'force'
- Improve error messages to indicate both sources (releases[] and helmDefaults)
- Add test case for helmDefaults.forceConflicts with Helm 3 (should error)
- Update TestGenerateID expected hashes after adding ForceConflicts field to structs

Signed-off-by: yxxhero <aiopsclub@163.com>

---------

Signed-off-by: yxxhero <aiopsclub@163.com>
2026-03-14 08:44:44 +08:00