Skip to content

chore: test update dependency#6802

Closed
markussiebert wants to merge 1 commit intocrossplane:mainfrom
markussiebert:chore/update-controller-runtime
Closed

chore: test update dependency#6802
markussiebert wants to merge 1 commit intocrossplane:mainfrom
markussiebert:chore/update-controller-runtime

Conversation

@markussiebert
Copy link
Copy Markdown
Contributor

Description of your changes

This PR updates controller-runtime from v0.19.0 to v0.22.1 and integrates the updated crossplane-runtime from the fix/update-controller-runtime branch to maintain compatibility.

Changes made:
• Updated sigs.k8s.io/controller-runtime to v0.22.1 (latest version)
• Added replace directive to use updated crossplane-runtime fork, has to be removed ...
• Fixed API compatibility issues:
• Updated NewUnmanaged function wrapper for new signature
• Resolved ambiguous Apply method calls by using Applicator.Apply
• Fixed WatchErrorHandler signature to include context parameter
• Updated client interface usage throughout codebase
• Removed unnecessary type arguments in test files (linter warnings)

Testing:
• All builds pass successfully
• Unit tests pass (only 2 unrelated test failures remain)
• No breaking changes to public APIs

I have:

• [ ] Read and followed Crossplane's [contribution process].
• [ ] Run earthly +reviewable to ensure this PR is ready for review.
• [ ] Added or updated unit tests. (No new functionality added)
• [ ] Added or updated e2e tests. (No new functionality added)
• [ ] Linked a PR or a [docs tracking issue] to [document this change]. (Internal dependency update)
• [ ] Added backport release-x.y labels to auto-backport this PR. (Draft PR)
• [ ] Followed the [API promotion workflow] if this PR introduces, removes, or promotes an API. (No API changes)

@coderabbitai
Copy link
Copy Markdown

coderabbitai bot commented Sep 11, 2025

📝 Walkthrough

Walkthrough

Refactors shift Apply operations to use the embedded Applicator and pass raw client.Client where required. Updates finalizer and selector constructors to accept client.Client. Adjusts watch error handler to include context. Adapts controller constructor function signature. Minor test generic cleanup. No new features introduced.

Changes

