Skip to content

feat: add Helm lifecycle reporting and integration coverage - #2849

Open
Mikhail Shirkov (shirkevich) wants to merge 84 commits into
codex/helm-lifecycle-contextfrom
codex/helm-lifecycle-k3s
Open

feat: add Helm lifecycle reporting and integration coverage#2849
Mikhail Shirkov (shirkevich) wants to merge 84 commits into
codex/helm-lifecycle-contextfrom
codex/helm-lifecycle-k3s

Conversation

@shirkevich

@shirkevich Mikhail Shirkov (shirkevich) commented Jul 31, 2026

Copy link
Copy Markdown
Collaborator

what

  • Add actionable native Helm operation errors and canonical release data to CI job summaries.
  • Report the selected action and effective wait strategy before Helm runs, including recovery-driven hookOnly to watcher promotion.
  • Execute bulk delete in reverse dependency order so dependents are removed before their dependencies.
  • Track resolved native Helm values_files targets in --affected selection, including files outside the chart directory.
  • Document the approved nested release hierarchy, operation-specific flags, external delivery behavior, migration defaults, and dependency completion semantics.
  • Keep the public Helm example as a small happy path and move deterministic lifecycle, DAG, and failure fixtures to tests/fixtures/scenarios/helm-lifecycle.
  • Add release-history regression coverage for bounded and explicitly unlimited retention.

This is 4 of 4 in the native Helm lifecycle stack and is based on #2848:

  1. docs: define native Helm release lifecycle #2846 — approved PRD and public contract
  2. feat: implement native Helm release lifecycle controls #2847 — release model, schema, CLI, and Helm actions
  3. feat: propagate component execution context #2848 — execution context and cancellation propagation
  4. feat: add Helm lifecycle reporting and integration coverage #2849 — operational reporting, documentation, and integration coverage

why

  • Effective lifecycle values must be visible using the same canonical names as stack configuration.
  • Timeout failures must identify the selected operation, release, namespace, wait strategy, effective duration, and the configuration source that supplied it.
  • Cluster integration coverage proves Helm behavior that in-memory action tests cannot establish, especially hooks, recovery, cleanup, readiness, and dependency gating.
  • Bulk --affected execution must react to the files whose values are rendered, not only to changes in the values_files list itself.
  • Teardown must preserve dependency availability until every consuming release has been removed.

validation

  • 660 affected Go tests pass across Helm, Helm CI summaries, CLI, component dispatch, and schemas.
  • Focused post-rebase validation passes 8 masking/CLI tests and 445 Helm execution, context, and cancellation tests.
  • 10 focused native Helm affected tests and 33 changed-file index tests pass, including an aliased component whose values file is outside components/helm and an unrelated-file negative control.
  • 393 complete native Helm and component-graph tests pass after adding effective-policy reporting and reverse-delete regressions.
  • A live ten-release stack was fully deleted and rebuilt from scratch on Helm 4.2.3. Normalized release state, 2,513 rendered manifest lines, Deployments, Services, Ingresses, ServiceAccounts, and 191 environment keys matched the original; nine releases outside the stack were untouched.
  • A forced tier-zero upgrade failure returned non-zero, preserved the running workload, blocked seven direct and two transitive dependents without revision changes, retained both the original timeout and rollback causes, and recovered with a plain bulk apply.
  • Apply dry-run left revisions unchanged. Affected detection passed across five change locations, with the expected transitive closure when dependents were included.
  • Live verification confirms recovery-driven hookOnly to watcher promotion 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 configured watcher.
  • Live bulk-delete dry-run is the strict reverse of apply order, and pairwise graph checks confirm every direct and transitive dependent precedes each dependency. Both verification dry-runs left all 19 releases deployed and every workload healthy.
  • The restored public example passes validate, template, emulator startup, diff, apply, resource checks, delete, and teardown using the current branch binary.\n- The isolated lifecycle scenario renders with --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 component confirms deep-merged stack and component release policy.
  • MDX Prettier 3.6.2 and git diff --check pass.

references

