feat: add Helm lifecycle reporting and integration coverage - #2849
feat: add Helm lifecycle reporting and integration coverage#2849Mikhail Shirkov (shirkevich) wants to merge 62 commits into
Conversation
|
Tip Atmos Pro
No affected stacks workflow was detected for this pull request. |
Dependency Review✅ No vulnerabilities or license issues found.Scanned FilesNone |
Resource Changes Found for
|
|
CodeRabbit (@coderabbitai) full review |
✅ Action performedFull review finished. |
📝 WalkthroughWalkthroughNative Helm lifecycle support now includes contextual errors, lifecycle reporting, reverse dependency deletion, aggregate CI summaries, affected-file detection, documentation, and expanded end-to-end examples. ChangesHelm lifecycle support
Estimated code review effort: 5 (Critical) | ~120 minutes Possibly related PRs
Sequence Diagram(s)sequenceDiagram
participant HelmBulkExecutor
participant HelmCollector
participant HelmProvider
participant HelmAggregateHook
HelmBulkExecutor->>HelmCollector: initialize bulk collection
HelmProvider->>HelmCollector: record component result
HelmBulkExecutor->>HelmCollector: build sorted HelmCIResultSet
HelmBulkExecutor->>HelmAggregateHook: emit aggregate plan or apply event
🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
There was a problem hiding this comment.
Actionable comments posted: 3
Caution
Some comments are outside the diff and can’t be posted inline due to platform limitations.
⚠️ Outside diff range comments (1)
pkg/component/helm/client.go (1)
190-199: 🩺 Stability & Availability | 🟠 Major | ⚡ Quick winDo not claim cancellable delete execution.
client.Run(spec.ReleaseName)does not receive acontext.Context, soctx.Err()after the call cannot stop an in-progress uninstall. Helm 4 only exposesRunWithContextforInstall/Upgrade;Uninstall.Runis the available API here.
pkg/component/helm/client.go#L190-L199: Document delete cancellation clearly only if it is supported; otherwise do not treatcontext.Canceledas propagated throughUninstall.Run.docs/fixes/2026-08-01-native-helm-release-lifecycle.md#L5-L9: Limit the cancellation claim to supported operations unless delete cancellation is implemented safely.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/component/helm/client.go` around lines 190 - 199, Remove the post-call ctx.Err() cancellation handling from the delete path around client.Run in pkg/component/helm/client.go, since Uninstall.Run is not context-aware; retain release-not-found handling and releaseOperationError propagation. Update docs/fixes/2026-08-01-native-helm-release-lifecycle.md to limit cancellation claims to operations that support context cancellation, without claiming cancellable delete execution.
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/fixes/2026-08-01-native-helm-release-lifecycle.md`:
- Line 3: Update the Date field in the release lifecycle document to use the
current release-note date, July 31, 2026, instead of the future date August 1,
2026.
In `@examples/helm/components/helm/demo/templates/job.yaml`:
- Line 1: Exclude the Helm templates from raw YAML validation, or configure
pre-commit to run check-yaml against manifests rendered by helm template
instead. Apply this to
examples/helm/components/helm/demo/templates/job.yaml#L1-L1,
deployment.yaml#L18-L18, extra-configmap.yaml#L1-L1,
hook-order-configmap.yaml#L1-L1, hook-order-job.yaml#L1-L1, and
failing-hook-job.yaml#L1-L1; each site requires exclusion from raw validation or
coverage through rendered-manifest validation.
In `@examples/helm/components/helm/demo/templates/ready-marker.yaml`:
- Around line 1-13: Exclude the Helm chart template directory containing
ready-marker.yaml from the repo-level pre-commit check-yaml hook, covering
sibling templates with leading Go-template directives as well. Preserve YAML
validation for non-template files and do not modify the rendered ConfigMap
template.
---
Outside diff comments:
In `@pkg/component/helm/client.go`:
- Around line 190-199: Remove the post-call ctx.Err() cancellation handling from
the delete path around client.Run in pkg/component/helm/client.go, since
Uninstall.Run is not context-aware; retain release-not-found handling and
releaseOperationError propagation. Update
docs/fixes/2026-08-01-native-helm-release-lifecycle.md to limit cancellation
claims to operations that support context cancellation, without claiming
cancellable delete execution.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 0ca7db25-a005-47d1-8154-f031dbf38c66
📒 Files selected for processing (27)
docs/fixes/2026-08-01-native-helm-release-lifecycle.mderrors/errors.goexamples/helm/README.mdexamples/helm/atmos.yamlexamples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yamlexamples/helm/components/helm/demo/templates/deployment.yamlexamples/helm/components/helm/demo/templates/extra-configmap.yamlexamples/helm/components/helm/demo/templates/failing-hook-job.yamlexamples/helm/components/helm/demo/templates/hook-order-configmap.yamlexamples/helm/components/helm/demo/templates/hook-order-job.yamlexamples/helm/components/helm/demo/templates/job.yamlexamples/helm/components/helm/demo/templates/ready-marker.yamlexamples/helm/components/helm/demo/values.yamlexamples/helm/stacks/deploy/dev.yamlpkg/ci/plugins/helm/plugin.gopkg/ci/plugins/helm/plugin_test.gopkg/ci/plugins/helm/templates/apply.mdpkg/ci/plugins/helm/templates/delete.mdpkg/component/helm/client.gopkg/component/helm/client_lifecycle_test.gopkg/component/helm/client_test.gowebsite/docs/ci/job-summaries.mdxwebsite/docs/cli/commands/helm/helm-apply.mdxwebsite/docs/cli/commands/helm/helm-delete.mdxwebsite/docs/cli/commands/helm/usage.mdxwebsite/docs/cli/configuration/components/helm.mdxwebsite/docs/stacks/components/helm.mdx
e395efd to
dc58419
Compare
|
CodeRabbit (@coderabbitai) full review |
✅ Action performedFull review finished. Your included review limit is currently reached under our Fair Usage Limits Policy. This review may still proceed through usage-based billing if eligible. Your next included review will be available in 33 minutes. |
dc58419 to
b980fe4
Compare
|
CodeRabbit (@coderabbitai) full review |
✅ Action performedFull review finished. |
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (2)
pkg/component/helm/client_test.go (1)
100-120: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low valueCover release operation error wrapping at each boundary.
Add behavior-focused tests for
installReleaseandupgradeReleaseerror paths that asserterrUtils.ErrHelmReleaseOperationand the underlying cause. Add expliciterrUtils.ErrHelmReleaseOperationcoverage for delete operations that fail, including delete not-found when that is not treated as success by the in-memory/stacked contract. Keep the existingapplyReleasecancellation coverage, or move the coverage focus to the relevant operation boundary.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/component/helm/client_test.go` around lines 100 - 120, Extend the tests around installRelease and upgradeRelease to verify operation errors wrap both errUtils.ErrHelmReleaseOperation and the original cause. Add deleteRelease failure tests, including the not-found case when the in-memory/stacked contract treats it as an error, while preserving existing applyRelease cancellation coverage or moving it to the appropriate operation boundary.Source: Coding guidelines
pkg/component/helm/client.go (1)
207-221: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse the repository error builder for this contextual error.
releaseOperationErrorpreserves the Helm error cause and marks the operation sentinel, soBuild(errUtils.ErrHelmReleaseOperation).WithCause(cause)matches the existing builder contract. UseWithContextfor the lifecycle fields, or attach them via the standard message before the cause.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/component/helm/client.go` around lines 207 - 221, Update releaseOperationError to use the repository error builder: construct the error with Build(errUtils.ErrHelmReleaseOperation), attach cause via WithCause(cause), and preserve the operation, release, namespace, wait strategy, timeout, and component-field context through WithContext or the builder’s standard message mechanism.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@examples/helm/atmos.yaml`:
- Around line 100-103: Update the lifecycle-DAG verification around the helm
apply command to assert ordering, not just that dag-dependent exists: first wait
for or verify the foundation's post-readiness marker, then verify the dependent
hook or Deployment is created. Use the existing marker and resource checks so
the test fails when the dependent runs before foundation readiness.
- Around line 55-57: Extend the lifecycle assertions in the dry-run apply,
rollback, and dry-run delete scenarios around the existing kubectl checks.
Verify Helm release metadata and enumerate the complete expected Kubernetes
resource set: dry-run apply and dry-run delete must leave the release and
resources unchanged, while rollback must leave only the intentionally retained
hook ConfigMap and no other rendered resources.
- Around line 77-79: Update the Job-wait scenario around the `atmos helm apply`
and subsequent `kubectl wait` commands so it deterministically verifies that
apply waited for completion: configure a fixed Job duration and assert the Job
is already complete immediately after `atmos helm apply` returns, rather than
allowing `kubectl wait` to complete it afterward.
- Around line 80-82: Update the validation command following “Disabling chart
hooks” to check both weighted hook resources, including the hook Job and its
side effects or expected deletion policy, rather than only the
demo-no-hooks-hook-order ConfigMap. Keep the command failing when either hook
executes while preserving the existing Helm apply flow.
- Around line 95-99: Update the failed-upgrade verification around the demo
deployment commands to capture the pre-upgrade workload state before invoking
demo-upgrade-fail, then compare the restored Deployment/demo state against that
captured state after rollback. Preserve the existing assertion that cleanup
removes ConfigMap/demo-upgrade-only.
- Around line 83-86: Replace the one-second rollout timeout assertion in the
demo-hook-only validation with a deterministic lifecycle/readiness marker
configured for this scenario. Update the hookOnly setup and corresponding
kubectl check so the test verifies that the marker is absent before readiness
completes, while preserving the later successful Deployment readiness assertion.
In `@pkg/ci/plugins/helm/templates/apply.md`:
- Around line 28-46: Keep Helm template control directives from being
interpreted as Markdown table rows. In pkg/ci/plugins/helm/templates/apply.md
lines 28-46, restructure the operation-specific conditionals around complete
valid table blocks or apply the repository’s template-lint handling while
preserving rendered output; in pkg/ci/plugins/helm/templates/delete.md line 23,
apply the same handling to the closing conditional action. Ensure markdownlint
passes without disabling rendered-output validation.
---
Nitpick comments:
In `@pkg/component/helm/client_test.go`:
- Around line 100-120: Extend the tests around installRelease and upgradeRelease
to verify operation errors wrap both errUtils.ErrHelmReleaseOperation and the
original cause. Add deleteRelease failure tests, including the not-found case
when the in-memory/stacked contract treats it as an error, while preserving
existing applyRelease cancellation coverage or moving it to the appropriate
operation boundary.
In `@pkg/component/helm/client.go`:
- Around line 207-221: Update releaseOperationError to use the repository error
builder: construct the error with Build(errUtils.ErrHelmReleaseOperation),
attach cause via WithCause(cause), and preserve the operation, release,
namespace, wait strategy, timeout, and component-field context through
WithContext or the builder’s standard message mechanism.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 6e6e80cb-6511-4986-a279-4c3f2c49c52a
📒 Files selected for processing (28)
.pre-commit-config.yamldocs/fixes/2026-07-31-native-helm-release-lifecycle.mderrors/errors.goexamples/helm/README.mdexamples/helm/atmos.yamlexamples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yamlexamples/helm/components/helm/demo/templates/deployment.yamlexamples/helm/components/helm/demo/templates/extra-configmap.yamlexamples/helm/components/helm/demo/templates/failing-hook-job.yamlexamples/helm/components/helm/demo/templates/hook-order-configmap.yamlexamples/helm/components/helm/demo/templates/hook-order-job.yamlexamples/helm/components/helm/demo/templates/job.yamlexamples/helm/components/helm/demo/templates/ready-marker.yamlexamples/helm/components/helm/demo/values.yamlexamples/helm/stacks/deploy/dev.yamlpkg/ci/plugins/helm/plugin.gopkg/ci/plugins/helm/plugin_test.gopkg/ci/plugins/helm/templates/apply.mdpkg/ci/plugins/helm/templates/delete.mdpkg/component/helm/client.gopkg/component/helm/client_lifecycle_test.gopkg/component/helm/client_test.gowebsite/docs/ci/job-summaries.mdxwebsite/docs/cli/commands/helm/helm-apply.mdxwebsite/docs/cli/commands/helm/helm-delete.mdxwebsite/docs/cli/commands/helm/usage.mdxwebsite/docs/cli/configuration/components/helm.mdxwebsite/docs/stacks/components/helm.mdx
b980fe4 to
baa7579
Compare
✅ Action performedFull review finished. |
There was a problem hiding this comment.
♻️ Duplicate comments (2)
website/docs/cli/configuration/components/helm.mdx (1)
57-62: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winDocument the nested
release.*lifecycle keys.The note currently presents
wait_strategy,timeout,on_failure, andmax_historyas configuration fields. The stack schema uses nested release keys such asrelease.wait.strategy,release.wait.jobs,release.history.max, and operation-specific keys such asrelease.install.on_failure. Flat names can cause users to configure values that Atmos ignores.Verify the exact field names against the lifecycle decoder before updating this note.
#!/bin/bash set -euo pipefail rg -n -C 4 \ 'wait_strategy|max_history|release\.wait|release\.history|release\.(install|upgrade)\.on_failure' \ pkg/component/helm website/docs/stacks/components/helm.mdx🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@website/docs/cli/configuration/components/helm.mdx` around lines 57 - 62, Update the release-policy note in the Helm documentation to use the exact nested lifecycle keys from the Helm lifecycle decoder, including release.wait.strategy, release.wait.jobs, release.history.max, and operation-specific release.install.on_failure or release.upgrade.on_failure fields. Remove or replace the flat wait_strategy, timeout, on_failure, and max_history names, and verify the final names against the decoder and stack documentation.pkg/ci/plugins/helm/templates/apply.md (1)
39-50: 🎯 Functional Correctness | 🟡 Minor | ⚡ Quick winKeep operation-specific rows inside a valid Markdown table.
When
operationisinstallorupgrade, the blank output around Lines 40-49 terminates the table that starts at Line 31. The rendered summary can showInstall CRDs,Cleanup on failure, andMaximum historyas standalone pipe text. Remove the blank output, or render a complete table for each operation.Proposed fix
{{ else }} | Field | Value | | --- | --- | | Operation | `{{ index . "operation" }}` | | Wait strategy | `{{ index (index . "wait") "strategy" }}` | | Timeout | `{{ index . "timeout" }}` | | Chart hooks enabled | `{{ index . "chart_hooks" }}` | | Wait for Jobs | `{{ index (index . "wait") "jobs" }}` | | On failure | `{{ index . "on_failure" }}` | {{ if eq (index . "operation") "install" }} +| Field | Value | +| --- | --- | | Install CRDs | `{{ index . "crds" }}` | - {{ end }} - {{ if eq (index . "operation") "upgrade" }} +| Field | Value | +| --- | --- | | Cleanup on failure | `{{ index . "cleanup_on_failure" }}` | | Maximum history | `{{ index (index . "history") "max" }}` | - {{ end }}🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@pkg/ci/plugins/helm/templates/apply.md` around lines 39 - 50, Update the operation-specific conditional blocks in the Helm apply template so their rows remain part of the table started before the `operation` checks. Remove the blank output introduced around the `install` and `upgrade` branches while preserving the existing `Install CRDs`, `Cleanup on failure`, and `Maximum history` rows.
🧹 Nitpick comments (1)
internal/exec/describe_affected_components_test.go (1)
615-730: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winUse one table-driven test for the values-file scenarios.
These tests repeat the same setup and assertion flow. Use named cases for relative list, scalar, absolute, and unrelated paths. Preserve the specific expected affected result in each case.
As per coding guidelines, “Use table-driven tests for testing multiple scenarios in Go.”
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/exec/describe_affected_components_test.go` around lines 615 - 730, Consolidate the four repeated tests into one table-driven test for processHelmComponentsIndexed, using named cases for relative-list, scalar, absolute, and unrelated values-file paths. Parameterize the values-file configuration and changed-file input, then preserve each case’s expected affected result and existing assertions, including the unrelated case remaining empty.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Duplicate comments:
In `@pkg/ci/plugins/helm/templates/apply.md`:
- Around line 39-50: Update the operation-specific conditional blocks in the
Helm apply template so their rows remain part of the table started before the
`operation` checks. Remove the blank output introduced around the `install` and
`upgrade` branches while preserving the existing `Install CRDs`, `Cleanup on
failure`, and `Maximum history` rows.
In `@website/docs/cli/configuration/components/helm.mdx`:
- Around line 57-62: Update the release-policy note in the Helm documentation to
use the exact nested lifecycle keys from the Helm lifecycle decoder, including
release.wait.strategy, release.wait.jobs, release.history.max, and
operation-specific release.install.on_failure or release.upgrade.on_failure
fields. Remove or replace the flat wait_strategy, timeout, on_failure, and
max_history names, and verify the final names against the decoder and stack
documentation.
---
Nitpick comments:
In `@internal/exec/describe_affected_components_test.go`:
- Around line 615-730: Consolidate the four repeated tests into one table-driven
test for processHelmComponentsIndexed, using named cases for relative-list,
scalar, absolute, and unrelated values-file paths. Parameterize the values-file
configuration and changed-file input, then preserve each case’s expected
affected result and existing assertions, including the unrelated case remaining
empty.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 0a41cf7d-94b2-43f6-9f4d-f5b7f06161ab
⛔ Files ignored due to path filters (1)
examples/helm/components/helm/demo/Chart.lockis excluded by!**/*.lock
📒 Files selected for processing (55)
.github/workflows/test.yml.pre-commit-config.yamldocs/fixes/2026-07-31-native-helm-release-lifecycle.mddocs/prd/native-helm-release-lifecycle.mderrors/errors.goexamples/helm/README.mdexamples/helm/atmos.yamlexamples/helm/components/helm/demo/.gitignoreexamples/helm/components/helm/demo/Chart.yamlexamples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yamlexamples/helm/components/helm/demo/templates/dependency-observed.yamlexamples/helm/components/helm/demo/templates/deployment.yamlexamples/helm/components/helm/demo/templates/extra-configmap.yamlexamples/helm/components/helm/demo/templates/failing-hook-job.yamlexamples/helm/components/helm/demo/templates/hook-order-configmap.yamlexamples/helm/components/helm/demo/templates/hook-order-job.yamlexamples/helm/components/helm/demo/templates/job.yamlexamples/helm/components/helm/demo/templates/tpl-configmap.yamlexamples/helm/components/helm/demo/values.yamlexamples/helm/components/helm/helm-test-library/Chart.yamlexamples/helm/components/helm/helm-test-library/templates/_render.tplexamples/helm/stacks/deploy/dev.yamlinternal/exec/describe_affected_changed_files_index.gointernal/exec/describe_affected_components.gointernal/exec/describe_affected_components_test.gointernal/exec/describe_affected_optimizations_test.gopkg/ci/plugins/helm/aggregate.gopkg/ci/plugins/helm/aggregate_test.gopkg/ci/plugins/helm/plugin.gopkg/ci/plugins/helm/plugin_test.gopkg/ci/plugins/helm/templates/apply.mdpkg/ci/plugins/helm/templates/delete.mdpkg/component/graph.gopkg/component/graph_test.gopkg/component/helm/aggregate_ci.gopkg/component/helm/aggregate_ci_test.gopkg/component/helm/client.gopkg/component/helm/client_lifecycle_test.gopkg/component/helm/client_test.gopkg/component/helm/executor.gopkg/component/helm/executor_bulk.gopkg/component/helm/executor_test.gopkg/component/helm/lifecycle.gopkg/component/helm/lifecycle_test.gopkg/component/helm/provision.gopkg/hooks/event.gopkg/schema/schema.gowebsite/docs/ci/job-summaries.mdxwebsite/docs/cli/commands/helm/helm-apply.mdxwebsite/docs/cli/commands/helm/helm-delete.mdxwebsite/docs/cli/commands/helm/helm-deploy.mdxwebsite/docs/cli/commands/helm/helm-plan.mdxwebsite/docs/cli/commands/helm/usage.mdxwebsite/docs/cli/configuration/components/helm.mdxwebsite/docs/stacks/components/helm.mdx
💤 Files with no reviewable changes (1)
- pkg/component/helm/provision.go
|
CodeRabbit (@coderabbitai) full review |
✅ Action performedFull review finished. |
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@pkg/ci/plugins/helm/templates/apply.md`:
- Around line 39-45: Update the conditional table markup surrounding the install
and upgrade branches in the Helm template so rendered output has complete,
consistently formatted table rows and passes markdownlint MD055 and MD056.
Preserve the existing operation-specific fields, and run the repository’s
Markdown lint command to verify the template.
🪄 Autofix
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: ea28b5ec-7e4b-4e47-b46c-b7baa03493c2
⛔ Files ignored due to path filters (1)
examples/helm/components/helm/demo/Chart.lockis excluded by!**/*.lock
📒 Files selected for processing (55)
.github/workflows/test.yml.pre-commit-config.yamldocs/fixes/2026-07-31-native-helm-release-lifecycle.mddocs/prd/native-helm-release-lifecycle.mderrors/errors.goexamples/helm/README.mdexamples/helm/atmos.yamlexamples/helm/components/helm/demo/.gitignoreexamples/helm/components/helm/demo/Chart.yamlexamples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yamlexamples/helm/components/helm/demo/templates/dependency-observed.yamlexamples/helm/components/helm/demo/templates/deployment.yamlexamples/helm/components/helm/demo/templates/extra-configmap.yamlexamples/helm/components/helm/demo/templates/failing-hook-job.yamlexamples/helm/components/helm/demo/templates/hook-order-configmap.yamlexamples/helm/components/helm/demo/templates/hook-order-job.yamlexamples/helm/components/helm/demo/templates/job.yamlexamples/helm/components/helm/demo/templates/tpl-configmap.yamlexamples/helm/components/helm/demo/values.yamlexamples/helm/components/helm/helm-test-library/Chart.yamlexamples/helm/components/helm/helm-test-library/templates/_render.tplexamples/helm/stacks/deploy/dev.yamlinternal/exec/describe_affected_changed_files_index.gointernal/exec/describe_affected_components.gointernal/exec/describe_affected_components_test.gointernal/exec/describe_affected_optimizations_test.gopkg/ci/plugins/helm/aggregate.gopkg/ci/plugins/helm/aggregate_test.gopkg/ci/plugins/helm/plugin.gopkg/ci/plugins/helm/plugin_test.gopkg/ci/plugins/helm/templates/apply.mdpkg/ci/plugins/helm/templates/delete.mdpkg/component/graph.gopkg/component/graph_test.gopkg/component/helm/aggregate_ci.gopkg/component/helm/aggregate_ci_test.gopkg/component/helm/client.gopkg/component/helm/client_lifecycle_test.gopkg/component/helm/client_test.gopkg/component/helm/executor.gopkg/component/helm/executor_bulk.gopkg/component/helm/executor_test.gopkg/component/helm/lifecycle.gopkg/component/helm/lifecycle_test.gopkg/component/helm/provision.gopkg/hooks/event.gopkg/schema/schema.gowebsite/docs/ci/job-summaries.mdxwebsite/docs/cli/commands/helm/helm-apply.mdxwebsite/docs/cli/commands/helm/helm-delete.mdxwebsite/docs/cli/commands/helm/helm-deploy.mdxwebsite/docs/cli/commands/helm/helm-plan.mdxwebsite/docs/cli/commands/helm/usage.mdxwebsite/docs/cli/configuration/components/helm.mdxwebsite/docs/stacks/components/helm.mdx
💤 Files with no reviewable changes (1)
- pkg/component/helm/provision.go
|
CodeRabbit (@coderabbitai) full review\n\nPlease review current head |
|
|
|
CodeRabbit (@coderabbitai) full review\n\nPlease perform the previously rate-limited full review of current head |
|
✅ Action performedFull review finished. |
There was a problem hiding this comment.
🧹 Nitpick comments (1)
internal/exec/describe_affected_components_test.go (1)
632-635: 📐 Maintainability & Code Quality | 🔵 Trivial | ⚡ Quick winCover a matching
[]stringvalues_filesentry.The only
[]stringcase uses an unrelated changed file. A regression that drops or misresolves the[]stringbranch can still pass. Add a matching[]string{valuesRef}row and retain the[]anyrow.As per coding guidelines, “Prefer behavior-focused, table-driven unit tests with mocks; avoid tautological, stub, always-skipped, or coverage-only tests and target at least 85% coverage.”
Proposed test case
}{ {name: "relative list", valuesFiles: []any{valuesRef}, changedFile: valuesFile, wantAffected: true}, + {name: "typed relative list", valuesFiles: []string{valuesRef}, changedFile: valuesFile, wantAffected: true}, {name: "scalar", valuesFiles: valuesRef, changedFile: valuesFile, wantAffected: true},🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@internal/exec/describe_affected_components_test.go` around lines 632 - 635, Extend the table-driven cases in the affected-components test to include a matching []string{valuesRef} valuesFiles entry with changedFile set to valuesFile and wantAffected true. Retain the existing matching []any{valuesRef} case and the unrelated []string case.Source: Coding guidelines
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Nitpick comments:
In `@internal/exec/describe_affected_components_test.go`:
- Around line 632-635: Extend the table-driven cases in the affected-components
test to include a matching []string{valuesRef} valuesFiles entry with
changedFile set to valuesFile and wantAffected true. Retain the existing
matching []any{valuesRef} case and the unrelated []string case.
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro Plus
Run ID: 1da0b3da-fbaf-4500-bfa1-8643f8da0c23
⛔ Files ignored due to path filters (1)
examples/helm/components/helm/demo/Chart.lockis excluded by!**/*.lock
📒 Files selected for processing (55)
.github/workflows/test.yml.pre-commit-config.yamldocs/fixes/2026-07-31-native-helm-release-lifecycle.mddocs/prd/native-helm-release-lifecycle.mderrors/errors.goexamples/helm/README.mdexamples/helm/atmos.yamlexamples/helm/components/helm/demo/.gitignoreexamples/helm/components/helm/demo/Chart.yamlexamples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yamlexamples/helm/components/helm/demo/templates/dependency-observed.yamlexamples/helm/components/helm/demo/templates/deployment.yamlexamples/helm/components/helm/demo/templates/extra-configmap.yamlexamples/helm/components/helm/demo/templates/failing-hook-job.yamlexamples/helm/components/helm/demo/templates/hook-order-configmap.yamlexamples/helm/components/helm/demo/templates/hook-order-job.yamlexamples/helm/components/helm/demo/templates/job.yamlexamples/helm/components/helm/demo/templates/tpl-configmap.yamlexamples/helm/components/helm/demo/values.yamlexamples/helm/components/helm/helm-test-library/Chart.yamlexamples/helm/components/helm/helm-test-library/templates/_render.tplexamples/helm/stacks/deploy/dev.yamlinternal/exec/describe_affected_changed_files_index.gointernal/exec/describe_affected_components.gointernal/exec/describe_affected_components_test.gointernal/exec/describe_affected_optimizations_test.gopkg/ci/plugins/helm/aggregate.gopkg/ci/plugins/helm/aggregate_test.gopkg/ci/plugins/helm/plugin.gopkg/ci/plugins/helm/plugin_test.gopkg/ci/plugins/helm/templates/apply.mdpkg/ci/plugins/helm/templates/delete.mdpkg/component/graph.gopkg/component/graph_test.gopkg/component/helm/aggregate_ci.gopkg/component/helm/aggregate_ci_test.gopkg/component/helm/client.gopkg/component/helm/client_lifecycle_test.gopkg/component/helm/client_test.gopkg/component/helm/executor.gopkg/component/helm/executor_bulk.gopkg/component/helm/executor_test.gopkg/component/helm/lifecycle.gopkg/component/helm/lifecycle_test.gopkg/component/helm/provision.gopkg/hooks/event.gopkg/schema/schema.gowebsite/docs/ci/job-summaries.mdxwebsite/docs/cli/commands/helm/helm-apply.mdxwebsite/docs/cli/commands/helm/helm-delete.mdxwebsite/docs/cli/commands/helm/helm-deploy.mdxwebsite/docs/cli/commands/helm/helm-plan.mdxwebsite/docs/cli/commands/helm/usage.mdxwebsite/docs/cli/configuration/components/helm.mdxwebsite/docs/stacks/components/helm.mdx
💤 Files with no reviewable changes (1)
- pkg/component/helm/provision.go
|
CodeRabbit (@coderabbitai) review\n\nPlease review current head |
|
✅ Action performedReview finished.
|
|
CodeRabbit (@coderabbitai) review\n\nPlease review current head |
|
✅ Action performedReview finished.
|
|
CodeRabbit (@coderabbitai) review Please review current head |
|
✅ Action performedReview finished.
|
|
CodeRabbit (@coderabbitai) review Please review current head |
|
✅ Action performedReview finished.
|
what
releasedata to CI job summaries.hookOnlytowatcherpromotion.values_filestargets in--affectedselection, including files outside the chart directory.tests/fixtures/scenarios/helm-lifecycle.This is 4 of 4 in the native Helm lifecycle stack and is based on #2848:
why
--affectedexecution must react to the files whose values are rendered, not only to changes in thevalues_fileslist itself.validation
components/helmand an unrelated-file negative control.hookOnlytowatcherpromotion is reported before the action at the default log level with its field path and machine-readable code; Debug output distinguishes derived policy from a directly configuredwatcher.--dependency-update; six objects include both weighted hooks and the preserved inline Helm template expression, and its full k3s workflow passes end to end.describe componentconfirms deep-merged stack and component release policy.git diff --checkpass.references
docs/prd/native-helm-release-lifecycle.mdSummary by CodeRabbit
New Features
Bug Fixes
Documentation