Cohort / File(s) Summary
Test generic cleanup
cmd/crank/beta/validate/validate_test.go
Use ptr.To(true) instead of generic ptr.Tobool in OwnerReferences.
Watch error handler signature update
cmd/crossplane/core/core.go
DefaultWatchErrorHandler callback now func(context.Context, *kcache.Reflector, error); body unchanged.
ClientApplicator → underlying client/Applicator refactor
internal/controller/apiextensions/claim/* (connection.go, syncer_csa.go), internal/controller/apiextensions/definition/reconciler.go, internal/controller/apiextensions/offered/reconciler.go, internal/controller/apiextensions/composite/reconciler.go, internal/controller/pkg/manager/reconciler.go, internal/controller/pkg/revision/reconciler.go, internal/controller/pkg/runtime/* (runtime_function.go, runtime_provider.go), internal/controller/rbac/... (definition/reconciler.go, provider/binding/reconciler.go, provider/roles/reconciler.go)
- Replace r.client.Apply(...) with r.client.Applicator.Apply(...).
- Pass raw client.Client to APIs: NewAPIFinalizer, NewEnforcedCompositionSelector, TLS cert generator, NewAPIRevisionFetcher.
- WithClientApplicator stores ca.Client instead of ca.
Controller creation adapter
internal/engine/engine.go
Wrap kcontroller.NewUnmanaged in a 3-arg constructor to match new NewControllerFn signature; ignore mgr param.

Sequence Diagram(s)

sequenceDiagram
  autonumber
  actor Reconciler
  participant Client as ClientApplicator
  participant Appl as Applicator (APIPatching/Updating)
  participant K8s as Kubernetes API

  Reconciler->>Client: Reconcile()
  note right of Reconciler: Changed: use Client.Applicator.Apply(...)
  Reconciler->>Appl: Apply(obj, constraints, predicates)
  alt Success
    Appl->>K8s: PATCH/Apply
    K8s-->>Appl: 2xx
    Appl-->>Reconciler: nil
  else IsNotAllowed
    Appl-->>Reconciler: resource.IsNotAllowed
    Reconciler-->>Reconciler: treat as no-op
  else Conflict
    Appl-->>Reconciler: Conflict error
    Reconciler-->>Reconciler: requeue
  else Other error
    Appl-->>Reconciler: error
    Reconciler-->>Reconciler: wrap and record event
  end

  note over Reconciler,K8s: Finalizer/selector constructors now accept client.Client
Loading
sequenceDiagram
  autonumber
  participant Engine as Engine.Start
  participant CO as ControllerOptions.nc
  participant KCtrl as kcontroller
  participant Ctrl as Controller

  Engine->>CO: nc(name, mgr, options)
  note right of CO: Changed: wrapper ignores mgr
  CO->>KCtrl: NewUnmanaged(name, options)
  KCtrl-->>CO: Controller
  CO-->>Engine: Controller
  Engine->>Ctrl: Start(ctx)
Loading

Estimated code review effort

🎯 3 (Moderate) | ⏱️ ~25 minutes

Thanks for the refactor sweep—it’s cohesive and contained. Any downstream packages expected to adopt client.Client and Applicator directly next, or is this the final migration step?

Pre-merge checks (3 passed, 1 inconclusive)

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title Check ❓ Inconclusive The current title "chore: test update dependency" is under 72 characters but is vague and does not clearly describe the primary change (updating controller-runtime and related crossplane-runtime compatibility fixes). It refers to a dependency update but omits which package(s) and the version, so reviewers cannot immediately see the scope. Because of this lack of specificity the title is inconclusive for guiding reviewers. Please rename the PR to explicitly name the affected dependency (and optionally the version), for example "chore: update controller-runtime to v0.22.1" or "chore: update controller-runtime to v0.22.1 and crossplane-runtime compatibility"; at minimum include the package name so the scope is clear. Would you update the title accordingly before review? Thank you for the contribution — a clearer title will speed up reviewers.
✅ Passed checks (3 passed)
Check name Status Explanation
Description Check ✅ Passed The PR description is directly related to the changeset: it documents the controller-runtime upgrade, the crossplane-runtime replace directive, the API compatibility fixes (Apply calls, WatchErrorHandler signature, NewUnmanaged wrapper), and test adjustments, and it summarizes testing outcomes. This level of detail satisfies the lenient description check because it is not off-topic and provides useful context for reviewers. Thank you for the thorough summary.
Breaking Changes ✅ Passed I reviewed all changes under apis/** and cmd/** for removed/renamed public fields or flags, newly required public fields/flags, or behavior removals. The only cmd changes are a test tweak (validate_test.go) and an internal handler signature adaptation in cmd/crossplane/core/core.go that adds a context parameter without altering behavior, and there are no apis/** changes. I found no additions/removals/renames of CLI flags, no flags made newly required, and no public field changes or behavior removals in these paths, and the PR currently has no breaking-change label, which is fine given the findings. Thanks for keeping the surface area stable while updating controller-runtime.
Feature Gate Requirement ✅ Passed I reviewed the PR’s intent and the summarized diffs and found only dependency bumps (controller-runtime v0.22.1 and a temporary crossplane-runtime replace) with corresponding call-site and signature adaptations. There are no changes indicated under apis/**, no new API types or fields, and no new behavior toggles; updates like routing Apply via Applicator and the WatchErrorHandler context parameter are compatibility fixes rather than user-facing features. Given the absence of new experimental functionality or API-surface additions, a feature flag is not required for this PR. If any unlisted change meaningfully alters default runtime behavior for users, please flag it so we can reassess. Thanks for the careful update to keep things current without introducing risk.

Pre-merge checks

❌ Failed checks (1 inconclusive)
Check name Status Explanation Resolution
Title check ❓ Inconclusive The title 'chore: test update dependency' is vague and does not clearly describe the substantial changes made (updating controller-runtime, fixing API compatibility issues, resolving Apply method calls). Consider a more descriptive title that reflects the main change, such as 'chore: update controller-runtime to v0.22.1 and fix API compatibility' to better convey the scope of updates.
✅ Passed checks (3 passed)
Check name Status Explanation
Breaking Changes ✅ Passed I reviewed all changes under apis/** and cmd/** for removed/renamed public fields or flags, newly required public fields/flags, or behavior removals. The only cmd changes are a test tweak (validate_test.go) and an internal handler signature adaptation in cmd/crossplane/core/core.go that adds a context parameter without altering behavior, and there are no apis/** changes. I found no additions/removals/renames of CLI flags, no flags made newly required, and no public field changes or behavior removals in these paths, and the PR currently has no breaking-change label, which is fine given the findings. Thanks for keeping the surface area stable while updating controller-runtime.
Feature Gate Requirement ✅ Passed I reviewed the PR’s intent and the summarized diffs and found only dependency bumps (controller-runtime v0.22.1 and a temporary crossplane-runtime replace) with corresponding call-site and signature adaptations. There are no changes indicated under apis/**, no new API types or fields, and no new behavior toggles; updates like routing Apply via Applicator and the WatchErrorHandler context parameter are compatibility fixes rather than user-facing features. Given the absence of new experimental functionality or API-surface additions, a feature flag is not required for this PR. If any unlisted change meaningfully alters default runtime behavior for users, please flag it so we can reassess. Thanks for the careful update to keep things current without introducing risk.
Description check ✅ Passed The description clearly details the controller-runtime version update, API compatibility fixes, and testing status, providing meaningful context about the changeset.

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 and usage tips.

Copy link
Copy Markdown

@coderabbitai coderabbitai bot left a comment

Choose a reason for hiding this comment

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

Actionable comments posted: 0

Caution

Some comments are outside the diff and can’t be posted inline due to platform limitations.

⚠️ Outside diff range comments (1)
cmd/crossplane/core/core.go (1)

343-349: Fix reversed errors.Is arguments in watch error handler.

errors.Is expects (err, target). Current order prevents EOF short-circuit and adds noisy logs.

Apply this diff:

-       DefaultWatchErrorHandler: func(_ context.Context, _ *kcache.Reflector, err error) {
-           if errors.Is(io.EOF, err) {
+       DefaultWatchErrorHandler: func(_ context.Context, _ *kcache.Reflector, err error) {
+           if errors.Is(err, io.EOF) {
                // Watch closed normally.
                return
            }
            log.Debug("Watch error - probably due to CRD being uninstalled", "error", err)
        },
🧹 Nitpick comments (11)
cmd/crossplane/core/core.go (1)

343-349: Optionally ignore canceled/timeouts to reduce noise.

Consider treating context cancellation/timeouts as benign as well.

Apply this diff after fixing the Is order:

        DefaultWatchErrorHandler: func(_ context.Context, _ *kcache.Reflector, err error) {
-           if errors.Is(err, io.EOF) {
+           if errors.Is(err, io.EOF) ||
+               errors.Is(err, context.Canceled) ||
+               errors.Is(err, context.DeadlineExceeded) {
                // Watch ended normally or context done.
                return
            }
            log.Debug("Watch error - probably due to CRD being uninstalled", "error", err)
        },
internal/controller/pkg/revision/reconciler.go (1)

122-128: Naming nit: option sets only the client, not the applicator.

WithClientApplicator(ca) now assigns only ca.Client. That matches current usage (this reconciler never calls Apply), but the name can mislead tests/callers expecting Applicator injection.

Would you like a follow-up to add a new WithClient option and deprecate WithClientApplicator here for clarity?

internal/controller/pkg/runtime/runtime_function.go (3)

93-95: Add MustBeControllableBy to avoid adopting foreign Services

Defensive guard to ensure we only mutate Services we control; aligns with other controllers.

- if err := h.client.Applicator.Apply(ctx, svc); err != nil {
+ if err := h.client.Applicator.Apply(ctx, svc, resource.MustBeControllableBy(pr.GetUID())); err != nil {

Quick check: does build.Service already set OwnerReferences? If yes, this is belt-and-braces. Thanks!


106-108: Likewise guard Secret apply with MustBeControllableBy

Consistent ownership check on the TLS Secret.

- if err := h.client.Applicator.Apply(ctx, secServer); err != nil {
+ if err := h.client.Applicator.Apply(ctx, secServer, resource.MustBeControllableBy(pr.GetUID())); err != nil {

145-147: Guard Deployment apply with MustBeControllableBy

Prevents updating Deployments not controlled by this revision.

- if err := h.client.Applicator.Apply(ctx, d); err != nil {
+ if err := h.client.Applicator.Apply(ctx, d, resource.MustBeControllableBy(pr.GetUID())); err != nil {
internal/engine/engine.go (1)

304-306: Small doc nit: clarify ignored mgr param in wrapper

Future readers may wonder why mgr is unused here after the API change.

- co := &ControllerOptions{nc: func(name string, mgr manager.Manager, options kcontroller.Options) (kcontroller.Controller, error) {
+ // controller-runtime >= v0.22: NewUnmanaged no longer requires a manager; mgr is intentionally ignored.
+ co := &ControllerOptions{nc: func(name string, mgr manager.Manager, options kcontroller.Options) (kcontroller.Controller, error) {
internal/controller/pkg/runtime/runtime_provider.go (5)

89-91: Add MustBeControllableBy for Service apply

Avoids mutating Services not owned by the ProviderRevision.

- if err := h.client.Applicator.Apply(ctx, svc); err != nil {
+ if err := h.client.Applicator.Apply(ctx, svc, resource.MustBeControllableBy(pr.GetUID())); err != nil {

102-105: Guard TLS client Secret apply with MustBeControllableBy

- if err := h.client.Applicator.Apply(ctx, secClient); err != nil {
+ if err := h.client.Applicator.Apply(ctx, secClient, resource.MustBeControllableBy(pr.GetUID())); err != nil {

106-108: Guard TLS server Secret apply with MustBeControllableBy

- if err := h.client.Applicator.Apply(ctx, secServer); err != nil {
+ if err := h.client.Applicator.Apply(ctx, secServer, resource.MustBeControllableBy(pr.GetUID())); err != nil {

146-148: Add MustBeControllableBy for Deployment apply

Consistency with CRD/other apply sites and safer ownership semantics.

- if err := h.client.Applicator.Apply(ctx, d); err != nil {
+ if err := h.client.Applicator.Apply(ctx, d, resource.MustBeControllableBy(pr.GetUID())); err != nil {

288-289: Consider guarding ServiceAccount apply with MustBeControllableBy

If SA is internally managed, add an ownership guard to avoid updates to external SAs. This would require threading the owner UID into applySA.

Would you like a small follow-up that refactors applySA to accept the owner UID and applies:

- func applySA(ctx context.Context, cl resource.ClientApplicator, sa *corev1.ServiceAccount) error {
+ func applySA(ctx context.Context, cl resource.ClientApplicator, ownerUID types.UID, sa *corev1.ServiceAccount) error {
    ...
-   return cl.Applicator.Apply(ctx, sa)
+   return cl.Applicator.Apply(ctx, sa, resource.MustBeControllableBy(ownerUID))
}

and call with:

- if err := applySA(ctx, h.client, sa); err != nil {
+ if err := applySA(ctx, h.client, pr.GetUID(), sa); err != nil {
📜 Review details

Configuration used: Path: .coderabbit.yaml

Review profile: CHILL

Plan: Pro

📥 Commits

Reviewing files that changed from the base of the PR and between 2ef13c0 and 564bd8d.

⛔ Files ignored due to path filters (2)
  • go.mod is excluded by none and included by none
  • go.sum is excluded by !**/*.sum and included by none