Summary by CodeRabbit

  • New Features

    • Added native Helm lifecycle controls, progress reporting, rollback, cleanup, hooks, CRD installation, and release history management.
    • Added lifecycle details and deterministic aggregate summaries for bulk Helm operations.
    • Added raw secret retrieval, enhanced !secret options, global-scope secret management, and improved secret masking.
    • Added dependency-ordered deletion and improved changed-values-file detection.
  • Bug Fixes

    • Improved Helm operation errors with actionable context.
    • Improved secret handling across supported storage providers and CI reports.
  • Documentation

    • Expanded Helm lifecycle, aggregate reporting, secrets, and command usage documentation.

@atmos-pro

atmos-pro Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Tip

Atmos Pro  

No affected stacks workflow was detected for this pull request.
If this is expected, no action is needed.
Learn More. Ask AI.

@github-actions github-actions Bot added the size/m Medium size PR label Jul 31, 2026
@mergify mergify Bot added the stacked Stacked label Jul 31, 2026
@github-actions

github-actions Bot commented Jul 31, 2026

Copy link
Copy Markdown

Dependency Review

✅ No vulnerabilities or license issues found.

Scanned Files

  • go.mod

@shirkevich Mikhail Shirkov (shirkevich) changed the title codex/helm lifecycle k3s feat: add Helm lifecycle reporting and integration coverage Jul 31, 2026
@shirkevich Mikhail Shirkov (shirkevich) added the patch A minor, backward compatible change label Jul 31, 2026
@github-actions

Copy link
Copy Markdown

Resource Changes Found for bucket in test

Atmos CI

create

Plan: 4 to add, 0 to change, 0 to destroy.
To reproduce this locally, run:

atmos terraform plan bucket -s test

Create

+ aws_s3_bucket.checkov_target
+ aws_s3_bucket.this
+ aws_s3_bucket.trivy_target
+ aws_s3_bucket_public_access_block.trivy_target
Terraform Plan Summary
  # aws_s3_bucket.checkov_target will be created
  + resource "aws_s3_bucket" "checkov_target" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "atmos-native-ci-e2e-checkov-test"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

  # aws_s3_bucket.this will be created
  + resource "aws_s3_bucket" "this" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "atmos-native-ci-e2e-test"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags                        = {
          + "AtmosFixture" = "native-ci-e2e"
          + "Stage"        = "test"
        }
      + tags_all                    = {
          + "AtmosFixture" = "native-ci-e2e"
          + "Stage"        = "test"
        }
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

  # aws_s3_bucket.trivy_target will be created
  + resource "aws_s3_bucket" "trivy_target" {
      + acceleration_status         = (known after apply)
      + acl                         = (known after apply)
      + arn                         = (known after apply)
      + bucket                      = "atmos-native-ci-e2e-trivy-test"
      + bucket_domain_name          = (known after apply)
      + bucket_prefix               = (known after apply)
      + bucket_regional_domain_name = (known after apply)
      + force_destroy               = false
      + hosted_zone_id              = (known after apply)
      + id                          = (known after apply)
      + object_lock_enabled         = (known after apply)
      + policy                      = (known after apply)
      + region                      = (known after apply)
      + request_payer               = (known after apply)
      + tags_all                    = (known after apply)
      + website_domain              = (known after apply)
      + website_endpoint            = (known after apply)

      + cors_rule (known after apply)

      + grant (known after apply)

      + lifecycle_rule (known after apply)

      + logging (known after apply)

      + object_lock_configuration (known after apply)

      + replication_configuration (known after apply)

      + server_side_encryption_configuration (known after apply)

      + versioning (known after apply)

      + website (known after apply)
    }

  # aws_s3_bucket_public_access_block.trivy_target will be created
  + resource "aws_s3_bucket_public_access_block" "trivy_target" {
      + block_public_acls       = true
      + block_public_policy     = true
      + bucket                  = (known after apply)
      + id                      = (known after apply)
      + ignore_public_acls      = true
      + restrict_public_buckets = true
    }

Plan: 4 to add, 0 to change, 0 to destroy.

Changes to Outputs:
  + bucket_name = "atmos-native-ci-e2e-test"

