wip: E2E suite for the secret rotation config - #124
Conversation
Extend the operator to read driverConfig.secretsStore from ClusterCSIDriver and propagate it to the operand. Clusters with no driverConfig.secretsStore configured see no change in behavior (defaults match the previously hardcoded values). Signed-off-by: chiragkyal <ckyal@redhat.com>
Signed-off-by: chiragkyal <ckyal@redhat.com>
Signed-off-by: chiragkyal <ckyal@redhat.com>
Signed-off-by: chiragkyal <ckyal@redhat.com>
|
Skipping CI for Draft Pull Request. |
|
[APPROVALNOTIFIER] This PR is APPROVED This pull-request has been approved by: chiragkyal The full list of commands accepted by this bot can be found here. The pull request process is described here DetailsNeeds approval from an approver in each of these files:
Approvers can indicate their approval by writing |
|
Note Reviews pausedIt 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 Use the following commands to manage reviews:
Use the checkboxes below for quick actions:
WalkthroughThe operator resolves ChangesSecrets Store configuration
Estimated code review effort: 4 (Complex) | ~45 minutes Sequence Diagram(s)sequenceDiagram
participant E2ETests
participant ClusterCSIDriver
participant Operator
participant CSIDriver
participant CSIDaemonSet
E2ETests->>ClusterCSIDriver: patch DriverConfig
ClusterCSIDriver->>Operator: publish configuration
Operator->>CSIDriver: apply republish and tokenRequests
Operator->>CSIDaemonSet: update rotation arguments
E2ETests->>CSIDriver: verify reconciled state
E2ETests->>CSIDaemonSet: verify reconciled arguments
🚥 Pre-merge checks | ✅ 12 | ❌ 3❌ Failed checks (3 warnings)
✅ Passed checks (12 passed)
✨ Finishing Touches🧪 Generate unit tests (beta)
Comment |
|
/test all |
There was a problem hiding this comment.
Actionable comments posted: 4
🧹 Nitpick comments (1)
pkg/operator/secretsstore.go (1)
47-61: 🗄️ Data Integrity & Integration | 🔵 Trivial | 💤 Low valueDocument or remove the defensive fallbacks.
SecretsStoreSecretRotation.customandManagedTokenRequests.managedare required by the CRD schema when their discriminator is set, soCustomwith omittedminimumRefreshAgeandManagedwithaudiences == nilare not admitted states. If these branches are only for tests that bypass validation, make that explicit; otherwise the API schema needs to change.🤖 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/operator/secretsstore.go` around lines 47 - 61, Update getSecretRotationConfig and the related managed-token configuration handling to remove or explicitly document defensive branches for schema-invalid states: Custom with omitted minimumRefreshAge and Managed with nil audiences. If retaining them solely for validation-bypassing tests, clearly identify that purpose; otherwise align the CRD schema with the fallback behavior.
🤖 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/operator/starter.go`:
- Around line 75-82: The ClusterCSIDriver informer created by
clusterCSIDriverInformer is not connected to reconciliation or startup
synchronization. Add it to the controller’s watched informers or register an
explicit event handler, and ensure its cache is synchronized before invoking
csiControllerSet.Run, while preserving the existing typed lister usage.
In `@test/e2e/e2e_suite_test.go`:
- Around line 79-90: Update loadRestConfig to assign a finite request timeout on
the returned *rest.Config before returning it, ensuring Kubernetes API calls
using context.Background() cannot hang indefinitely while preserving the
existing KUBECONFIG resolution and error handling.
In `@test/e2e/helpers_test.go`:
- Around line 60-69: Update restoreDriverConfig to use the same pollTimeout
retry loop as setDriverConfig, retrying the Get and Update operations when
restoration encounters conflicts or transient errors. Preserve
originalDriverConfig as the desired value, and surface a failure through the
test framework when retries are exhausted instead of silently returning.
In `@test/e2e/token_requests_test.go`:
- Around line 21-35: Update the test setup around
patchLiveCSIDriverTokenRequests to capture the live CSIDriver’s original
spec.tokenRequests before patching, then restore that value during cleanup.
Ensure cleanup restores the live CSIDriver even when driverConfig is omitted or
Unmanaged, while preserving the existing ClusterCSIDriver restoration.
---
Nitpick comments:
In `@pkg/operator/secretsstore.go`:
- Around line 47-61: Update getSecretRotationConfig and the related
managed-token configuration handling to remove or explicitly document defensive
branches for schema-invalid states: Custom with omitted minimumRefreshAge and
Managed with nil audiences. If retaining them solely for validation-bypassing
tests, clearly identify that purpose; otherwise align the CRD schema with the
fallback behavior.
🪄 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: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 8bbd1ae4-a336-47f8-8ca5-d670f02827c8
⛔ Files ignored due to path filters (383)
go.sumis excluded by!**/*.sumvendor/github.com/Masterminds/semver/v3/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/.golangci.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/SECURITY.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/collection.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/constraints.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/Masterminds/semver/v3/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/.editorconfigis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/.gitattributesis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/LICENSE.txtis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/Taskfile.ymlis excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/crypto.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/date.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/defaults.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/dict.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/doc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/functions.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/list.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/network.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/numeric.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/reflect.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/regex.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/strings.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/go-task/slim-sprig/v3/url.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/google/pprof/profile/merge.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/google/pprof/profile/profile.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/google/pprof/profile/proto.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/google/pprof/profile/prune.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/CONTRIBUTING.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/Makefileis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/RELEASING.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/config/deprecated.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/core_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/decorator_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/deprecated_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/formatter/colorable_others.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/formatter/colorable_windows.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/formatter/formatter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/automaxprocs.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroup.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroups.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cgroups2.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cpu_quota_linux.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/cpu_quota_unsupported.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/mountpoint.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/runtime.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/automaxprocs/subsys.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/build/build_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/command/abort.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/command/command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/command/program.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/boostrap_templates.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/bootstrap_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generate_templates.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/generators/generators_common.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/compile.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/gocovmerge.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/profiles_and_reports.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/run.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/test_suite.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/utils.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/internal/verify_version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/labels/labels_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/main.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/ginkgo.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/import.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/outline/outline_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/run/run_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/unfocus/unfocus_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/delta_tracker.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/dependencies.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hash.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/package_hashes.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/suite.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo/watch/watch_command.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo_cli_dependencies.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/ginkgo_t_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/around_node.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/counter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/failer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/focus.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/global/init.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/group.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/interrupt_handler.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_unix.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/interrupt_handler/sigquit_swallower_windows.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/node.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/ordering.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_unix.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_wasm.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/output_interceptor_win.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/client_server.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/http_server.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_client.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/rpc_server.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/parallel_support/server_handler.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/progress_report.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/progress_report_bsd.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/progress_report_unix.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/progress_report_wasm.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/progress_report_win.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/progress_reporter_manager.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/report_entry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson_event_writer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/reporters/gojson_reporter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/spec.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/spec_context.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/suite.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/testingtproxy/testing_t_proxy.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/tree.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/internal/writer.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/default_reporter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/deprecated_reporter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/gojson_report.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/json_report.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/junit_report.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/reporter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporters/teamcity_report.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/reporting_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/table_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/around_node.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/code_location.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/config.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/deprecated_types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/deprecation_support.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/enum_support.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/errors.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/file_filter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/flags.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/label_filter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/report_entry.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/semver_filter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/types.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/ginkgo/v2/types/version.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/.gitignoreis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/CHANGELOG.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/CONTRIBUTING.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/README.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/RELEASING.mdis excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/format/format.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/gomega_dsl.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/assertion.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/async_assertion.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/duration_bundle.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/gomega.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/gutil/post_ioutil.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/gutil/using_ioutil.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/polling_signal_error.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/internal/vetoptdesc.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/and.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/assignable_to_type_of_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/attributes_slice.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_a_directory.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_a_regular_file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_an_existing_file.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_closed_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_comparable_to_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_element_of_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_empty_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_equivalent_to_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_false_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_identical_to.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_key_of_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_nil_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_numerically_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_sent_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_temporally_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_true_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/be_zero_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/consist_of.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/contain_element_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/contain_elements_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/contain_substring_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/equal_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_cap_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_each_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_exact_elements.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_existing_field_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_field.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_http_body_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_http_header_with_value_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_http_status_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_key_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_key_with_value_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_len_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_occurred_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_prefix_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_suffix_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/have_value.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/internal/miter/type_support_iter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/internal/miter/type_support_noiter.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_error_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_json_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_regexp_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_xml_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/match_yaml_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/not.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/or.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/panic_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/receive_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/satisfy_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/semi_structured_data_support.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/succeed_matcher.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraph.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/bipartitegraph/bipartitegraphmatching.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/edge/edge.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/node/node.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/support/goraph/util/util.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/type_support.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/matchers/with_transform.gois excluded by!**/vendor/**,!vendor/**vendor/github.com/onsi/gomega/types/types.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/mod/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/mod/PATENTSis excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/mod/semver/semver.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/atom/atom.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/atom/table.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/charset/charset.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/const.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/doc.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/doctype.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/entity.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/escape.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/foreign.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/iter.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/node.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/nodetype_string.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/parse.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/render.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/net/html/token.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sync/errgroup/errgroup.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sync/singleflight/singleflight.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_386.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_amd64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_arm.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_arm64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_loong64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_mips.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_mips64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_mips64le.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_mipsle.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_ppc.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_ppc64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_ppc64le.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_riscv64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_s390x.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/sys/unix/ztypes_linux_sparc64.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/charmap/charmap.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/charmap/tables.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/encoding.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/htmlindex/htmlindex.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/htmlindex/map.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/htmlindex/tables.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/internal/identifier/identifier.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/internal/identifier/mib.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/internal/internal.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/japanese/all.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/japanese/eucjp.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/japanese/iso2022jp.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/japanese/shiftjis.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/japanese/tables.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/korean/euckr.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/korean/tables.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/all.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/gbk.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/hzgb2312.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/simplifiedchinese/tables.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/traditionalchinese/big5.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/traditionalchinese/tables.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/unicode/override.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/encoding/unicode/unicode.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/internal/utf8internal/utf8internal.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/runes/cond.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/text/runes/runes.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/LICENSEis excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/PATENTSis excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/cover/profile.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/ast/edge/edge.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/ast/inspector/cursor.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/ast/inspector/inspector.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/ast/inspector/iter.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/ast/inspector/typeof.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/ast/inspector/walk.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/gcexportdata/gcexportdata.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/gcexportdata/importer.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/doc.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/external.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/golist.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/golist_overlay.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/loadmode_string.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/packages.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/packages/visit.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/types/objectpath/objectpath.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/types/typeutil/callee.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/types/typeutil/imports.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/types/typeutil/map.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/types/typeutil/methodsetcache.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/go/types/typeutil/ui.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/aliases/aliases.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/core/event.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/core/export.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/core/fast.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/doc.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/event.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/keys/keys.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/keys/standard.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/keys/util.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/event/label/label.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/bimport.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/exportdata.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/gcimporter.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/iexport.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/iimport.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/predeclared.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/support.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gcimporter/ureader.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke_notunix.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gocommand/invoke_unix.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gocommand/vendor.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/gocommand/version.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/packagesinternal/packages.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/codes.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/decoder.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/doc.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/encoder.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/flags.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/reloc.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/support.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/sync.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/syncmarker_string.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/pkgbits/version.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/stdlib/deps.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/stdlib/import.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/stdlib/manifest.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/stdlib/stdlib.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typeparams/common.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typeparams/coretype.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typeparams/free.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typeparams/normalize.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typeparams/termlist.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typeparams/typeterm.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/classify_call.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/element.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/errorcode.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/errorcode_string.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/fx.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/isnamed.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/qualifier.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/recv.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/toonew.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/types.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/varkind.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/varkind_go124.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/typesinternal/zerovalue.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/versions/features.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/versions/gover.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/versions/types.gois excluded by!**/vendor/**,!vendor/**vendor/golang.org/x/tools/internal/versions/versions.gois excluded by!**/vendor/**,!vendor/**vendor/modules.txtis excluded by!**/vendor/**,!vendor/**
📒 Files selected for processing (14)
MakefileREADME.mdgo.modpkg/operator/csidriver_asset.gopkg/operator/csidriver_asset_test.gopkg/operator/rotation_daemonset_hook.gopkg/operator/rotation_daemonset_hook_test.gopkg/operator/secretsstore.gopkg/operator/secretsstore_test.gopkg/operator/starter.gotest/e2e/e2e_suite_test.gotest/e2e/helpers_test.gotest/e2e/secret_rotation_test.gotest/e2e/token_requests_test.go
| // Typed ClusterCSIDriver client and informer to read driverConfig.secretsStore configuration. | ||
| operatorClientset := operatorv1client.NewForConfigOrDie(rest.AddUserAgent(controllerConfig.KubeConfig, operatorName)) | ||
| operatorInformers := operatorv1informers.NewSharedInformerFactory(operatorClientset, resync) | ||
| clusterCSIDriverInformer := operatorInformers.Operator().V1().ClusterCSIDrivers() | ||
|
|
||
| // csiDriverInformer is the storage.k8s.io/v1 CSIDriver informer | ||
| csiDriverInformer := kubeInformersForNamespaces.InformersFor("").Storage().V1().CSIDrivers() | ||
|
|
There was a problem hiding this comment.
🎯 Functional Correctness | 🟠 Major | 🏗️ Heavy lift
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
rg -n -C4 \
'clusterCSIDriverInformer|operatorInformers\.Start|WaitForCacheSync|AddEventHandler|csiControllerSet\.Run' \
pkg/operatorRepository: openshift/secrets-store-csi-driver-operator
Length of output: 2496
🏁 Script executed:
#!/bin/bash
sed -n '1,220p' pkg/operator/starter.go
rg -n -C4 'WaitForCacheSync|AddEventHandler|ClusterCSIDriver|csiControllerSet|Run\(' pkg/operatorRepository: openshift/secrets-store-csi-driver-operator
Length of output: 35576
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "GOMODCACHE=$(go env GOMODCACHE)"
cache="$(go env GOMODCACHE)"
# Locate the library-go controller set sources if they are in cache.
rg -n --glob '*/csicontrollerset/*.go' --glob '*/csidrivernodeservicecontroller/*.go' \
'WaitForCacheSync|AddEventHandler|Run\(|Informer|Lister\(' "$cache" || true
# Show the exact starter wiring in this repo for reference.
sed -n '83,150p' pkg/operator/starter.goRepository: openshift/secrets-store-csi-driver-operator
Length of output: 2099
🏁 Script executed:
#!/bin/bash
set -euo pipefail
cache="$(go env GOMODCACHE)"
# Find the library-go controller set implementations used here.
fd -a 'csicontrollerset' "$cache" | head -20
fd -a 'csidrivernodeservicecontroller' "$cache" | head -20
# Search for cache-sync and event wiring in the relevant packages.
rg -n -C3 'WaitForCacheSync|AddEventHandler|Run\(|Informer|Lister\(' \
"$cache"/github.com/openshift/library-go*/*/pkg/operator/csi/csicontrollerset \
"$cache"/github.com/openshift/library-go*/*/pkg/operator/csi/csidrivernodeservicecontroller \
|| trueRepository: openshift/secrets-store-csi-driver-operator
Length of output: 735
🏁 Script executed:
#!/bin/bash
set -euo pipefail
cache="$(go env GOMODCACHE)"
# Print candidate files if the package is present and then inspect them.
find "$cache" -path '*github.com/openshift/library-go*' -path '*pkg/operator/csi/csicontrollerset*' -name '*.go' -o -path '*pkg/operator/csi/csidrivernodeservicecontroller*' -name '*.go' | sed -n '1,50p'
# Fallback to broad search over the module cache if the direct path above misses.
rg -n -C2 'WaitForCacheSync|AddEventHandler|Run\(|Informer|Lister\(' \
"$cache" \
-g '*csicontrollerset*.go' \
-g '*csidrivernodeservicecontroller*.go' || trueRepository: openshift/secrets-store-csi-driver-operator
Length of output: 1002
🏁 Script executed:
#!/bin/bash
set -euo pipefail
cache="$(go env GOMODCACHE)"
libgo="$cache/github.com/openshift/library-go@v0.0.0-20260708075158-aa59c3fbacc1"
sed -n '1,260p' "$libgo/pkg/operator/csi/csicontrollerset/csi_controller_set.go"
echo
sed -n '1,260p' "$libgo/pkg/operator/csi/csidrivernodeservicecontroller/csi_driver_node_service_controller.go"
echo
rg -n -C3 'WaitForCacheSync|AddEventHandler|Run\(|Informer|Lister\(' \
"$libgo/pkg/operator/csi/csicontrollerset" \
"$libgo/pkg/operator/csi/csidrivernodeservicecontroller"Repository: openshift/secrets-store-csi-driver-operator
Length of output: 50399
Wire the typed ClusterCSIDriver informer into controller sync. It’s only used as a lister here, so ClusterCSIDriver changes won’t enqueue reconciliation, and the first sync can fall back to defaults before that cache is warm. Add the informer to the controller’s watched informers or an explicit event handler, and wait for its cache sync before csiControllerSet.Run.
🤖 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/operator/starter.go` around lines 75 - 82, The ClusterCSIDriver informer
created by clusterCSIDriverInformer is not connected to reconciliation or
startup synchronization. Add it to the controller’s watched informers or
register an explicit event handler, and ensure its cache is synchronized before
invoking csiControllerSet.Run, while preserving the existing typed lister usage.
| // loadRestConfig builds a *rest.Config from $KUBECONFIG, falling back to | ||
| // ~/.kube/config, matching hack/e2e.sh's KUBECONFIG handling. | ||
| func loadRestConfig() (*rest.Config, error) { | ||
| kubeconfig := os.Getenv("KUBECONFIG") | ||
| if kubeconfig == "" { | ||
| home, err := os.UserHomeDir() | ||
| if err != nil { | ||
| return nil, fmt.Errorf("KUBECONFIG is not set and the home directory could not be determined: %w", err) | ||
| } | ||
| kubeconfig = filepath.Join(home, ".kube", "config") | ||
| } | ||
| return clientcmd.BuildConfigFromFlags("", kubeconfig) |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== file list =="
git ls-files test/e2e/e2e_suite_test.go test/e2e | sed -n '1,120p'
echo
echo "== outline =="
ast-grep outline test/e2e/e2e_suite_test.go --view expanded || true
echo
echo "== relevant lines =="
nl -ba test/e2e/e2e_suite_test.go | sed -n '1,180p'
echo
echo "== search for restConfig.Timeout and context.Background usages in test/e2e =="
rg -n --hidden -S 'restConfig\.Timeout|context\.Background\(\)|BuildConfigFromFlags|Eventually\(' test/e2eRepository: openshift/secrets-store-csi-driver-operator
Length of output: 916
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== e2e_suite_test.go around loadRestConfig =="
nl -ba test/e2e/e2e_suite_test.go | sed -n '70,120p'
echo
echo "== context and timeout usage across test/e2e =="
rg -n --hidden -S 'Timeout:|timeout:|context\.Background\(\)|context\.WithTimeout|clientcmd\.BuildConfigFromFlags|loadRestConfig\(' test/e2eRepository: openshift/secrets-store-csi-driver-operator
Length of output: 267
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo "== test/e2e/e2e_suite_test.go =="
sed -n '1,180p' test/e2e/e2e_suite_test.go
echo
echo "== search for client calls and Eventually in test/e2e =="
rg -n --hidden -S 'kubeClient|clusterCSIDriverClient|Eventually\(|Consistently\(|context\.Background\(\)|WithTimeout|Timeout:' test/e2e/*.go
echo
echo "== helpers_test.go =="
sed -n '1,260p' test/e2e/helpers_test.goRepository: openshift/secrets-store-csi-driver-operator
Length of output: 11686
Add a request timeout to the e2e client config. loadRestConfig returns an unbounded rest.Config, and these calls use context.Background(), so a hung API request can block the suite instead of letting Eventually retry until its deadline. Set restConfig.Timeout or use deadline contexts for the client calls.
🤖 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 `@test/e2e/e2e_suite_test.go` around lines 79 - 90, Update loadRestConfig to
assign a finite request timeout on the returned *rest.Config before returning
it, ensuring Kubernetes API calls using context.Background() cannot hang
indefinitely while preserving the existing KUBECONFIG resolution and error
handling.
Source: Path instructions
| func restoreDriverConfig() { | ||
| driver, err := clusterCSIDriverClient.Get(context.Background(), driverName, metav1.GetOptions{}) | ||
| if err != nil { | ||
| GinkgoWriter.Printf("unable to get ClusterCSIDriver %q for restore: %v\n", driverName, err) | ||
| return | ||
| } | ||
| driver.Spec.DriverConfig = originalDriverConfig | ||
| if _, err := clusterCSIDriverClient.Update(context.Background(), driver, metav1.UpdateOptions{}); err != nil { | ||
| GinkgoWriter.Printf("unable to restore ClusterCSIDriver %q driverConfig: %v\n", driverName, err) | ||
| } |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Map the helper file structure first.
ast-grep outline test/e2e/helpers_test.go --view expanded || true
echo '--- helpers_test.go: relevant sections ---'
sed -n '1,180p' test/e2e/helpers_test.go
echo '--- call sites for restoreDriverConfig / setDriverConfig / clearDriverConfig ---'
rg -n "restoreDriverConfig|setDriverConfig|clearDriverConfig|pollTimeout|originalDriverConfig|driverConfig" test/e2e -SRepository: openshift/secrets-store-csi-driver-operator
Length of output: 9872
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Focus on the helper and its surrounding cleanup flow.
sed -n '1,140p' test/e2e/helpers_test.go
echo '---'
rg -n "restoreDriverConfig|setDriverConfig|clearDriverConfig" test/e2e/helpers_test.go test/e2e -SRepository: openshift/secrets-store-csi-driver-operator
Length of output: 7120
Retry restoreDriverConfig on conflict
A single Get/Update here can leave ClusterCSIDriver modified for the next run if cleanup hits a resourceVersion conflict or other transient error. Reuse the pollTimeout retry loop from setDriverConfig and surface a failure when restore cannot complete.
🤖 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 `@test/e2e/helpers_test.go` around lines 60 - 69, Update restoreDriverConfig to
use the same pollTimeout retry loop as setDriverConfig, retrying the Get and
Update operations when restoration encounters conflicts or transient errors.
Preserve originalDriverConfig as the desired value, and surface a failure
through the test framework when retries are exhausted instead of silently
returning.
| func patchLiveCSIDriverTokenRequests(audiences []string) { | ||
| Eventually(func() error { | ||
| driver, err := kubeClient.StorageV1().CSIDrivers().Get(context.Background(), driverName, metav1.GetOptions{}) | ||
| if err != nil { | ||
| return err | ||
| } | ||
| trs := make([]storagev1.TokenRequest, 0, len(audiences)) | ||
| for _, a := range audiences { | ||
| trs = append(trs, storagev1.TokenRequest{Audience: a}) | ||
| } | ||
| driver.Spec.TokenRequests = trs | ||
| _, err = kubeClient.StorageV1().CSIDrivers().Update(context.Background(), driver, metav1.UpdateOptions{}) | ||
| return err | ||
| }, pollTimeout, pollInterval).Should(Succeed(), "failed to manually patch CSIDriver %q tokenRequests", driverName) | ||
| } |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟡 Minor | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Map relevant files and inspect the test structure.
git ls-files test/e2e | sed -n '1,120p'
echo '--- token_requests_test.go outline ---'
ast-grep outline test/e2e/token_requests_test.go --view expanded || true
echo '--- relevant lines ---'
cat -n test/e2e/token_requests_test.go | sed -n '1,260p'
echo '--- search for CSIDriver cleanup/restore helpers ---'
rg -n "CSIDriver|TokenRequests|clearDriverConfig|driverName|ClusterCSIDriver|AfterSuite|BeforeEach|AfterEach|patchLiveCSIDriverTokenRequests" test/e2e -SRepository: openshift/secrets-store-csi-driver-operator
Length of output: 16117
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Inspect the specific test file and nearby cleanup logic.
wc -l test/e2e/token_requests_test.go
sed -n '1,260p' test/e2e/token_requests_test.go | nl -ba
echo '--- surrounding cleanup references ---'
rg -n "clearDriverConfig|ClusterCSIDriver|CSIDriver|TokenRequests|RUN_IRREVERSIBLE_E2E|AfterSuite|DeferCleanup|Cleanup" test/e2e/token_requests_test.go test/e2e -SRepository: openshift/secrets-store-csi-driver-operator
Length of output: 257
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# If the file is small enough, inspect the entire test and any suite cleanup helpers.
sed -n '1,260p' test/e2e/token_requests_test.go | nl -ba
echo '--- other e2e files referencing CSIDriver restoration ---'
rg -n "Update\\(context.Background\\(\\), driver|TokenRequests|ClusterCSIDriver|clearDriverConfig|patchLiveCSIDriverTokenRequests" test/e2e -SRepository: openshift/secrets-store-csi-driver-operator
Length of output: 221
🏁 Script executed:
#!/bin/bash
set -euo pipefail
# Show the relevant test file and any cleanup for live CSIDriver mutations.
nl -ba test/e2e/token_requests_test.go | sed -n '1,260p'
echo '---'
rg -n "clearDriverConfig|AfterSuite|DeferCleanup|TokenRequests|ClusterCSIDriver|CSIDriver" test/e2e -SRepository: openshift/secrets-store-csi-driver-operator
Length of output: 221
🏁 Script executed:
#!/bin/bash
set -euo pipefail
echo '--- test/e2e/e2e_suite_test.go ---'
sed -n '1,140p' test/e2e/e2e_suite_test.go | cat -n
echo '--- test/e2e/helpers_test.go ---'
sed -n '1,140p' test/e2e/helpers_test.go | cat -nRepository: openshift/secrets-store-csi-driver-operator
Length of output: 10550
Restore the live CSIDriver token requests in cleanup. Restoring only ClusterCSIDriver leaves the manually patched audience behind when driverConfig is omitted or Unmanaged, because the operator preserves the live CSIDriver field in those modes. Capture the original spec.tokenRequests and restore it in cleanup.
🤖 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 `@test/e2e/token_requests_test.go` around lines 21 - 35, Update the test setup
around patchLiveCSIDriverTokenRequests to capture the live CSIDriver’s original
spec.tokenRequests before patching, then restore that value during cleanup.
Ensure cleanup restores the live CSIDriver even when driverConfig is omitted or
Unmanaged, while preserving the existing ClusterCSIDriver restoration.
Signed-off-by: chiragkyal <ckyal@redhat.com>
There was a problem hiding this comment.
Actionable comments posted: 2
🤖 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/testing-guidelines.md`:
- Around line 55-58: Update the irreversible e2e gating logic documented in
docs/testing-guidelines.md (lines 55-58) and AGENTS.md (line 233) to run only
when RUN_IRREVERSIBLE_E2E is exactly true, so values such as false or other
non-empty strings skip the specs. Preserve the existing ungated test/e2e/azure
exception only when its CI job is guaranteed to use an ephemeral cluster.
In `@test/e2e/helpers_test.go`:
- Around line 60-63: Update setDriverConfig and restoreDriverConfig so each
Patch call uses a bounded, cancellable context instead of context.Background(),
ensuring individual API requests cannot outlive Eventually. Also update
loadRestConfig to configure a request timeout as an additional guard.
🪄 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: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 4c770541-aba0-40df-9321-bf0120205cbc
📒 Files selected for processing (3)
AGENTS.mddocs/testing-guidelines.mdtest/e2e/helpers_test.go
| **`tokenRequests.type: Managed` is a one-way, irreversible transition**, enforced by a CEL rule on `ClusterCSIDriver` (see `vendor/github.com/openshift/api/operator/v1/types_csi_cluster_driver.go`) — once set, it can never be reverted to `Unmanaged`, even by clearing `driverConfig` entirely. | ||
|
|
||
| - In `test/e2e`, the specs that transition `tokenRequests.type` to `Managed` are isolated in an `Ordered` container and gated behind `RUN_IRREVERSIBLE_E2E=true` (skipped by default), since this suite may run against a persistent developer or CI cluster via plain `make test-e2e`. Set `RUN_IRREVERSIBLE_E2E=true` only if you're certain the cluster's `ClusterCSIDriver` singleton being permanently switched to `Managed` tokenRequests is acceptable. | ||
| - `test/e2e/azure` always transitions `tokenRequests.type` to `Managed` (that is the feature under test) and does not gate it, since its target CI job provisions an ephemeral, per-run cluster that is destroyed afterward. |
There was a problem hiding this comment.
🗄️ Data Integrity & Integration | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
set -euo pipefail
printf '\n== file list ==\n'
git ls-files | rg '^(docs/testing-guidelines\.md|AGENTS\.md|test/e2e/token_requests_test\.go)$'
printf '\n== relevant snippets ==\n'
for f in docs/testing-guidelines.md AGENTS.md test/e2e/token_requests_test.go; do
if [ -f "$f" ]; then
echo "--- $f ---"
nl -ba "$f" | sed -n '1,260p' | rg -n 'RUN_IRREVERSIBLE_E2E|tokenRequests\.type|Managed|Azure|irreversible|ClusterCSIDriver|Ordered|driverConfig|Unmanaged'
fi
doneRepository: openshift/secrets-store-csi-driver-operator
Length of output: 364
🏁 Script executed:
set -euo pipefail
# Show the exact surrounding context for the cited lines/files.
for f in docs/testing-guidelines.md AGENTS.md test/e2e/token_requests_test.go; do
if [ -f "$f" ]; then
echo "===== $f ====="
nl -ba "$f" | sed -n '45,75p;225,240p;1,220p'
fi
doneRepository: openshift/secrets-store-csi-driver-operator
Length of output: 260
🏁 Script executed:
set -euo pipefail
python3 - <<'PY'
from pathlib import Path
p = Path('test/e2e/token_requests_test.go')
if p.exists():
text = p.read_text()
for needle in ['RUN_IRREVERSIBLE_E2E', 'os.Getenv', 'Getenv', 'tokenRequests.type', 'Managed', 'Unmanaged']:
print(f'-- {needle} --')
for i, line in enumerate(text.splitlines(), 1):
if needle in line:
start = max(1, i-3); end = min(len(text.splitlines()), i+3)
for j in range(start, end+1):
print(f"{j}:{text.splitlines()[j-1]}")
print()
PYRepository: openshift/secrets-store-csi-driver-operator
Length of output: 11452
🏁 Script executed:
set -euo pipefail
# If the files exist, print only the directly relevant lines with context.
python3 - <<'PY'
from pathlib import Path
targets = [
('docs/testing-guidelines.md', range(50, 66)),
('AGENTS.md', range(228, 238)),
('test/e2e/token_requests_test.go', range(1, 260)),
]
for file, lines in targets:
p = Path(file)
print(f"\n===== {file} =====")
if not p.exists():
print("MISSING")
continue
text = p.read_text().splitlines()
for n in lines:
if 1 <= n <= len(text):
line = text[n-1]
if any(k in line for k in ['RUN_IRREVERSIBLE_E2E', 'tokenRequests.type', 'Managed', 'Unmanaged', 'Azure', 'irreversible', 'ClusterCSIDriver', 'driverConfig']):
print(f"{n}:{line}")
PYRepository: openshift/secrets-store-csi-driver-operator
Length of output: 4865
Require an exact RUN_IRREVERSIBLE_E2E=true gate. The current non-empty check lets RUN_IRREVERSIBLE_E2E=false run the irreversible Managed-transition specs. Keep the Azure exception only if that job is guaranteed ephemeral.
📍 Affects 2 files
docs/testing-guidelines.md#L55-L58(this comment)AGENTS.md#L233-L233
🤖 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 `@docs/testing-guidelines.md` around lines 55 - 58, Update the irreversible e2e
gating logic documented in docs/testing-guidelines.md (lines 55-58) and
AGENTS.md (line 233) to run only when RUN_IRREVERSIBLE_E2E is exactly true, so
values such as false or other non-empty strings skip the specs. Preserve the
existing ungated test/e2e/azure exception only when its CI job is guaranteed to
use an ephemeral cluster.
Source: Coding guidelines
| Eventually(func() error { | ||
| _, err := clusterCSIDriverClient.Patch(context.Background(), driverName, types.MergePatchType, patch, metav1.PatchOptions{}) | ||
| return err | ||
| }, pollTimeout, pollInterval).Should(Succeed(), "failed to update ClusterCSIDriver %q driverConfig", driverName) |
There was a problem hiding this comment.
🩺 Stability & Availability | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n -C3 'BuildConfigFromFlags|Timeout:|Patch\(context\.Background' test/e2eRepository: openshift/secrets-store-csi-driver-operator
Length of output: 1558
🏁 Script executed:
#!/bin/bash
set -euo pipefail
printf '\n== helpers_test.go ==\n'
sed -n '1,140p' test/e2e/helpers_test.go
printf '\n== e2e_suite_test.go ==\n'
sed -n '1,140p' test/e2e/e2e_suite_test.goRepository: openshift/secrets-store-csi-driver-operator
Length of output: 9157
Bound the API calls in this suite. setDriverConfig and restoreDriverConfig both use context.Background(), so a hung Patch can outlive Eventually and stall the test run. Pass a bounded context to both calls, and consider setting a request timeout in loadRestConfig() as a second guard.
🤖 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 `@test/e2e/helpers_test.go` around lines 60 - 63, Update setDriverConfig and
restoreDriverConfig so each Patch call uses a bounded, cancellable context
instead of context.Background(), ensuring individual API requests cannot outlive
Eventually. Also update loadRestConfig to configure a request timeout as an
additional guard.
Source: Path instructions
|
/test all |
Signed-off-by: chiragkyal <ckyal@redhat.com>
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 `@go.mod`:
- Line 93: Update the go.opentelemetry.io/otel/sdk dependency from v1.40.0 to
v1.43.0 or newer in go.mod, and align the related OpenTelemetry modules to
compatible versions as needed.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
| go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.40.0 // indirect | ||
| go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc v1.40.0 // indirect | ||
| go.opentelemetry.io/otel/metric v1.41.0 // indirect | ||
| go.opentelemetry.io/otel/sdk v1.40.0 // indirect |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
version="$(go list -m -f '{{.Version}}' go.opentelemetry.io/otel/sdk)"
curl -fsSL https://api.osv.dev/v1/query \
-H 'Content-Type: application/json' \
--data "{\"package\":{\"ecosystem\":\"Go\",\"name\":\"go.opentelemetry.io/otel/sdk\"},\"version\":\"${version}\"}" |
jq '{version: "'$version'", vulnerabilities: [.vulns[]?.id]}'Repository: openshift/secrets-store-csi-driver-operator
Length of output: 262
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== go.mod excerpt =="
nl -ba go.mod | sed -n '80,105p'
echo
echo "== OSV advisory details =="
curl -fsSL https://api.osv.dev/v1/vulns/GHSA-hfvc-g4fc-pqhx | jq '{
id,
summary,
aliases,
affected: [.affected[]? | {
package: .package.name,
ranges: [.ranges[]? | {
type,
events
}],
ecosystem_specific: .ecosystem_specific
}]
}'Repository: openshift/secrets-store-csi-driver-operator
Length of output: 242
🏁 Script executed:
#!/usr/bin/env bash
set -euo pipefail
echo "== go.mod excerpt =="
sed -n '88,98p' go.mod
echo
echo "== OSV advisory details =="
curl -fsSL https://api.osv.dev/v1/vulns/GHSA-hfvc-g4fc-pqhx \
| jq '{
id,
summary,
aliases,
affected: [.affected[]? | {
package: .package.name,
ecosystem: .package.ecosystem,
ranges: [.ranges[]? | {
type,
events
}]
}]
}'Repository: openshift/secrets-store-csi-driver-operator
Length of output: 1353
Upgrade the OpenTelemetry SDK
go.opentelemetry.io/otel/sdk v1.40.0 is affected by GHSA-hfvc-g4fc-pqhx / CVE-2026-39883. Bump it to v1.43.0 or newer and keep the OpenTelemetry modules aligned.
Proposed dependency update
- go.opentelemetry.io/otel/sdk v1.40.0 // indirect
+ go.opentelemetry.io/otel/sdk v1.43.0 // indirect📝 Committable suggestion
‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.
| go.opentelemetry.io/otel/sdk v1.40.0 // indirect | |
| go.opentelemetry.io/otel/sdk v1.43.0 // indirect |
🧰 Tools
🪛 OSV Scanner (2.4.0)
[HIGH] 93-93: go.opentelemetry.io/otel/sdk 1.40.0: opentelemetry-go: BSD kenv command not using absolute path enables PATH hijacking
🤖 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 `@go.mod` at line 93, Update the go.opentelemetry.io/otel/sdk dependency from
v1.40.0 to v1.43.0 or newer in go.mod, and align the related OpenTelemetry
modules to compatible versions as needed.
Sources: Path instructions, Linters/SAST tools
|
/test all |
Signed-off-by: chiragkyal <ckyal@redhat.com>
|
/test all |
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 `@test/e2e/helpers_test.go`:
- Line 66: Replace raw Kubernetes client error formatting in the retry/error
logs within setDriverConfig and the corresponding helper flows with a sanitized
reason or status code, avoiding direct %v output of err. Apply this at
test/e2e/helpers_test.go lines 66, 111, 138, and 171; preserve the existing log
context and retry behavior.
🪄 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: Repository: openshift/coderabbit/.coderabbit.yaml
Review profile: CHILL
Plan: Enterprise
Run ID: 59e6f95a-0aa9-4b7e-bd3c-3a76a978b653
📒 Files selected for processing (6)
AGENTS.mdMakefiledocs/testing-guidelines.mdpkg/operator/secretsstore.gotest/e2e/helpers_test.gotest/e2e/secret_rotation_test.go
🚧 Files skipped from review as they are similar to previous changes (3)
- Makefile
- pkg/operator/secretsstore.go
- docs/testing-guidelines.md
| attempt++ | ||
| _, err := clusterCSIDriverClient.Patch(context.Background(), driverName, types.MergePatchType, patch, metav1.PatchOptions{}) | ||
| if err != nil { | ||
| GinkgoWriter.Printf("[setDriverConfig attempt %d] patch failed: %v\n", attempt, err) |
There was a problem hiding this comment.
🔒 Security & Privacy | 🟠 Major | ⚡ Quick win
🧩 Analysis chain
🏁 Script executed:
#!/bin/bash
set -euo pipefail
rg -n -C2 'GinkgoWriter\.Printf\(.*%v' test/e2e/helpers_test.goRepository: openshift/secrets-store-csi-driver-operator
Length of output: 2860
Avoid logging raw Kubernetes client errors
Transport failures can include the cluster API hostname in test artifacts. Log a sanitized reason/code instead of %v at:
test/e2e/helpers_test.go#L66test/e2e/helpers_test.go#L111test/e2e/helpers_test.go#L138test/e2e/helpers_test.go#L171
📍 Affects 1 file
test/e2e/helpers_test.go#L66-L66(this comment)test/e2e/helpers_test.go#L111-L111test/e2e/helpers_test.go#L138-L138test/e2e/helpers_test.go#L171-L171
🤖 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 `@test/e2e/helpers_test.go` at line 66, Replace raw Kubernetes client error
formatting in the retry/error logs within setDriverConfig and the corresponding
helper flows with a sanitized reason or status code, avoiding direct %v output
of err. Apply this at test/e2e/helpers_test.go lines 66, 111, 138, and 171;
preserve the existing log context and retry behavior.
Source: Coding guidelines
Signed-off-by: chiragkyal <ckyal@redhat.com>
|
/test all |
Signed-off-by: chiragkyal <ckyal@redhat.com>
|
/test all |
|
/retest |
|
/test all |
|
/retest |
2 similar comments
|
/retest |
|
/retest |
|
@chiragkyal: all tests passed! Full PR test history. Your PR dashboard. DetailsInstructions for interacting with me using PR comments are available here. If you have questions or suggestions related to my behavior, please file an issue against the kubernetes-sigs/prow repository. I understand the commands that are listed here. |
Summary by CodeRabbit
tokenRequests.type: Managedis now treated as a one-way, irreversible transition.make test-e2enow runs the E2E harness plus Go-based suites; addedmake test-e2e-azure-wif.