📒 Files selected for processing (15)
  • cmd/crank/beta/validate/validate_test.go (3 hunks)
  • cmd/crossplane/core/core.go (1 hunks)
  • internal/controller/apiextensions/claim/connection.go (1 hunks)
  • internal/controller/apiextensions/claim/syncer_csa.go (1 hunks)
  • internal/controller/apiextensions/composite/reconciler.go (1 hunks)
  • internal/controller/apiextensions/definition/reconciler.go (3 hunks)
  • internal/controller/apiextensions/offered/reconciler.go (2 hunks)
  • internal/controller/pkg/manager/reconciler.go (2 hunks)
  • internal/controller/pkg/revision/reconciler.go (1 hunks)
  • internal/controller/pkg/runtime/runtime_function.go (3 hunks)
  • internal/controller/pkg/runtime/runtime_provider.go (4 hunks)
  • internal/controller/rbac/definition/reconciler.go (1 hunks)
  • internal/controller/rbac/provider/binding/reconciler.go (1 hunks)
  • internal/controller/rbac/provider/roles/reconciler.go (1 hunks)
  • internal/engine/engine.go (1 hunks)
🧰 Additional context used
📓 Path-based instructions (4)
**/*.go

⚙️ CodeRabbit configuration file

**/*.go: Enforce Crossplane-specific patterns: Use crossplane-runtime/pkg/errors
for wrapping. Check variable naming (short for local scope, descriptive
for wider scope). Ensure 'return early' pattern. Verify error scoping
(declare in conditionals when possible). For nolint directives, require
specific linter names and explanations. CRITICAL: Ensure all error
messages are meaningful to end users, not just developers - avoid
technical jargon, include context about what the user was trying to do,
and suggest next steps when possible.

Files:

  • internal/controller/rbac/provider/roles/reconciler.go
  • internal/controller/rbac/definition/reconciler.go
  • internal/controller/pkg/runtime/runtime_provider.go
  • internal/controller/rbac/provider/binding/reconciler.go
  • internal/controller/apiextensions/claim/connection.go
  • cmd/crank/beta/validate/validate_test.go
  • internal/controller/pkg/revision/reconciler.go
  • internal/controller/apiextensions/claim/syncer_csa.go
  • internal/controller/apiextensions/composite/reconciler.go
  • internal/engine/engine.go
  • cmd/crossplane/core/core.go
  • internal/controller/pkg/manager/reconciler.go
  • internal/controller/apiextensions/offered/reconciler.go
  • internal/controller/apiextensions/definition/reconciler.go
  • internal/controller/pkg/runtime/runtime_function.go
**/internal/controller/**

⚙️ CodeRabbit configuration file

**/internal/controller/**: Review controller logic for proper reconciliation patterns, error
handling, and resource management. Pay special attention to conditions
and events: Conditions must be actionable for users (not developers),
stable/deterministic, with proper Type/Reason/Message format. Events
only when something actually happens, with specific details about what
changed. No transient errors in conditions/events. All error messages
must be meaningful to end users - include context about what
resource/operation failed and why.

Files:

  • internal/controller/rbac/provider/roles/reconciler.go
  • internal/controller/rbac/definition/reconciler.go
  • internal/controller/pkg/runtime/runtime_provider.go
  • internal/controller/rbac/provider/binding/reconciler.go
  • internal/controller/apiextensions/claim/connection.go
  • internal/controller/pkg/revision/reconciler.go
  • internal/controller/apiextensions/claim/syncer_csa.go
  • internal/controller/apiextensions/composite/reconciler.go
  • internal/controller/pkg/manager/reconciler.go
  • internal/controller/apiextensions/offered/reconciler.go
  • internal/controller/apiextensions/definition/reconciler.go
  • internal/controller/pkg/runtime/runtime_function.go
**/*_test.go