@shirkevich

Copy link
Copy Markdown
Collaborator Author

CodeRabbit (@coderabbitai) full review

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai

coderabbitai Bot commented Jul 31, 2026

Copy link
Copy Markdown
Contributor

Review Change Stack

Note

Reviews paused

It looks like this branch is under active development. To avoid overwhelming you with review comments due to an influx of new commits, CodeRabbit has automatically paused this review. You can configure this behavior by changing the reviews.auto_review.auto_pause_after_reviewed_commits setting.

Use the following commands to manage reviews:

  • @coderabbitai resume to resume automatic reviews.
  • @coderabbitai review to trigger a single review.

Use the checkboxes below for quick actions:

  • ▶️ Resume reviews
  • 🔍 Trigger review

No actionable comments were generated in the recent review. 🎉

ℹ️ Recent review info
⚙️ Run configuration

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Team

Run ID: 69ea3e6f-cf54-4c7c-9870-07b20498b8d1

📥 Commits

Reviewing files that changed from the base of the PR and between e011361 and 8eb7655.

⛔ Files ignored due to path filters (2)
  • go.sum is excluded by !**/*.sum
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/Chart.lock is excluded by !**/*.lock
📒 Files selected for processing (118)
  • .github/workflows/test.yml
  • NOTICE
  • cmd/secret/enumerate.go
  • cmd/secret/enumerate_coverage_test.go
  • cmd/secret/enumerate_test.go
  • cmd/secret/set.go
  • cmd/secret/set_test.go
  • cmd/secret/shared.go
  • docs/fixes/2026-07-31-native-helm-release-lifecycle.md
  • docs/prd/native-helm-release-lifecycle.md
  • errors/errors.go
  • examples/helm/atmos.yaml
  • examples/helm/stacks/deploy/dev.yaml
  • go.mod
  • internal/exec/describe_affected_changed_files_index.go
  • internal/exec/describe_affected_components.go
  • internal/exec/describe_affected_components_test.go
  • internal/exec/describe_affected_optimizations_test.go
  • internal/exec/describe_stacks_component_processor_test.go
  • pkg/ci/internal/provider/masking.go
  • pkg/ci/internal/provider/output.go
  • pkg/ci/internal/provider/output_test.go
  • pkg/ci/plugins/helm/aggregate.go
  • pkg/ci/plugins/helm/aggregate_test.go
  • pkg/ci/plugins/helm/plugin.go
  • pkg/ci/plugins/helm/plugin_test.go
  • pkg/ci/plugins/helm/templates/apply.md
  • pkg/ci/plugins/helm/templates/delete.md
  • pkg/ci/providers/generic/check.go
  • pkg/ci/providers/generic/check_test.go
  • pkg/ci/providers/generic/provider.go
  • pkg/ci/providers/generic/provider_test.go
  • pkg/ci/providers/github/checks.go
  • pkg/ci/providers/github/checks_test.go
  • pkg/ci/providers/github/comments.go
  • pkg/ci/providers/github/comments_test.go
  • pkg/component/graph.go
  • pkg/component/graph_test.go
  • pkg/component/helm/aggregate_ci.go
  • pkg/component/helm/aggregate_ci_test.go
  • pkg/component/helm/chart.go
  • pkg/component/helm/client.go
  • pkg/component/helm/client_lifecycle_test.go
  • pkg/component/helm/client_test.go
  • pkg/component/helm/executor.go
  • pkg/component/helm/executor_bulk.go
  • pkg/component/helm/executor_test.go
  • pkg/component/helm/lifecycle.go
  • pkg/component/helm/lifecycle_test.go
  • pkg/component/helm/progress.go
  • pkg/component/helm/progress_test.go
  • pkg/component/helm/provision.go
  • pkg/component/helm/provision_test.go
  • pkg/component/helm/secret_values_integration_test.go
  • pkg/function/parser/parser.go
  • pkg/function/parser/parser_test.go
  • pkg/function/secret.go
  • pkg/hooks/event.go
  • pkg/io/global.go
  • pkg/io/masker.go
  • pkg/io/masker_test.go
  • pkg/io/register_secret_value_test.go
  • pkg/schema/schema.go
  • pkg/secrets/providers/provider.go
  • pkg/secrets/providers/store.go
  • pkg/secrets/providers/store_test.go
  • pkg/secrets/resolver.go
  • pkg/secrets/resolver_test.go
  • pkg/secrets/scope_test.go
  • pkg/secrets/types.go
  • pkg/store/providers/aws_secrets_manager_store.go
  • pkg/store/providers/aws_secrets_manager_store_endpoint_test.go
  • pkg/store/providers/aws_secrets_manager_store_test.go
  • pkg/store/providers/aws_ssm_param_store.go
  • pkg/store/providers/aws_ssm_param_store_test.go
  • pkg/store/providers/azure_keyvault_store.go
  • pkg/store/providers/azure_keyvault_store_test.go
  • pkg/store/providers/github_actions_store.go
  • pkg/store/providers/github_actions_store_test.go
  • pkg/store/providers/google_secret_manager_store.go
  • pkg/store/providers/google_secret_manager_store_test.go
  • pkg/store/providers/keychain_store.go
  • pkg/store/providers/keychain_store_test.go
  • pkg/store/store.go
  • tests/fixtures/scenarios/helm-lifecycle/.gitignore
  • tests/fixtures/scenarios/helm-lifecycle/README.md
  • tests/fixtures/scenarios/helm-lifecycle/atmos.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/.gitignore
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/Chart.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/crds/lifecycle.atmos.test_widgets.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/dependency-observed.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/deployment.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/extra-configmap.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/failing-hook-job.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/hook-order-configmap.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/hook-order-job.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/job.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/service.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/tpl-configmap.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/values.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/helm-test-library/Chart.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/helm-test-library/templates/_render.tpl
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/ingress-nginx/.gitkeep
  • tests/fixtures/scenarios/helm-lifecycle/stacks/deploy/dev.yaml
  • tests/fixtures/scenarios/helm-secret-values/atmos.yaml
  • tests/fixtures/scenarios/helm-secret-values/components/helm/secret-values/Chart.yaml
  • tests/fixtures/scenarios/helm-secret-values/components/helm/secret-values/templates/deployment.yaml
  • tests/fixtures/scenarios/helm-secret-values/stacks/deploy/dev.yaml
  • website/docs/ci/job-summaries.mdx
  • website/docs/cli/commands/helm/helm-apply.mdx
  • website/docs/cli/commands/helm/helm-delete.mdx
  • website/docs/cli/commands/helm/helm-deploy.mdx
  • website/docs/cli/commands/helm/helm-plan.mdx
  • website/docs/cli/commands/helm/usage.mdx
  • website/docs/cli/commands/secret/set.mdx
  • website/docs/cli/configuration/components/helm.mdx
  • website/docs/functions/yaml/secret.mdx
  • website/docs/stacks/components/helm.mdx
💤 Files with no reviewable changes (2)
  • examples/helm/atmos.yaml
  • examples/helm/stacks/deploy/dev.yaml
🚧 Files skipped from review as they are similar to previous changes (90)
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/templates/service.yaml
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/helm-test-library/templates/_render.tpl
  • pkg/function/secret.go
  • go.mod
  • internal/exec/describe_affected_components_test.go
  • pkg/component/helm/executor_bulk.go
  • website/docs/cli/configuration/components/helm.mdx
  • pkg/component/helm/provision.go
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/helm-test-library/Chart.yaml
  • website/docs/cli/commands/helm/helm-deploy.mdx
  • pkg/component/helm/executor.go
  • tests/fixtures/scenarios/helm-secret-values/components/helm/secret-values/templates/deployment.yaml
  • pkg/function/parser/parser.go
  • pkg/store/providers/github_actions_store_test.go
  • cmd/secret/shared.go
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/Chart.yaml
  • NOTICE
  • pkg/ci/providers/generic/provider.go
  • docs/fixes/2026-07-31-native-helm-release-lifecycle.md
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/.gitignore
  • tests/fixtures/scenarios/helm-secret-values/components/helm/secret-values/Chart.yaml
  • pkg/secrets/providers/store_test.go
  • errors/errors.go
  • pkg/hooks/event.go
  • tests/fixtures/scenarios/helm-lifecycle/README.md
  • pkg/store/providers/github_actions_store.go
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/values.yaml
  • pkg/ci/providers/github/comments.go
  • pkg/store/providers/aws_ssm_param_store_test.go
  • pkg/component/graph.go
  • internal/exec/describe_affected_changed_files_index.go
  • pkg/io/register_secret_value_test.go
  • pkg/ci/providers/github/checks.go
  • pkg/store/providers/keychain_store.go
  • cmd/secret/enumerate_test.go
  • pkg/component/helm/provision_test.go
  • pkg/store/providers/aws_secrets_manager_store_endpoint_test.go
  • tests/fixtures/scenarios/helm-secret-values/atmos.yaml
  • pkg/store/providers/aws_ssm_param_store.go
  • pkg/secrets/providers/provider.go
  • pkg/secrets/scope_test.go
  • pkg/store/providers/google_secret_manager_store_test.go
  • pkg/secrets/resolver_test.go
  • pkg/ci/providers/generic/check.go
  • pkg/secrets/providers/store.go
  • pkg/component/helm/lifecycle.go
  • pkg/schema/schema.go
  • tests/fixtures/scenarios/helm-lifecycle/components/helm/demo/crds/lifecycle.atmos.test_widgets.yaml
  • website/docs/cli/commands/helm/usage.mdx
  • pkg/component/helm/progress.go
  • pkg/store/providers/google_secret_manager_store.go
  • website/docs/cli/commands/helm/helm-apply.mdx
  • pkg/store/providers/aws_secrets_manager_store_test.go
  • website/docs/functions/yaml/secret.mdx
  • pkg/component/helm/aggregate_ci.go
  • pkg/function/parser/parser_test.go
  • pkg/secrets/types.go
  • pkg/ci/internal/provider/output.go
  • pkg/store/providers/keychain_store_test.go
  • website/docs/cli/commands/helm/helm-plan.mdx
  • website/docs/cli/commands/helm/helm-delete.mdx
  • pkg/component/graph_test.go
  • pkg/store/providers/aws_secrets_manager_store.go
  • pkg/ci/plugins/helm/aggregate.go
  • pkg/component/helm/chart.go
  • pkg/component/helm/client_test.go
  • internal/exec/describe_affected_optimizations_test.go
  • pkg/component/helm/progress_test.go
  • pkg/secrets/resolver.go
  • pkg/ci/internal/provider/masking.go
  • cmd/secret/set_test.go
  • pkg/component/helm/lifecycle_test.go
  • website/docs/stacks/components/helm.mdx
  • pkg/ci/plugins/helm/aggregate_test.go
  • pkg/io/global.go
  • cmd/secret/enumerate_coverage_test.go
  • cmd/secret/enumerate.go
  • website/docs/cli/commands/secret/set.mdx
  • .github/workflows/test.yml
  • internal/exec/describe_stacks_component_processor_test.go
  • tests/fixtures/scenarios/helm-secret-values/stacks/deploy/dev.yaml
  • pkg/store/store.go
  • cmd/secret/set.go
  • internal/exec/describe_affected_components.go
  • pkg/ci/plugins/helm/plugin.go
  • pkg/component/helm/executor_test.go
  • pkg/store/providers/azure_keyvault_store_test.go
  • pkg/component/helm/aggregate_ci_test.go
  • pkg/ci/plugins/helm/plugin_test.go
  • pkg/component/helm/client.go

Included review availability: Your plan provides up to 4 included reviews per hour; 3 remain after this review.


📝 Walkthrough

Walkthrough

This change adds native Helm lifecycle execution, aggregate CI summaries, raw secret retrieval, published-content masking, reverse dependency deletion, affected-file detection, integration fixtures, and related documentation.

Changes

Helm lifecycle, secrets, and CI reporting

Layer / File(s) Summary
Helm lifecycle, aggregate reporting, and execution flow
pkg/component/helm/*, pkg/component/graph.go, pkg/ci/plugins/helm/*, pkg/schema/schema.go, pkg/hooks/event.go
Helm lifecycle resolution, progress reporting, contextual errors, reverse deletion ordering, aggregate CI collection, and lifecycle-aware reports were added.
Raw secret retrieval and scope handling
pkg/function/parser/*, pkg/secrets/*, pkg/store/*, cmd/secret/*
The !secret function supports raw payloads. Providers expose raw retrieval. Global secrets can be set without a component when declarations are consistent.
Secret masking and affected-file detection
pkg/io/*, pkg/ci/internal/provider/*, pkg/ci/providers/*, internal/exec/*
Published content masks structured and multiline secrets. Helm values-file changes mark affected components.
Fixtures, workflow, examples, and documentation
tests/fixtures/*, website/docs/*, docs/*, .github/workflows/test.yml, examples/helm/*, go.mod, NOTICE
Fixtures, workflow coverage, examples, dependency metadata, and documentation were added or updated.

Estimated code review effort: 5 (Critical) | ~120 minutes

Merge Risk: ⚪ Minimal · up to 8eb76

No current merge-blocking behavior risk remains.

Suggested labels: minor

🚥 Pre-merge checks | ✅ 4 | ❌ 1

❌ Failed checks (1 warning)

Check name Status Explanation Resolution
Docstring Coverage ⚠️ Warning Docstring coverage is 22.10% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 181 functions across 50 files. (65 skippe… Write docstrings for the functions missing them to satisfy the coverage threshold.
✅ Passed checks (4 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed The title clearly identifies Helm lifecycle reporting and integration coverage, which are central changes in the pull request.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
Full details: Docstring Coverage

Explanation

Docstring coverage is 22.10% which is insufficient. The required threshold is 80.00%. Docstring coverage is scoped to functions touched by this diff. Analyzed 181 functions across 50 files. (65 skipped: 40 unsupported, 25 over the file limit.)

  • Fix all pre-merge checks with AI
✨ Finishing Touches 💡 2
📝 Generate docstrings 💡
  • Create stacked PR
  • Commit on current branch
🛠️ Fix failing CI checks 💡
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch codex/helm-lifecycle-k3s

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.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

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 win

Do not claim cancellable delete execution.

client.Run(spec.ReleaseName) does not receive a context.Context, so ctx.Err() after the call cannot stop an in-progress uninstall. Helm 4 only exposes RunWithContext for Install/Upgrade; Uninstall.Run is the available API here.

  • pkg/component/helm/client.go#L190-L199: Document delete cancellation clearly only if it is supported; otherwise do not treat context.Canceled as propagated through Uninstall.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

📥 Commits

Reviewing files that changed from the base of the PR and between b71f180 and e395efd.

📒 Files selected for processing (27)
  • docs/fixes/2026-08-01-native-helm-release-lifecycle.md
  • errors/errors.go
  • examples/helm/README.md
  • examples/helm/atmos.yaml
  • examples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yaml
  • examples/helm/components/helm/demo/templates/deployment.yaml
  • examples/helm/components/helm/demo/templates/extra-configmap.yaml
  • examples/helm/components/helm/demo/templates/failing-hook-job.yaml
  • examples/helm/components/helm/demo/templates/hook-order-configmap.yaml
  • examples/helm/components/helm/demo/templates/hook-order-job.yaml
  • examples/helm/components/helm/demo/templates/job.yaml
  • examples/helm/components/helm/demo/templates/ready-marker.yaml
  • examples/helm/components/helm/demo/values.yaml
  • examples/helm/stacks/deploy/dev.yaml
  • pkg/ci/plugins/helm/plugin.go
  • pkg/ci/plugins/helm/plugin_test.go
  • pkg/ci/plugins/helm/templates/apply.md
  • pkg/ci/plugins/helm/templates/delete.md
  • pkg/component/helm/client.go
  • pkg/component/helm/client_lifecycle_test.go
  • pkg/component/helm/client_test.go
  • website/docs/ci/job-summaries.mdx
  • website/docs/cli/commands/helm/helm-apply.mdx
  • website/docs/cli/commands/helm/helm-delete.mdx
  • website/docs/cli/commands/helm/usage.mdx
  • website/docs/cli/configuration/components/helm.mdx
  • website/docs/stacks/components/helm.mdx

Comment thread docs/fixes/2026-08-01-native-helm-release-lifecycle.md Outdated
Comment thread examples/helm/components/helm/demo/templates/ready-marker.yaml Outdated
@shirkevich

Copy link
Copy Markdown
Collaborator Author

CodeRabbit (@coderabbitai) full review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full 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.

coderabbitai[bot]
coderabbitai Bot previously approved these changes Aug 1, 2026
@shirkevich

Copy link
Copy Markdown
Collaborator Author

CodeRabbit (@coderabbitai) full review

@coderabbitai

coderabbitai Bot commented Aug 1, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Full review finished.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 7

🧹 Nitpick comments (2)
pkg/component/helm/client_test.go (1)

100-120: 📐 Maintainability & Code Quality | 🔵 Trivial | 💤 Low value

Cover release operation error wrapping at each boundary.

Add behavior-focused tests for installRelease and upgradeRelease error paths that assert errUtils.ErrHelmReleaseOperation and the underlying cause. Add explicit errUtils.ErrHelmReleaseOperation coverage for delete operations that fail, including delete not-found when that is not treated as success by the in-memory/stacked contract. Keep the existing applyRelease cancellation 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 win

Use the repository error builder for this contextual error.

releaseOperationError preserves the Helm error cause and marks the operation sentinel, so Build(errUtils.ErrHelmReleaseOperation).WithCause(cause) matches the existing builder contract. Use WithContext for 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

📥 Commits

Reviewing files that changed from the base of the PR and between 2d1f2df and b980fe4.

📒 Files selected for processing (28)
  • .pre-commit-config.yaml
  • docs/fixes/2026-07-31-native-helm-release-lifecycle.md
  • errors/errors.go
  • examples/helm/README.md
  • examples/helm/atmos.yaml
  • examples/helm/components/helm/demo/crds/lifecycle.atmos.test_widgets.yaml
  • examples/helm/components/helm/demo/templates/deployment.yaml
  • examples/helm/components/helm/demo/templates/extra-configmap.yaml
  • examples/helm/components/helm/demo/templates/failing-hook-job.yaml
  • examples/helm/components/helm/demo/templates/hook-order-configmap.yaml
  • examples/helm/components/helm/demo/templates/hook-order-job.yaml
  • examples/helm/components/helm/demo/templates/job.yaml
  • examples/helm/components/helm/demo/templates/ready-marker.yaml
  • examples/helm/components/helm/demo/values.yaml
  • examples/helm/stacks/deploy/dev.yaml
  • pkg/ci/plugins/helm/plugin.go
  • pkg/ci/plugins/helm/plugin_test.go
  • pkg/ci/plugins/helm/templates/apply.md
  • pkg/ci/plugins/helm/templates/delete.md
  • pkg/component/helm/client.go
  • pkg/component/helm/client_lifecycle_test.go
  • pkg/component/helm/client_test.go
  • website/docs/ci/job-summaries.mdx
  • website/docs/cli/commands/helm/helm-apply.mdx
  • website/docs/cli/commands/helm/helm-delete.mdx
  • website/docs/cli/commands/helm/usage.mdx
  • website/docs/cli/configuration/components/helm.mdx
  • website/docs/stacks/components/helm.mdx

Comment thread examples/helm/atmos.yaml Outdated
Comment thread examples/helm/atmos.yaml Outdated
Comment thread examples/helm/atmos.yaml Outdated
Comment thread examples/helm/atmos.yaml Outdated
Comment thread examples/helm/atmos.yaml Outdated
Comment thread pkg/ci/plugins/helm/templates/apply.md Outdated
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 240 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1226 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 240 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1226 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 232 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1207 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

The helm-lifecycle scenario installs the pinned public ingress-nginx chart
(oss-ingress), whose chart index lives at kubernetes.github.io and whose
workload images are served from registry.k8s.io (redirecting to Google
Artifact Registry). harden-runner's egress block is enforced on Linux, so
`atmos helm template oss-ingress` failed within ~26s fetching the chart
index, and the later host `docker pull registry.k8s.io/...` step would fail
next. macOS is unaffected (harden-runner cannot enforce egress there).

Add the three endpoints to the k3s job allow-list so the Linux leg can fetch
the chart and its images:

- kubernetes.github.io:443   ingress-nginx chart index
- registry.k8s.io:443        controller / kube-webhook-certgen manifests
- *.pkg.dev:443              blob/manifest redirect target

Verified locally: the full `atmos test` lifecycle (install, upgrade,
rollback, cleanup, hooks, CRDs, DAG ordering, timeout, dry-run, masking,
real ingress-nginx chart) passes end to end against the Kubernetes emulator.
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 232 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1207 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

The prior egress fix let the Linux leg fetch the ingress-nginx chart and start
k3s, but the `docker pull registry.k8s.io/ingress-nginx/...` step then failed:

  error pulling image configuration: ... lookup cdn.registry.k8s.io ...
  operation not permitted

registry.k8s.io serves manifests but redirects blob downloads to a CDN. On the
Azure-hosted GitHub runners that host front is cdn.registry.k8s.io (the *.pkg.dev
target only appears from GCP-adjacent networks), and harden-runner blocked its
DNS lookup. Allow cdn.registry.k8s.io so the controller and kube-webhook-certgen
image blobs can be pulled; keep *.pkg.dev for registry.k8s.io's other redirect
targets.
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 232 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1207 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

The helm-lifecycle fixture's install/upgrade operations use Helm 4's
status-watcher wait strategy. On the macos-15-intel Colima runner k3s is
doubly nested (k3s -> Docker -> Colima VM), where the watcher's kube-apiserver
watch is unreliable and every watcher-waited release burns its full timeout,
so the job runs 30+ minutes and exhausts its attempt budget.

The identical fixture passes in ~3m45s on the Linux runner and in ~6m on local
macOS Docker Desktop, so this is a Colima nested-k3s limitation, not a
lifecycle regression. Exclude the macOS/helm-lifecycle matrix combination; the
demo-helmfile and helm fixtures continue to cover the macOS k3s path, and
watcher-based lifecycle behavior remains fully covered on Linux.
@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 232 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1207 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

@github-actions

github-actions Bot commented Sep 5, 2026

Copy link
Copy Markdown

Warning

SHA Pin Verification Passed — with documented exceptions

All 232 third-party action reference(s) are covered, but 2 rely on a documented allowlist entry in allowlist.json and could not be automatically drift-checked. This does not fail CI, but should be reviewed.

Action Location Status Details
aquasecurity/trivy-action@v0.36.0 build.yml:133 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.
aquasecurity/trivy-action@v0.36.0 test.yml:1207 ⚠️ Allowlisted (documented) The aquasecurity GitHub organization has enabled an IP allow list that blocks API access (git ref/tag lookups) from GitHub-hosted Actions runner IPs, for any caller, on any of their repos, including public ones — this is not specific to our token or workflow. Verified independently: the exact same 403 is reported against the sibling aquasecurity/tfsec-action, and trivy-cache-action's issue tracker explicitly confirms 'aquasecurity GitHub org now has IP allow list enabled, blocking API access'. Manually confirmed our pinned SHA is correct (dereferenced the v0.36.0 annotated tag directly against the GitHub API from a non-Actions IP; it matches) — this entry only silences the automated drift check, which the API access restriction makes impossible to run in CI, not the underlying security property.

See the action run for full details.

@aknysh

Copy link
Copy Markdown
Member

CodeRabbit (@coderabbitai) review

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor
✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai

coderabbitai Bot commented Sep 6, 2026

Copy link
Copy Markdown
Contributor

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

needs-cloudposse Needs Cloud Posse assistance patch A minor, backward compatible change size/xl Extra large size PR

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants