Skip to content
Merged
Show file tree
Hide file tree
Changes from 13 commits
Commits
Show all changes
28 commits
Select commit Hold shift + click to select a range
6f6ca05
feat: added multi-cluster runtime
OlegErshov Oct 1, 2025
b6fa6db
chore: removed commented code
OlegErshov Oct 1, 2025
4252595
chore: refactored imports
OlegErshov Oct 2, 2025
d39792c
feat: used mccontext and added condition manager
OlegErshov Oct 2, 2025
b8ecc8d
chore: removed completed todo
OlegErshov Oct 2, 2025
a791d78
feat: added initilizer's clean up using initializing provider, remove…
OlegErshov Oct 3, 2025
8bb6eff
feat: made initializer name configurable
OlegErshov Oct 3, 2025
0d464da
Merge branch 'main' into feat/multi-cluster-runtime
OlegErshov Oct 3, 2025
eeee7ce
fix: fixed merge errors
OlegErshov Oct 3, 2025
20edb47
chore: showcase mcruntime integration
aaronschweig Oct 7, 2025
a9436cd
fix: startup of manager
aaronschweig Oct 7, 2025
825f8cb
fix.
aaronschweig Oct 7, 2025
8ef79da
chore: updated model generated controller
OlegErshov Oct 7, 2025
1006d1e
Update internal/subroutine/remove_initializer.go
aaronschweig Oct 7, 2025
88c5326
feat: used multi-cluster runtime in operator contoller
OlegErshov Oct 8, 2025
32b9602
updated go version
OlegErshov Oct 8, 2025
790482c
updated go version in docker file
OlegErshov Oct 8, 2025
e1e48c3
feat: removed specific lc clients
OlegErshov Oct 9, 2025
37e4cd3
feat: updated tests
OlegErshov Oct 9, 2025
51ba5a7
chore: format fix
OlegErshov Oct 9, 2025
7b58513
Merge branch 'main' into feat/multi-cluster-runtime
OlegErshov Oct 9, 2025
b6d3bfa
fix: fixed merge errors
OlegErshov Oct 9, 2025
da0c6e5
improve test coverage
OlegErshov Oct 9, 2025
51299d3
improve tracehold for remove initializer subroutine
OlegErshov Oct 9, 2025
98124c4
fix: fixed errors related to pointing wrong logical cluster
OlegErshov Oct 10, 2025
26f5b3c
fix: fixed tests
OlegErshov Oct 10, 2025
c719876
fix: removed wrong file
OlegErshov Oct 10, 2025
24128f8
feat: support additional redirectURLs for the clients (#99)
aaronschweig Oct 10, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
30 changes: 26 additions & 4 deletions cmd/initializer.go
Original file line number Diff line number Diff line change
Expand Up @@ -6,24 +6,29 @@ import (

helmv2 "github.com/fluxcd/helm-controller/api/v2"
sourcev1 "github.com/fluxcd/source-controller/api/v1"

"github.com/kcp-dev/logicalcluster/v3"
"github.com/kcp-dev/multicluster-provider/initializingworkspaces"
pmcontext "github.com/platform-mesh/golang-commons/context"
"github.com/spf13/cobra"
"k8s.io/apimachinery/pkg/runtime"
utilruntime "k8s.io/apimachinery/pkg/util/runtime"
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/kcp"
"sigs.k8s.io/controller-runtime/pkg/metrics/server"

"github.com/platform-mesh/security-operator/internal/controller"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"
)

var initializerCmd = &cobra.Command{
Use: "initializer",
Short: "FGA initializer for the organization workspacetype",
RunE: func(cmd *cobra.Command, args []string) error {
ctx, _, shutdown := pmcontext.StartContext(log, appCfg, defaultCfg.ShutdownTimeout)
defer shutdown()

mgrCfg := ctrl.GetConfigOrDie()

Expand All @@ -50,7 +55,17 @@ var initializerCmd = &cobra.Command{
}
mgrOpts.LeaderElectionConfig = inClusterCfg
}
mgr, err := kcp.NewClusterAwareManager(mgrCfg, mgrOpts)

provider, err := initializingworkspaces.New(mgrCfg, initializingworkspaces.Options{
InitializerName: appCfg.InitializerName,
Scheme: mgrOpts.Scheme,
})
if err != nil {
log.Error().Err(err).Msg("unable to construct cluster provider")
os.Exit(1)
Comment on lines +64 to +65

Choose a reason for hiding this comment

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

🟡 Lets replace it witth log.Fatal() which does basically the same(plus some additional flushing), but it will have more severe log level and is more relevant to this situation.

}

mgr, err := mcmanager.New(mgrCfg, provider, mgrOpts)
if err != nil {
setupLog.Error(err, "Failed to create manager")
os.Exit(1)
Expand All @@ -60,7 +75,7 @@ var initializerCmd = &cobra.Command{
utilruntime.Must(sourcev1.AddToScheme(runtimeScheme))
utilruntime.Must(helmv2.AddToScheme(runtimeScheme))

orgClient, err := logicalClusterClientFromKey(mgr, log)(logicalcluster.Name("root:orgs"))
orgClient, err := logicalClusterClientFromKey(mgr.GetLocalManager(), log)(logicalcluster.Name("root:orgs"))
if err != nil {
setupLog.Error(err, "Failed to create org client")
os.Exit(1)
Expand All @@ -78,7 +93,8 @@ var initializerCmd = &cobra.Command{
os.Exit(1)
}

if err := controller.NewLogicalClusterReconciler(log, mgrCfg, mgr.GetClient(), orgClient, appCfg, inClusterClient).SetupWithManager(mgr, defaultCfg, log); err != nil {
if err := controller.NewLogicalClusterReconciler(log, orgClient, appCfg, inClusterClient, mgr).
SetupWithManager(mgr, defaultCfg); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "LogicalCluster")
os.Exit(1)
}
Expand All @@ -92,6 +108,12 @@ var initializerCmd = &cobra.Command{
os.Exit(1)
}

go func() {
if err := provider.Run(ctx, mgr); err != nil {
log.Fatal().Err(err).Msg("unable to run provider")
}
}()

setupLog.Info("starting manager")

return mgr.Start(ctrl.SetupSignalHandler())
Expand Down
37 changes: 29 additions & 8 deletions cmd/model_generator.go
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,9 @@ package cmd
import (
"context"
"crypto/tls"
"fmt"

"github.com/kcp-dev/multicluster-provider/apiexport"
platformeshcontext "github.com/platform-mesh/golang-commons/context"
appsv1 "k8s.io/api/apps/v1"

Expand All @@ -13,9 +15,9 @@ import (
"k8s.io/client-go/rest"
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/kcp"
"sigs.k8s.io/controller-runtime/pkg/manager"
"sigs.k8s.io/controller-runtime/pkg/metrics/server"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"

securityv1alpha1 "github.com/platform-mesh/security-operator/api/v1alpha1"
"github.com/platform-mesh/security-operator/internal/controller"
Expand Down Expand Up @@ -56,18 +58,31 @@ var modelGeneratorCmd = &cobra.Command{
}
mgrOpts.LeaderElectionConfig = inClusterCfg
}
runtimeScheme := runtime.NewScheme()
utilruntime.Must(appsv1.AddToScheme(runtimeScheme))
utilruntime.Must(securityv1alpha1.AddToScheme(runtimeScheme))

mgr, err := kcp.NewClusterAwareManager(cfg, mgrOpts)
if mgrOpts.Scheme == nil {
log.Error().Err(fmt.Errorf("scheme should not be nil")).Msg("scheme should not be nil")
return fmt.Errorf("scheme should not be nil")
}
Comment on lines +61 to +68
Copy link

Choose a reason for hiding this comment

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

⚠️ Potential issue | 🟠 Major

Redundant scheme initialization and check.

A new runtimeScheme is created and populated at lines 61-63, but it's never assigned to mgrOpts.Scheme. Line 38 already sets mgrOpts.Scheme = scheme (presumably a package-level variable). The nil-check at lines 65-68 validates mgrOpts.Scheme, not runtimeScheme.

Apply this diff to fix the scheme initialization:

-		runtimeScheme := runtime.NewScheme()
-		utilruntime.Must(appsv1.AddToScheme(runtimeScheme))
-		utilruntime.Must(securityv1alpha1.AddToScheme(runtimeScheme))
-
 		if mgrOpts.Scheme == nil {
 			log.Error().Err(fmt.Errorf("scheme should not be nil")).Msg("scheme should not be nil")
 			return fmt.Errorf("scheme should not be nil")
 		}

Or, if you intended to use the new scheme:

 		runtimeScheme := runtime.NewScheme()
 		utilruntime.Must(appsv1.AddToScheme(runtimeScheme))
 		utilruntime.Must(securityv1alpha1.AddToScheme(runtimeScheme))
+		mgrOpts.Scheme = runtimeScheme

 		if mgrOpts.Scheme == nil {
📝 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.

Suggested change
runtimeScheme := runtime.NewScheme()
utilruntime.Must(appsv1.AddToScheme(runtimeScheme))
utilruntime.Must(securityv1alpha1.AddToScheme(runtimeScheme))
mgr, err := kcp.NewClusterAwareManager(cfg, mgrOpts)
if mgrOpts.Scheme == nil {
log.Error().Err(fmt.Errorf("scheme should not be nil")).Msg("scheme should not be nil")
return fmt.Errorf("scheme should not be nil")
}
if mgrOpts.Scheme == nil {
log.Error().Err(fmt.Errorf("scheme should not be nil")).Msg("scheme should not be nil")
return fmt.Errorf("scheme should not be nil")
}
🤖 Prompt for AI Agents
In cmd/model_generator.go around lines 61-68, the code creates and populates a
new runtimeScheme but never assigns it to mgrOpts.Scheme while the nil-check
validates mgrOpts.Scheme; either remove the redundant runtimeScheme creation
(lines 61-63) and keep the existing mgrOpts.Scheme set earlier, or if you
intended to use the new scheme, assign runtimeScheme to mgrOpts.Scheme before
the nil-check and then add the API registrations to that scheme so the check and
registrations operate on the same object.


provider, err := apiexport.New(cfg, apiexport.Options{
Scheme: mgrOpts.Scheme,
})
if err != nil {
setupLog.Error(err, "unable to setup manager")
log.Error().Err(err).Msg("Failed to create apiexport provider")
return err
}

runtimeScheme := runtime.NewScheme()
utilruntime.Must(appsv1.AddToScheme(runtimeScheme))
utilruntime.Must(securityv1alpha1.AddToScheme(runtimeScheme))
mgr, err := mcmanager.New(cfg, provider, mgrOpts)
if err != nil {
log.Error().Err(err).Msg("Failed to create manager")
return err
}

if err := controller.NewAPIBindingReconciler(mgr.GetClient(), log, logicalClusterClientFromKey(mgr, log)).
SetupWithManager(mgr, log, defaultCfg); err != nil {
if err := controller.NewAPIBindingReconciler(log, mgr).
SetupWithManager(mgr, defaultCfg); err != nil {
setupLog.Error(err, "unable to create controller", "controller", "Resource")
return err
}
Expand All @@ -81,6 +96,12 @@ var modelGeneratorCmd = &cobra.Command{
return err
}

go func() {
if err := provider.Run(ctx, mgr); err != nil {
log.Fatal().Err(err).Msg("unable to run provider")
}
}()

setupLog.Info("starting manager")
if err := mgr.Start(ctrl.SetupSignalHandler()); err != nil {
setupLog.Error(err, "problem running manager")
Expand Down
30 changes: 23 additions & 7 deletions cmd/operator.go
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@ import (
apisv1alpha1 "github.com/kcp-dev/kcp/sdk/apis/apis/v1alpha1"
kcpcorev1alpha1 "github.com/kcp-dev/kcp/sdk/apis/core/v1alpha1"
"github.com/kcp-dev/logicalcluster/v3"
"github.com/kcp-dev/multicluster-provider/apiexport"
accountsv1alpha1 "github.com/platform-mesh/account-operator/api/v1alpha1"
"google.golang.org/grpc"
"google.golang.org/grpc/credentials/insecure"
Expand All @@ -23,8 +24,9 @@ import (
ctrl "sigs.k8s.io/controller-runtime"
"sigs.k8s.io/controller-runtime/pkg/client"
"sigs.k8s.io/controller-runtime/pkg/healthz"
"sigs.k8s.io/controller-runtime/pkg/kcp"

metricsserver "sigs.k8s.io/controller-runtime/pkg/metrics/server"
mcmanager "sigs.k8s.io/multicluster-runtime/pkg/manager"

openfgav1 "github.com/openfga/api/proto/openfga/v1"
platformeshcontext "github.com/platform-mesh/golang-commons/context"
Expand All @@ -43,6 +45,7 @@ var (
scheme = runtime.NewScheme()
)

// TODO try to use multi-cluster runtime for client creation

Choose a reason for hiding this comment

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

🟢 Is it a leftover?

func logicalClusterClientFromKey(mgr ctrl.Manager, log *logger.Logger) subroutine.NewLogicalClusterClientFunc {
return func(clusterKey logicalcluster.Name) (client.Client, error) {
cfg := rest.CopyConfig(mgr.GetConfig())
Expand Down Expand Up @@ -110,9 +113,22 @@ var operatorCmd = &cobra.Command{
mgrOpts.LeaderElectionConfig = inClusterCfg
}

mgr, err := kcp.NewClusterAwareManager(cfg, mgrOpts)
if mgrOpts.Scheme == nil {
log.Error().Err(fmt.Errorf("scheme should not be nil")).Msg("scheme should not be nil")
return fmt.Errorf("scheme should not be nil")
}

provider, err := apiexport.New(cfg, apiexport.Options{
Scheme: mgrOpts.Scheme,
})
if err != nil {
setupLog.Error(err, "unable to construct cluster provider")
return err
}

mgr, err := mcmanager.New(cfg, provider, mgrOpts)
if err != nil {
log.Error().Err(err).Msg("unable to start manager")
setupLog.Error(err, "Failed to create manager")
return err
}

Expand All @@ -124,14 +140,14 @@ var operatorCmd = &cobra.Command{

fga := openfgav1.NewOpenFGAServiceClient(conn)

if err = controller.NewStoreReconciler(log, mgr.GetClient(), fga, logicalClusterClientFromKey(mgr, log)).
SetupWithManager(mgr, defaultCfg, log); err != nil {
if err = controller.NewStoreReconciler(log, mgr.GetLocalManager().GetClient(), fga, logicalClusterClientFromKey(mgr.GetLocalManager(), log), mgr).
SetupWithManager(mgr.GetLocalManager(), defaultCfg, log); err != nil {
log.Error().Err(err).Str("controller", "store").Msg("unable to create controller")
return err
}
if err = controller.
NewAuthorizationModelReconciler(log, mgr.GetClient(), fga, logicalClusterClientFromKey(mgr, log)).
SetupWithManager(mgr, defaultCfg, log); err != nil {
NewAuthorizationModelReconciler(log, mgr.GetLocalManager().GetClient(), fga, logicalClusterClientFromKey(mgr.GetLocalManager(), log), mgr, provider).
SetupWithManager(mgr.GetLocalManager(), defaultCfg, log); err != nil {
log.Error().Err(err).Str("controller", "authorizationmodel").Msg("unable to create controller")
return err
}
Expand Down
88 changes: 29 additions & 59 deletions go.mod
Original file line number Diff line number Diff line change
Expand Up @@ -2,93 +2,65 @@ module github.com/platform-mesh/security-operator

go 1.24.5
Copy link
Contributor

Choose a reason for hiding this comment

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

Maybe lets use the opportunity and upgrade to the latest go version in this PR, as usual a go upgrade should not be an issue

Copy link
Contributor Author

Choose a reason for hiding this comment

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

sure, I've done it


replace sigs.k8s.io/controller-runtime => github.com/kcp-dev/controller-runtime v0.19.0-kcp.1

replace (
k8s.io/api => github.com/kcp-dev/kubernetes/staging/src/k8s.io/api v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/apimachinery => github.com/kcp-dev/kubernetes/staging/src/k8s.io/apimachinery v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/apiserver => github.com/kcp-dev/kubernetes/staging/src/k8s.io/apiserver v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/client-go => github.com/kcp-dev/kubernetes/staging/src/k8s.io/client-go v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/cloud-provider => github.com/kcp-dev/kubernetes/staging/src/k8s.io/cloud-provider v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/cluster-bootstrap => github.com/kcp-dev/kubernetes/staging/src/k8s.io/cluster-bootstrap v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/code-generator => github.com/kcp-dev/kubernetes/staging/src/k8s.io/code-generator v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/component-base => github.com/kcp-dev/kubernetes/staging/src/k8s.io/component-base v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/component-helpers => github.com/kcp-dev/kubernetes/staging/src/k8s.io/component-helpers v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/controller-manager => github.com/kcp-dev/kubernetes/staging/src/k8s.io/controller-manager v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/cri-api => github.com/kcp-dev/kubernetes/staging/src/k8s.io/cri-api v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/cri-client => github.com/kcp-dev/kubernetes/staging/src/k8s.io/cri-client v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/csi-translation-lib => github.com/kcp-dev/kubernetes/staging/src/k8s.io/csi-translation-lib v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/dynamic-resource-allocation => github.com/kcp-dev/kubernetes/staging/src/k8s.io/dynamic-resource-allocation v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/endpointslice => github.com/kcp-dev/kubernetes/staging/src/k8s.io/endpointslice v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/externaljwt => github.com/kcp-dev/kubernetes/staging/src/k8s.io/externaljwt v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kms => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kms v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kube-aggregator => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-aggregator v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kube-controller-manager => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-controller-manager v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kube-proxy => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-proxy v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kube-scheduler => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kube-scheduler v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kubectl => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kubectl v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kubelet => github.com/kcp-dev/kubernetes/staging/src/k8s.io/kubelet v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/kubernetes => github.com/kcp-dev/kubernetes v1.32.3
k8s.io/metrics => github.com/kcp-dev/kubernetes/staging/src/k8s.io/metrics v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/mount-utils => github.com/kcp-dev/kubernetes/staging/src/k8s.io/mount-utils v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/pod-security-admission => github.com/kcp-dev/kubernetes/staging/src/k8s.io/pod-security-admission v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/sample-apiserver => github.com/kcp-dev/kubernetes/staging/src/k8s.io/sample-apiserver v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/sample-cli-plugin => github.com/kcp-dev/kubernetes/staging/src/k8s.io/sample-cli-plugin v0.0.0-20250816165010-ffe1d7c8649b
k8s.io/sample-controller => github.com/kcp-dev/kubernetes/staging/src/k8s.io/sample-controller v0.0.0-20250816165010-ffe1d7c8649b
)

require (
github.com/go-logr/logr v1.4.3
github.com/kcp-dev/kcp/sdk v0.28.1-0.20250915073746-2b42b96efc54
github.com/kcp-dev/logicalcluster/v3 v3.0.5
github.com/kcp-dev/multicluster-provider v0.0.0-20250827085327-2b5ca378b7b4
github.com/openfga/api/proto v0.0.0-20250909173124-0ac19aac54f2
github.com/openfga/language/pkg/go v0.2.0-beta.2.0.20250428093642-7aeebe78bbfe
github.com/platform-mesh/account-operator v0.3.1
github.com/platform-mesh/golang-commons v0.1.32
github.com/platform-mesh/golang-commons v0.4.3
github.com/spf13/cobra v1.10.1
github.com/spf13/viper v1.21.0
github.com/stretchr/testify v1.11.1
google.golang.org/grpc v1.75.1
google.golang.org/protobuf v1.36.10
k8s.io/api v0.33.3
k8s.io/apiextensions-apiserver v0.33.3
k8s.io/apimachinery v0.33.3
k8s.io/client-go v0.33.3
google.golang.org/protobuf v1.36.9
k8s.io/api v0.34.1
k8s.io/apiextensions-apiserver v0.34.0
k8s.io/apimachinery v0.34.1
k8s.io/client-go v0.34.1
sigs.k8s.io/controller-runtime v0.22.1
sigs.k8s.io/multicluster-runtime v0.21.0-alpha.9

)

require (
github.com/evanphx/json-patch v5.9.11+incompatible // indirect
github.com/fluxcd/pkg/apis/acl v0.7.0 // indirect
github.com/fluxcd/pkg/apis/kustomize v1.10.0 // indirect
github.com/fluxcd/pkg/apis/meta v1.12.0 // indirect
github.com/google/btree v1.1.3 // indirect
go.yaml.in/yaml/v3 v3.0.4 // indirect
golang.org/x/sync v0.17.0 // indirect
k8s.io/kube-openapi v0.0.0-20250710124328-f3f2b991d03b // indirect
sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
)

require (
github.com/99designs/gqlgen v0.17.78 // indirect
github.com/99designs/gqlgen v0.17.81 // indirect
github.com/antlr4-go/antlr/v4 v4.13.1 // indirect
github.com/beorn7/perks v1.0.1 // indirect
github.com/cenkalti/backoff/v5 v5.0.3 // indirect
github.com/cespare/xxhash/v2 v2.3.0 // indirect
github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect
github.com/emicklei/go-restful/v3 v3.12.1 // indirect
github.com/emicklei/go-restful/v3 v3.12.2 // indirect
github.com/envoyproxy/protoc-gen-validate v1.2.1 // indirect
github.com/evanphx/json-patch/v5 v5.9.11 // indirect
github.com/fluxcd/helm-controller/api v1.3.0
github.com/fluxcd/source-controller/api v1.6.2
github.com/fsnotify/fsnotify v1.9.0 // indirect
github.com/fxamacker/cbor/v2 v2.8.0 // indirect
github.com/getsentry/sentry-go v0.35.2 // indirect
github.com/go-jose/go-jose/v4 v4.1.1 // indirect
github.com/fxamacker/cbor/v2 v2.9.0 // indirect
github.com/getsentry/sentry-go v0.35.3 // indirect
github.com/go-jose/go-jose/v4 v4.1.2 // indirect
github.com/go-logr/stdr v1.2.2 // indirect
github.com/go-logr/zerologr v1.2.3 // indirect
github.com/go-openapi/jsonpointer v0.21.1 // indirect
github.com/go-openapi/jsonreference v0.21.0 // indirect
github.com/go-openapi/swag v0.23.1 // indirect
github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
github.com/gogo/protobuf v1.3.2 // indirect
github.com/google/gnostic-models v0.6.9 // indirect
github.com/google/gnostic-models v0.7.0 // indirect
github.com/google/go-cmp v0.7.0 // indirect
github.com/google/uuid v1.6.0 // indirect
github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
Expand All @@ -99,21 +71,21 @@ require (
github.com/josharian/intern v1.0.0 // indirect
github.com/json-iterator/go v1.1.12 // indirect
github.com/kcp-dev/apimachinery/v2 v2.0.1-0.20250728122101-adbf20db3e51 // indirect
github.com/mailru/easyjson v0.9.0 // indirect
github.com/mailru/easyjson v0.9.0 // indirect; indir k8s.io/api v0.34.0
github.com/mattn/go-colorable v0.1.14 // indirect
github.com/mattn/go-isatty v0.0.20 // indirect
github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect
github.com/modern-go/reflect2 v1.0.2 // indirect
github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect
github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect
github.com/onsi/gomega v1.36.2 // indirect
github.com/pelletier/go-toml/v2 v2.2.4 // indirect
github.com/pkg/errors v0.9.1 // indirect
github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // indirect
github.com/prometheus/client_golang v1.23.0 // indirect
github.com/prometheus/client_golang v1.23.2 // indirect
github.com/prometheus/client_model v0.6.2 // indirect
github.com/prometheus/common v0.65.0 // indirect
github.com/prometheus/common v0.66.1 // indirect
github.com/prometheus/procfs v0.16.1 // indirect
github.com/rs/zerolog v1.34.0 // indirect
github.com/rs/zerolog v1.34.0
github.com/sagikazarmark/locafero v0.11.0 // indirect
github.com/sosodev/duration v1.3.1 // indirect
github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // indirect
Expand All @@ -134,13 +106,13 @@ require (
go.opentelemetry.io/otel/trace v1.38.0 // indirect
go.opentelemetry.io/proto/otlp v1.8.0 // indirect
go.yaml.in/yaml/v2 v2.4.2 // indirect
golang.org/x/crypto v0.41.0 // indirect
golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
golang.org/x/net v0.43.0 // indirect
golang.org/x/crypto v0.42.0 // indirect
golang.org/x/exp v0.0.0-20250911091902-df9299821621 // indirect
golang.org/x/net v0.44.0 // indirect
golang.org/x/oauth2 v0.31.0 // indirect
golang.org/x/sys v0.36.0 // indirect
golang.org/x/term v0.34.0 // indirect
golang.org/x/text v0.28.0 // indirect
golang.org/x/term v0.35.0 // indirect
golang.org/x/text v0.29.0 // indirect
golang.org/x/time v0.11.0 // indirect
gomodules.xyz/jsonpatch/v2 v2.5.0 // indirect
google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 // indirect
Expand All @@ -149,10 +121,8 @@ require (
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
k8s.io/klog/v2 v2.130.1 // indirect
k8s.io/kube-openapi v0.0.0-20250318190949-c8a335a9a2ff // indirect
k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect
sigs.k8s.io/randfill v1.0.0 // indirect
sigs.k8s.io/structured-merge-diff/v4 v4.7.0 // indirect
sigs.k8s.io/yaml v1.6.0
)
Loading