* feat: add per-release continue-on-error support
Work in progress for discussion #2799.
This introduces the initial release-level configuration needed to
continue processing independent releases after a deployment failure.
The DAG execution and failure propagation behavior are still being
implemented.
Refs #2799
Signed-off-by: Axel Delille <Axel.delille31@gmail.com>
* fix: address review findings for continueOnError
Review fixes for the per-release continueOnError feature:
1. Regenerate values-file ID hashes in pkg/state/temp_test.go — adding
ContinueOnError to ReleaseSpec shifts generateValuesID hashes, which
broke TestGenerateID (the test file notes these must be regenerated
whenever ReleaseSpec changes).
2. Remove the dead skippedErrors variable in withBatches and instead log
each skipped release with logger.Warnf at decision time, so users see
why a release never ran instead of only learning from the final error
list.
3. Aggregate all errors from a state file instead of returning only
errs[0] in visitStatesWithContext/processStateFileParallel. With
continueOnError, multiple releases can fail or be skipped in one run;
reporting only the first error hid the skip errors (and other
failures), contradicting the feature's contract. Single-error
rendering is unchanged.
4. Gate tolerated errors on ReleaseErrorCodeFailure so that non-failure
release errors (e.g. helm-diff's "changes detected" exit code 2 can
never enable continuation or block dependents.
5. Report skipped-release messages with the dependency's plain release
name instead of its kubeContext/namespace-qualified needs id
(e.g. dependency database instead of default/default/database),
matching the documented message format.
6. Restructure the withBatches helpers into guard-clause style
(filterBlockedReleases, toleratesBatchErrors) and drop the test-only
logger nil-guards in favor of a nop logger in tests.
7. Add end-to-end coverage through App.Sync with the exectest fake helm:
independent releases continue after a tolerated failure, dependents
are skipped with an explicit error, the exit code stays non-zero, and
fail-fast remains the default without continueOnError. Also cover the
non-failure error code case at the withBatches level.
8. Use new(true) instead of a boolPtr helper (CI-enforced check-modernize)
and document the failure-handling interaction in docs/releases.md.
Signed-off-by: yxxhero <aiopsclub@163.com>
EOF
)
Signed-off-by: yxxhero <aiopsclub@163.com>
---------
Signed-off-by: Axel Delille <Axel.delille31@gmail.com>
Signed-off-by: yxxhero <aiopsclub@163.com>
Co-authored-by: yxxhero <aiopsclub@163.com>