⚙️ CodeRabbit configuration file

**/*_test.go: Enforce table-driven test structure: PascalCase test names (no
underscores), args/want pattern, use cmp.Diff with
cmpopts.EquateErrors() for error testing. Check for proper test case
naming and reason fields. Ensure no third-party test frameworks (no
Ginkgo, Gomega, Testify).

Files:

  • cmd/crank/beta/validate/validate_test.go
**/cmd/**

⚙️ CodeRabbit configuration file

**/cmd/**: Review CLI commands for proper flag handling, help text, and error
messages. Ensure commands follow Crossplane CLI conventions. Ask about
backward compatibility and user experience. CLI error messages must be
especially user-friendly - avoid internal error details, provide
actionable guidance.

Files:

  • cmd/crank/beta/validate/validate_test.go
  • cmd/crossplane/core/core.go
🧬 Code graph analysis (7)
internal/controller/pkg/runtime/runtime_provider.go (1)
internal/initializer/tls.go (6)
  • NewTLSCertificateGenerator (108-121)
  • RootCACertSecretName (53-53)
  • TLSCertificateGeneratorWithOwner (85-89)
  • TLSCertificateGeneratorWithServerSecretName (92-97)
  • DNSNamesForService (379-385)
  • TLSCertificateGeneratorWithClientSecretName (100-105)
internal/controller/pkg/revision/reconciler.go (4)
internal/controller/apiextensions/claim/reconciler.go (1)
  • client (179-197)
internal/controller/pkg/resolver/reconciler.go (1)
  • client (145-156)
internal/controller/apiextensions/composition/reconciler.go (1)
  • client (115-120)
internal/controller/apiextensions/claim/reconciler_test.go (1)
  • client (47-52)
internal/controller/apiextensions/composite/reconciler.go (1)
internal/controller/apiextensions/composite/api.go (1)
  • NewAPIRevisionFetcher (150-152)
internal/engine/engine.go (1)
internal/controller/apiextensions/controller/options.go (1)
  • Options (28-36)
internal/controller/apiextensions/offered/reconciler.go (2)
internal/controller/apiextensions/claim/reconciler.go (2)
  • Finalizer (211-213)
  • client (179-197)
internal/controller/pkg/resolver/reconciler.go (1)
  • client (145-156)
internal/controller/apiextensions/definition/reconciler.go (2)
internal/controller/apiextensions/composite/api.go (1)
  • NewEnforcedCompositionSelector (330-332)
internal/controller/apiextensions/composition/reconciler.go (2)
  • r (123-235)
  • client (115-120)
internal/controller/pkg/runtime/runtime_function.go (1)
internal/initializer/tls.go (5)
  • NewTLSCertificateGenerator (108-121)
  • RootCACertSecretName (53-53)
  • TLSCertificateGeneratorWithServerSecretName (92-97)
  • DNSNamesForService (379-385)
  • TLSCertificateGeneratorWithOwner (85-89)
🔍 Remote MCP

.

This context validates that the PR addresses legitimate API compatibility requirements introduced by the controller-runtime upgrade, with the changes following expected migration patterns for such substantial version jumps.

🔇 Additional comments (16)
cmd/crank/beta/validate/validate_test.go (1)

277-279: Nice cleanup: rely on type inference for ptr.To(true).

Using ptr.To(true) here is correct and idiomatic; keeping explicit ptr.Toint64 where needed for JSONSchemaProps MaxLength is also right.

Also applies to: 585-587, 831-832

internal/controller/rbac/provider/roles/reconciler.go (1)

286-290: Apply via embedded Applicator is correct.

Routing through r.client.Applicator.Apply aligns with the injected APIUpdatingApplicator in NewReconciler; semantics unchanged.

internal/controller/apiextensions/claim/syncer_csa.go (1)

165-168: LGTM: switched to Applicator.Apply.

Keeps AllowUpdateIf logic and existing error handling intact.

internal/controller/apiextensions/claim/connection.go (1)

83-92: LGTM: use Applicator.Apply for secret propagation.

Predicate with cmpopts.EquateEmpty avoids no-op updates; IsNotAllowed path handled.

internal/controller/rbac/definition/reconciler.go (1)

189-193: LGTM: apply through Applicator for RBAC roles.

Consistent with the controller’s ClientApplicator wiring and other RBAC controllers.

internal/controller/pkg/manager/reconciler.go (2)

485-495: LGTM: deactivate old revisions via Applicator.Apply.

Matches APIPatchingApplicator semantics and existing conflict handling.


561-570: LGTM: create/update target revision via Applicator.Apply.

OwnerRef + MustBeControllableBy preserved; error wrapping and events unchanged.

internal/controller/pkg/runtime/runtime_function.go (1)

112-113: LGTM: pass raw client to TLS generator

Using h.client.Client matches the updated initializer.Run API.

internal/controller/rbac/provider/binding/reconciler.go (1)

223-223: LGTM: move to Applicator.Apply

Matches repo-wide migration and preserves AllowUpdateIf semantics.

internal/controller/pkg/runtime/runtime_provider.go (1)

113-115: LGTM: pass raw client to TLS generator

Consistent with initializer.Run expectations.

internal/controller/apiextensions/composite/reconciler.go (1)

431-432: LGTM: pass cached client directly to NewAPIRevisionFetcher

Matches the updated constructor and reduces wrapper churn.

internal/controller/apiextensions/offered/reconciler.go (2)

225-225: LGTM: NewAPIFinalizer now uses client.Client

Constructor usage aligns with new signature.


435-436: LGTM: switch to Applicator.Apply for CRD

Consistent with repo-wide Apply path and enables StoreCurrentRV usage above.

internal/controller/apiextensions/definition/reconciler.go (3)

261-261: LGTM: pass ca.Client to NewAPIFinalizer

Tracks the updated API surface.


474-474: LGTM: Applicator.Apply for CRD

Keeps Apply semantics consistent and supports RV tracking.


535-538: LGTM: NewEnforcedCompositionSelector now takes client.Client

Constructor usage looks correct.

@github-actions
Copy link
Copy Markdown

Crossplane does not currently have enough maintainers to address every issue and pull request. This pull request has been automatically marked as stale because it has had no activity in the last 90 days. It will be closed in 14 days if no further activity occurs. Adding a comment starting with /fresh will mark this PR as not stale.

@github-actions github-actions bot added the stale label Dec 11, 2025
@github-actions github-actions bot closed this Dec 26, 2025
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant