Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package kor for openSUSE:Factory checked in 
at 2026-09-19 22:22:32
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/kor (Old)
 and      /work/SRC/openSUSE:Factory/.kor.new.383539 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "kor"

Sat Sep 19 22:22:32 2026 rev:35 rq:1378992 version:0.6.9

Changes:
--------
--- /work/SRC/openSUSE:Factory/kor/kor.changes  2026-04-23 17:12:28.496087178 
+0200
+++ /work/SRC/openSUSE:Factory/.kor.new.383539/kor.changes      2026-09-19 
22:23:53.409480262 +0200
@@ -1,0 +2,21 @@
+Sat Sep 19 09:05:39 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 0.6.9:
+  * Fix swapped metric labels when grouping orphaned resources by
+    resource (#619)
+  * chore(deps): bump k8s.io/apiextensions-apiserver from 0.36.3 to
+    0.37.0 (#616)
+  * chore(deps): bump github.com/jarcoal/httpmock from 1.4.1 to
+    1.4.2 (#615)
+  * chore(deps): bump github.com/prometheus/client_golang (#612)
+  * chore(deps): bump k8s.io/apiextensions-apiserver from 0.36.2 to
+    0.36.3 (#614)
+  * chore(deps): bump golang.org/x/net from 0.49.0 to 0.55.0 (#610)
+  * fix(clusterroles): don't ParseBool aggregation label values
+    (#609)
+  * chore(deps): bump k8s.io/apiextensions-apiserver from 0.36.1 to
+    0.36.2 (#604)
+  * fix: use stdlib slices for 0.36.1 and align Go 1.26 build
+    environments (#603)
+
+-------------------------------------------------------------------

Old:
----
  kor-0.6.8.obscpio

New:
----
  kor-0.6.9.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ kor.spec ++++++
--- /var/tmp/diff_new_pack.uQH6Fr/_old  2026-09-19 22:23:54.572528769 +0200
+++ /var/tmp/diff_new_pack.uQH6Fr/_new  2026-09-19 22:23:54.573528810 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           kor
-Version:        0.6.8
+Version:        0.6.9
 Release:        0
 Summary:        Tool to discover unused Kubernetes Resources
 License:        MIT

++++++ _service ++++++
--- /var/tmp/diff_new_pack.uQH6Fr/_old  2026-09-19 22:23:54.600529936 +0200
+++ /var/tmp/diff_new_pack.uQH6Fr/_new  2026-09-19 22:23:54.603530061 +0200
@@ -1,9 +1,9 @@
 <services>
   <service name="obs_scm" mode="manual">
-    <param name="url">https://github.com/yonahd/kor</param>
+    <param name="url">https://github.com/yonahd/kor.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v0.6.8</param>
+    <param name="revision">refs/tags/v0.6.9</param>
     <param name="match-tag">v*</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.uQH6Fr/_old  2026-09-19 22:23:54.622530854 +0200
+++ /var/tmp/diff_new_pack.uQH6Fr/_new  2026-09-19 22:23:54.626531021 +0200
@@ -1,6 +1,8 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/yonahd/kor</param>
-              <param 
name="changesrevision">d6986c937ce72d331fef965c1b103fab69b4ea93</param></service></servicedata>
+              <param 
name="changesrevision">d6986c937ce72d331fef965c1b103fab69b4ea93</param></service><service
 name="tar_scm">
+                <param name="url">https://github.com/yonahd/kor.git</param>
+              <param 
name="changesrevision">2ac1fcf39ceab83daf39e6e119d2827fe0d9e1ce</param></service></servicedata>
 (No newline at EOF)
 

++++++ kor-0.6.8.obscpio -> kor-0.6.9.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/Dockerfile new/kor-0.6.9/Dockerfile
--- old/kor-0.6.8/Dockerfile    2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/Dockerfile    2026-09-04 10:38:26.000000000 +0200
@@ -1,4 +1,4 @@
-FROM golang:1.25.0 AS builder
+FROM golang:1.26.0 AS builder
 
 WORKDIR /build
 COPY . .
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/go.mod new/kor-0.6.9/go.mod
--- old/kor-0.6.8/go.mod        2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/go.mod        2026-09-04 10:38:26.000000000 +0200
@@ -1,19 +1,19 @@
 module github.com/yonahd/kor
 
-go 1.25.0
+go 1.26.0
 
 require (
        github.com/fatih/color v1.19.0
-       github.com/jarcoal/httpmock v1.4.1
+       github.com/jarcoal/httpmock v1.4.2
        github.com/olekukonko/tablewriter v0.0.5
-       github.com/prometheus/client_golang v1.23.2
+       github.com/prometheus/client_golang v1.24.1
+       github.com/prometheus/client_model v0.6.2
        github.com/spf13/cobra v1.10.2
        github.com/spf13/viper v1.21.0
-       k8s.io/api v0.35.4
-       k8s.io/apiextensions-apiserver v0.35.4
-       k8s.io/apimachinery v0.35.4
-       k8s.io/client-go v0.35.4
-       k8s.io/utils v0.0.0-20251002143259-bc988d571ff4
+       k8s.io/api v0.37.0
+       k8s.io/apiextensions-apiserver v0.37.0
+       k8s.io/apimachinery v0.37.0
+       k8s.io/client-go v0.37.0
        sigs.k8s.io/yaml v1.6.0
 )
 
@@ -21,20 +21,29 @@
        github.com/beorn7/perks v1.0.1 // 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.2 // indirect
+       github.com/emicklei/go-restful/v3 v3.13.0 // indirect
        github.com/fsnotify/fsnotify v1.9.0 // indirect
-       github.com/fxamacker/cbor/v2 v2.9.0 // indirect
+       github.com/fxamacker/cbor/v2 v2.9.1 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
-       github.com/go-openapi/jsonpointer v0.21.0 // indirect
-       github.com/go-openapi/jsonreference v0.20.2 // indirect
-       github.com/go-openapi/swag v0.23.0 // indirect
+       github.com/go-openapi/jsonpointer v1.0.0 // indirect
+       github.com/go-openapi/jsonreference v1.0.0 // indirect
+       github.com/go-openapi/swag v0.27.1 // indirect
+       github.com/go-openapi/swag/cmdutils v0.27.1 // indirect
+       github.com/go-openapi/swag/conv v0.27.1 // indirect
+       github.com/go-openapi/swag/fileutils v0.27.1 // indirect
+       github.com/go-openapi/swag/jsonutils v0.27.1 // indirect
+       github.com/go-openapi/swag/loading v0.27.1 // indirect
+       github.com/go-openapi/swag/mangling v0.27.1 // indirect
+       github.com/go-openapi/swag/netutils v0.27.1 // indirect
+       github.com/go-openapi/swag/pools v0.27.1 // indirect
+       github.com/go-openapi/swag/stringutils v0.27.1 // indirect
+       github.com/go-openapi/swag/typeutils v0.27.1 // indirect
+       github.com/go-openapi/swag/yamlutils v0.27.1 // indirect
        github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
        github.com/google/gnostic-models v0.7.0 // indirect
        github.com/google/uuid v1.6.0 // indirect
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
-       github.com/josharian/intern v1.0.0 // indirect
        github.com/json-iterator/go v1.1.12 // indirect
-       github.com/mailru/easyjson v0.7.7 // indirect
        github.com/mattn/go-colorable v0.1.14 // indirect
        github.com/mattn/go-isatty v0.0.20 // indirect
        github.com/mattn/go-runewidth v0.0.14 // indirect
@@ -42,9 +51,8 @@
        github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // 
indirect
        github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // 
indirect
        github.com/pelletier/go-toml/v2 v2.2.4 // indirect
-       github.com/prometheus/client_model v0.6.2 // indirect
-       github.com/prometheus/common v0.66.1 // indirect
-       github.com/prometheus/procfs v0.16.1 // indirect
+       github.com/prometheus/common v0.70.1 // indirect
+       github.com/prometheus/procfs v0.21.1 // indirect
        github.com/rivo/uniseg v0.4.4 // indirect
        github.com/sagikazarmark/locafero v0.11.0 // indirect
        github.com/sourcegraph/conc v0.3.1-0.20240121214520-5f936abd7ae8 // 
indirect
@@ -53,21 +61,21 @@
        github.com/spf13/pflag v1.0.10 // indirect
        github.com/subosito/gotenv v1.6.0 // indirect
        github.com/x448/float16 v0.8.4 // indirect
-       go.yaml.in/yaml/v2 v2.4.3 // indirect
+       go.yaml.in/yaml/v2 v2.4.4 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/net v0.47.0 // indirect
-       golang.org/x/oauth2 v0.30.0 // indirect
-       golang.org/x/sys v0.42.0 // indirect
-       golang.org/x/term v0.37.0 // indirect
-       golang.org/x/text v0.31.0 // indirect
-       golang.org/x/time v0.9.0 // indirect
-       google.golang.org/protobuf v1.36.8 // indirect
+       golang.org/x/net v0.57.0 // indirect
+       golang.org/x/oauth2 v0.36.0 // indirect
+       golang.org/x/sys v0.47.0 // indirect
+       golang.org/x/term v0.45.0 // indirect
+       golang.org/x/text v0.40.0 // indirect
+       golang.org/x/time v0.15.0 // indirect
+       google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af // 
indirect
        gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
        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-20250910181357-589584f1c912 // indirect
+       k8s.io/klog/v2 v2.140.0 // indirect
+       k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad // indirect
+       k8s.io/utils v0.0.0-20260626114624-be93311217bd // indirect
        sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect
        sigs.k8s.io/randfill v1.0.0 // indirect
-       sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect
+       sigs.k8s.io/structured-merge-diff/v6 v6.4.2 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/go.sum new/kor-0.6.9/go.sum
--- old/kor-0.6.8/go.sum        2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/go.sum        2026-09-04 10:38:26.000000000 +0200
@@ -1,37 +1,58 @@
-github.com/Masterminds/semver/v3 v3.4.0 
h1:Zog+i5UMtVoCU8oKka5P7i9q9HgrJeGzI9SA1Xbatp0=
-github.com/Masterminds/semver/v3 v3.4.0/go.mod 
h1:4V+yj/TJE1HU9XfppCwVMZq3I84lprf4nC11bSS5beM=
 github.com/beorn7/perks v1.0.1 h1:VlbKKnNfV8bJzeqoa4cOKqO6bYr3WgKZxO8Z16+hsOM=
 github.com/beorn7/perks v1.0.1/go.mod 
h1:G2ZrVWU2WbWT9wwq4/hrbKbnv/1ERSJQ0ibhJ6rlkpw=
 github.com/cespare/xxhash/v2 v2.3.0 
h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod 
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod 
h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
-github.com/creack/pty v1.1.9/go.mod 
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
 github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc 
h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
-github.com/emicklei/go-restful/v3 v3.12.2 
h1:DhwDP0vY3k8ZzE0RunuJy8GhNpPL6zqLkDf9B/a0/xU=
-github.com/emicklei/go-restful/v3 v3.12.2/go.mod 
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
+github.com/emicklei/go-restful/v3 v3.13.0 
h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes=
+github.com/emicklei/go-restful/v3 v3.13.0/go.mod 
h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc=
 github.com/fatih/color v1.19.0 h1:Zp3PiM21/9Ld6FzSKyL5c/BULoe/ONr9KlbYVOfG8+w=
 github.com/fatih/color v1.19.0/go.mod 
h1:zNk67I0ZUT1bEGsSGyCZYZNrHuTkJJB+r6Q9VuMi0LE=
 github.com/frankban/quicktest v1.14.6 
h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8=
 github.com/frankban/quicktest v1.14.6/go.mod 
h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0=
 github.com/fsnotify/fsnotify v1.9.0 
h1:2Ml+OJNzbYCTzsxtv8vKSFD9PbJjmhYF14k/jKC7S9k=
 github.com/fsnotify/fsnotify v1.9.0/go.mod 
h1:8jBTzvmWwFyi3Pb8djgCCO5IBqzKJ/Jwo8TRcHyHii0=
-github.com/fxamacker/cbor/v2 v2.9.0 
h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM=
-github.com/fxamacker/cbor/v2 v2.9.0/go.mod 
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
+github.com/fxamacker/cbor/v2 v2.9.1 
h1:2rWm8B193Ll4VdjsJY28jxs70IdDsHRWgQYAI80+rMQ=
+github.com/fxamacker/cbor/v2 v2.9.1/go.mod 
h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod 
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
-github.com/go-openapi/jsonpointer v0.19.6/go.mod 
h1:osyAmYz/mB/C3I+WsTTSgw1ONzaLJoLCyoi6/zppojs=
-github.com/go-openapi/jsonpointer v0.21.0 
h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ=
-github.com/go-openapi/jsonpointer v0.21.0/go.mod 
h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY=
-github.com/go-openapi/jsonreference v0.20.2 
h1:3sVjiK66+uXK/6oQ8xgcRKcFgQ5KXa2KvnJRumpMGbE=
-github.com/go-openapi/jsonreference v0.20.2/go.mod 
h1:Bl1zwGIM8/wsvqjsOQLJ/SH+En5Ap4rVB5KVcIDZG2k=
-github.com/go-openapi/swag v0.22.3/go.mod 
h1:UzaqsxGiab7freDnrUUra0MwWfN/q7tE4j+VcZ0yl14=
-github.com/go-openapi/swag v0.23.0 
h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE=
-github.com/go-openapi/swag v0.23.0/go.mod 
h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ=
-github.com/go-task/slim-sprig/v3 v3.0.0 
h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI=
-github.com/go-task/slim-sprig/v3 v3.0.0/go.mod 
h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8=
+github.com/go-openapi/jsonpointer v1.0.0 
h1:kR9tHqY0CtZaOPVFm622dPVNhrvYpwr4uCxgL3h1H8s=
+github.com/go-openapi/jsonpointer v1.0.0/go.mod 
h1:Z3rw7dWu1p9IgitXCFamSlA5lmDiklEB6vkaxcNZW5Y=
+github.com/go-openapi/jsonreference v1.0.0 
h1:jlmTr6torcd1YgDQvSfNmRtKzYDO4FGBkrAdlAVWnpY=
+github.com/go-openapi/jsonreference v1.0.0/go.mod 
h1:jtwdyGbJk0Xhe5Y+rwtglQP6Sb1WZST4rT32LWB+sv0=
+github.com/go-openapi/swag v0.27.1 
h1:VotvOLWW8q/EAxB0YdsBBGC8XYyeL1YwBj2ungAGPNg=
+github.com/go-openapi/swag v0.27.1/go.mod 
h1:GTkJPwHfhJp6MWr4/rCh64HVI3Ofu+tcsbfjfHmTxpE=
+github.com/go-openapi/swag/cmdutils v0.27.1 
h1:I7sYqaWVl5mq0NEmNQkAmFDyNin9ufvMX/p2zwtQaOE=
+github.com/go-openapi/swag/cmdutils v0.27.1/go.mod 
h1:Sm1MVFMkF6guJJ+pQqHnQA3N0j9qALV3NxzDSv6bETM=
+github.com/go-openapi/swag/conv v0.27.1 
h1:8wi9ZG+olmY1wXphl93EWniPtbSPkXM/feH7FgjsvrU=
+github.com/go-openapi/swag/conv v0.27.1/go.mod 
h1:QbqMivkpKhC3g1B1GGGOJ6ANewI3S62dbzYu3Duowqs=
+github.com/go-openapi/swag/fileutils v0.27.1 
h1:QQqBSoi5mW4XpU85nS0mLcA+zAE6vLzrb0QkmLKf9oM=
+github.com/go-openapi/swag/fileutils v0.27.1/go.mod 
h1:VvJFZLTZS0AI854gEQz5tk7dBESdLjiNUMSZ/th2ry8=
+github.com/go-openapi/swag/jsonutils v0.27.1 
h1:SVgK3i4USzCU5mibOOS/l4ea2h9UQXy7J7RNLTjuXjU=
+github.com/go-openapi/swag/jsonutils v0.27.1/go.mod 
h1:tdlEpZqdcQ17uj6J4YdK9vd8It5qWMwjWXOs0tjpRlk=
+github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.1 
h1:mJu3COL9WEaZVp/Kf2PRMi7tPszPEJfSr/OO75ynCs8=
+github.com/go-openapi/swag/jsonutils/fixtures_test v0.27.1/go.mod 
h1:mofwUWx70wvskwESqRJ//k/9kURmCgyJl5m5Ppoh5kY=
+github.com/go-openapi/swag/loading v0.27.1 
h1:/DxUgDXKbBX4bcn7r9uEXfJyzN5XpiJmZplzQTjrRCY=
+github.com/go-openapi/swag/loading v0.27.1/go.mod 
h1:jvGh3iA2+zyUUycB5fgJWzeHnhrpvGnJJM0RVE9ZShE=
+github.com/go-openapi/swag/mangling v0.27.1 
h1:yC9D0HyUE8gbP+BfmGx9+AA89ikwZTMjESK3OnnoaqA=
+github.com/go-openapi/swag/mangling v0.27.1/go.mod 
h1:jtBE2+V+3pILxOR7Vgce+Cwp6A2PgZbvVqfNntbVs0w=
+github.com/go-openapi/swag/netutils v0.27.1 
h1:mICMFoS82F5TZ4Zy3cqmcQk+BFeCp3Uyq3Np7GI0/qU=
+github.com/go-openapi/swag/netutils v0.27.1/go.mod 
h1:J+WYyFMLtvtCGqa6jLv+YNUmIKI3ZRQRrvfNDMoQoEQ=
+github.com/go-openapi/swag/pools v0.27.1 
h1:9LeadcMyb2GJCbXX5hVQDbZ2Lq9TL4dCs/nx1j5DO0E=
+github.com/go-openapi/swag/pools v0.27.1/go.mod 
h1:kVQefhSK5RWuRe7BXsL8htgBPAMpN7HDGpGEknqugeE=
+github.com/go-openapi/swag/stringutils v0.27.1 
h1:ZXePZ0r2p1qSjo8tD3Un4vFj8+FqlCkczxDrJIhYUp8=
+github.com/go-openapi/swag/stringutils v0.27.1/go.mod 
h1:lzRN95CxXmA03XcDWHLOb6nOMcxCqR5rGY0lOgsfRoM=
+github.com/go-openapi/swag/typeutils v0.27.1 
h1:KSTdFlfnse4r6dP9IrEnwMldjE+zs71UeEB3//PtVXc=
+github.com/go-openapi/swag/typeutils v0.27.1/go.mod 
h1:Srm0xFNRZ1Y+vCxJclo5qzx8aj+1pAKda/YfFPrG0dQ=
+github.com/go-openapi/swag/yamlutils v0.27.1 
h1:ftxv6xvXb1E3zohUc+okZ9nSqNb9StQX/FXnKZ98sQA=
+github.com/go-openapi/swag/yamlutils v0.27.1/go.mod 
h1:bnxFIB1qewGRiZHypXGZ3fNgf13/0HfRgnS/iZBDrOo=
+github.com/go-openapi/testify/enable/yaml/v2 v2.6.0 
h1:gGHwAJ0R/5jU8BEGDbfRNR3hL68dAVi84WuOApp29B0=
+github.com/go-openapi/testify/enable/yaml/v2 v2.6.0/go.mod 
h1:tY+St1SGq4NFl0QIqdTY4aEdbChAHxhyB77XQi9iJCo=
+github.com/go-openapi/testify/v2 v2.6.0 
h1:5PKH2HE7YJ/LuRPQGvSxBRlFXNQhSetBLlGAgUEu3ug=
+github.com/go-openapi/testify/v2 v2.6.0/go.mod 
h1:SgsVHtfooshd0tublTtJ50FPKhujf47YRqauXXOUxfw=
 github.com/go-viper/mapstructure/v2 v2.4.0 
h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
 github.com/go-viper/mapstructure/v2 v2.4.0/go.mod 
h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
 github.com/google/gnostic-models v0.7.0 
h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo=
@@ -39,31 +60,22 @@
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
 github.com/google/gofuzz v1.0.0/go.mod 
h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg=
-github.com/google/pprof v0.0.0-20250403155104-27863c87afa6 
h1:BHT72Gu3keYf3ZEu2J0b1vyeLSOYI8bm5wbJM/8yDe8=
-github.com/google/pprof v0.0.0-20250403155104-27863c87afa6/go.mod 
h1:boTsfXsheKC2y+lKOCMpSfarhxDeIzfZG1jqGcPl3cA=
 github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0=
 github.com/google/uuid v1.6.0/go.mod 
h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo=
 github.com/inconshreveable/mousetrap v1.1.0 
h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8=
 github.com/inconshreveable/mousetrap v1.1.0/go.mod 
h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw=
-github.com/jarcoal/httpmock v1.4.1 
h1:0Ju+VCFuARfFlhVXFc2HxlcQkfB+Xq12/EotHko+x2A=
-github.com/jarcoal/httpmock v1.4.1/go.mod 
h1:ftW1xULwo+j0R0JJkJIIi7UKigZUXCLLanykgjwBXL0=
-github.com/josharian/intern v1.0.0 
h1:vlS4z54oSdjm0bgjRigI+G1HpF+tI+9rE5LLzOg8HmY=
-github.com/josharian/intern v1.0.0/go.mod 
h1:5DoeVV0s6jJacbCEi61lwdGj/aVlrQvzHFFd8Hwg//Y=
+github.com/jarcoal/httpmock v1.4.2 
h1:dKwiP/9zITCPfBLsDn3kchbSOu16JrnxtVEmL0fPRcI=
+github.com/jarcoal/httpmock v1.4.2/go.mod 
h1:ftW1xULwo+j0R0JJkJIIi7UKigZUXCLLanykgjwBXL0=
 github.com/json-iterator/go v1.1.12 
h1:PV8peI4a0ysnczrg+LtxykD8LfKY9ML6u2jnxaEnrnM=
 github.com/json-iterator/go v1.1.12/go.mod 
h1:e30LSqwooZae/UwlEbR2852Gd8hjQvJoHmT4TnhNGBo=
-github.com/klauspost/compress v1.18.0 
h1:c/Cqfb0r+Yi+JtIEq73FWXVkRonBlf0CRNYc8Zttxdo=
-github.com/klauspost/compress v1.18.0/go.mod 
h1:2Pp+KzxcywXVXMr50+X0Q/Lsb43OQHYWRCY2AiWywWQ=
-github.com/kr/pretty v0.2.1/go.mod 
h1:ipq/a2n7PKx3OHsz4KJII5eveXtPO4qwEXGdVfWzfnI=
+github.com/klauspost/compress v1.19.1 
h1:VsB4HPswih7mmZ8WleSFQ75c/Ui1M4trX5oAsJnhSlk=
+github.com/klauspost/compress v1.19.1/go.mod 
h1:cwPg85FWrGar70rWktvGQj8/hthj3wpl0PGDogxkrSQ=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1/go.mod 
h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
-github.com/kr/pty v1.1.1/go.mod h1:pFQYn66WHrOpPYNljwOMqo10TkYh1fy3cYio2l3bCsQ=
-github.com/kr/text v0.1.0/go.mod 
h1:4Jbv+DJW3UT/LiOwJeYQe1efqtUx/iVham/4vfdArNI=
 github.com/kr/text v0.2.0 h1:5Nx0Ya0ZqY2ygV366QzturHI13Jq95ApcVaJBhpS+AY=
 github.com/kr/text v0.2.0/go.mod 
h1:eLer722TekiGuMkidMxC/pM04lWEeraHUUmBw8l2grE=
 github.com/kylelemons/godebug v1.1.0 
h1:RPNrshWIDI6G2gRW9EHilWtl7Z6Sb1BR0xunSBf0SNc=
 github.com/kylelemons/godebug v1.1.0/go.mod 
h1:9/0rRGxNHcop5bhtWyNeEfOS8JIWk580+fNqagV/RAw=
-github.com/mailru/easyjson v0.7.7 
h1:UGYAvKxe3sBsEDzO8ZeWOSlIQfWFlxbzLZe7hwFURr0=
-github.com/mailru/easyjson v0.7.7/go.mod 
h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
 github.com/mattn/go-colorable v0.1.14 
h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
 github.com/mattn/go-colorable v0.1.14/go.mod 
h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
 github.com/mattn/go-isatty v0.0.20 
h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
@@ -83,22 +95,19 @@
 github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod 
h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ=
 github.com/olekukonko/tablewriter v0.0.5 
h1:P2Ga83D34wi1o9J6Wh1mRuqd4mF/x/lgBS7N7AbDhec=
 github.com/olekukonko/tablewriter v0.0.5/go.mod 
h1:hPp6KlRPjbx+hW8ykQs1w3UBbZlj6HuIJcUGPhkA7kY=
-github.com/onsi/ginkgo/v2 v2.27.2 
h1:LzwLj0b89qtIy6SSASkzlNvX6WktqurSHwkk2ipF/Ns=
-github.com/onsi/ginkgo/v2 v2.27.2/go.mod 
h1:ArE1D/XhNXBXCBkKOLkbsb2c81dQHCRcF5zwn/ykDRo=
-github.com/onsi/gomega v1.38.2 h1:eZCjf2xjZAqe+LeWvKb5weQ+NcPwX84kqJ0cZNxok2A=
-github.com/onsi/gomega v1.38.2/go.mod 
h1:W2MJcYxRGV63b418Ai34Ud0hEdTVXq9NW9+Sx6uXf3k=
 github.com/pelletier/go-toml/v2 v2.2.4 
h1:mye9XuhQ6gvn5h28+VilKrrPoQVanw5PMw/TB0t5Ec4=
 github.com/pelletier/go-toml/v2 v2.2.4/go.mod 
h1:2gIqNv+qfxSVS7cM2xJQKtLSTLUE9V8t9Stt+h56mCY=
-github.com/pmezard/go-difflib v1.0.0 
h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM=
 github.com/pmezard/go-difflib v1.0.0/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
-github.com/prometheus/client_golang v1.23.2 
h1:Je96obch5RDVy3FDMndoUsjAhG5Edi49h0RJWRi/o0o=
-github.com/prometheus/client_golang v1.23.2/go.mod 
h1:Tb1a6LWHB3/SPIzCoaDXI4I8UHKeFTEQ1YCr+0Gyqmg=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 
h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U=
+github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod 
h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4=
+github.com/prometheus/client_golang v1.24.1 
h1:JnJkREXzWxUdCuPFpIWZiPispT9xVV59uiuyR2bPlnU=
+github.com/prometheus/client_golang v1.24.1/go.mod 
h1:F+oSRECHg4sse5ucfYpYDeIv/hu68Zo0uoHKetWnzcE=
 github.com/prometheus/client_model v0.6.2 
h1:oBsgwpGs7iVziMvrGhE53c/GrLUsZdHnqNwqPLxwZyk=
 github.com/prometheus/client_model v0.6.2/go.mod 
h1:y3m2F6Gdpfy6Ut/GBsUqTWZqCUvMVzSfMLjcu6wAwpE=
-github.com/prometheus/common v0.66.1 
h1:h5E0h5/Y8niHc5DlaLlWLArTQI7tMrsfQjHV+d9ZoGs=
-github.com/prometheus/common v0.66.1/go.mod 
h1:gcaUsgf3KfRSwHY4dIMXLPV0K/Wg1oZ8+SbZk/HH/dA=
-github.com/prometheus/procfs v0.16.1 
h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg=
-github.com/prometheus/procfs v0.16.1/go.mod 
h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is=
+github.com/prometheus/common v0.70.1 
h1:1HvjP4D5oL3t8RsPlwxA9onvvStjtIHYE5XuuwOi/PY=
+github.com/prometheus/common v0.70.1/go.mod 
h1:VdFUQDMZK3VLkurFUVhia6uys/0suUp86TJz5qbJRhc=
+github.com/prometheus/procfs v0.21.1 
h1:GljZCt+zSTS+NZq88cyQ1LjZ+RCHp3uVuabBWA5+OJI=
+github.com/prometheus/procfs v0.21.1/go.mod 
h1:aB55Cww9pdSJVHk0hUf0inxWyyjPogFIjmHKYgMKmtY=
 github.com/rivo/uniseg v0.2.0/go.mod 
h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.4.4 h1:8TfxU8dW6PdqD27gjM8MVNuicgxIjxpm4K7x4jp8sis=
 github.com/rivo/uniseg v0.4.4/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
@@ -121,14 +130,9 @@
 github.com/spf13/viper v1.21.0 h1:x5S+0EU27Lbphp4UKm1C+1oQO+rKx36vfCoaVebLFSU=
 github.com/spf13/viper v1.21.0/go.mod 
h1:P0lhsswPGWD/1lZJ9ny3fYnVqxiegrlNrEmgLjbTCAY=
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
-github.com/stretchr/objx v0.4.0/go.mod 
h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw=
-github.com/stretchr/objx v0.5.0/go.mod 
h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo=
-github.com/stretchr/objx v0.5.2 h1:xuMeJ0Sdp5ZMRXx/aWO6RZxdr3beISkG5/G/aIRr3pY=
-github.com/stretchr/objx v0.5.2/go.mod 
h1:FRsXN1f5AsAjCGJKqEizvkpNtU+EGNCLh3NxZ/8L+MA=
+github.com/stretchr/objx v0.5.3 h1:jmXUvGomnU1o3W/V5h2VEradbpJDwGrzugQQvL0POH4=
+github.com/stretchr/objx v0.5.3/go.mod 
h1:rDQraq+vQZU7Fde9LOZLr8Tax6zZvy4kuNKF+QYS+U0=
 github.com/stretchr/testify v1.3.0/go.mod 
h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI=
-github.com/stretchr/testify v1.7.1/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/stretchr/testify v1.8.0/go.mod 
h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU=
-github.com/stretchr/testify v1.8.1/go.mod 
h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4=
 github.com/stretchr/testify v1.11.1 
h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U=
 github.com/stretchr/testify v1.11.1/go.mod 
h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U=
 github.com/subosito/gotenv v1.6.0 
h1:9NlTDc1FTs4qu0DDq7AEtTPNw6SVm7uBMsUCUjABIf8=
@@ -137,31 +141,25 @@
 github.com/x448/float16 v0.8.4/go.mod 
h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod 
h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
-go.yaml.in/yaml/v2 v2.4.3 h1:6gvOSjQoTB3vt1l+CU+tSyi/HOjfOjRLJ4YwYZGwRO0=
-go.yaml.in/yaml/v2 v2.4.3/go.mod 
h1:zSxWcmIDjOzPXpjlTTbAsKokqkDNAVtZO0WOMiT90s8=
+go.yaml.in/yaml/v2 v2.4.4 h1:tuyd0P+2Ont/d6e2rl3be67goVK4R6deVxCUX5vyPaQ=
+go.yaml.in/yaml/v2 v2.4.4/go.mod 
h1:gMZqIpDtDqOfM0uNfy0SkpRhvUryYH0Z6wdMYcacYXQ=
 go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc=
 go.yaml.in/yaml/v3 v3.0.4/go.mod 
h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg=
-golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
-golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
-golang.org/x/net v0.47.0 h1:Mx+4dIFzqraBXUugkia1OOvlD6LemFo1ALMHjrXDOhY=
-golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU=
-golang.org/x/oauth2 v0.30.0 h1:dnDm7JmhM45NNpd8FDDeLhK6FwqbOf4MLCM9zb1BOHI=
-golang.org/x/oauth2 v0.30.0/go.mod 
h1:B++QgG3ZKulg6sRPGD/mqlHQs5rB3Ml9erfeDY7xKlU=
-golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
-golang.org/x/sync v0.18.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/net v0.57.0 h1:K5+3DljvIuDG9/Jv9rvyMywYNFCQ9RSUY6OOTTkT+tE=
+golang.org/x/net v0.57.0/go.mod h1:KpXc8iv+r3XplLAG/f7Jsf9RPszJzdR0f58q9vGOuEU=
+golang.org/x/oauth2 v0.36.0 h1:peZ/1z27fi9hUOFCAZaHyrpWG5lwe0RJEEEeH0ThlIs=
+golang.org/x/oauth2 v0.36.0/go.mod 
h1:YDBUJMTkDnJS+A4BP4eZBjCqtokkg1hODuPjwiGPO7Q=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
-golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
-golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU=
-golang.org/x/term v0.37.0/go.mod 
h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254=
-golang.org/x/text v0.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM=
-golang.org/x/text v0.31.0/go.mod 
h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM=
-golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
-golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
-golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
-golang.org/x/tools v0.38.0/go.mod 
h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
-google.golang.org/protobuf v1.36.8 
h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc=
-google.golang.org/protobuf v1.36.8/go.mod 
h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU=
+golang.org/x/sys v0.47.0 h1:o7XGOvZQCADBQQ4Y7VNq2dRWQR7JmOUW8Kxx4ZsNgWs=
+golang.org/x/sys v0.47.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/term v0.45.0 h1:NwWyBmoJCbfTHpxrWoZ9C6/VxOf7ic219I8xZZFdrf0=
+golang.org/x/term v0.45.0/go.mod 
h1:9aqxs0blBcrm/n0L9QW0aRVD+ktan8ssZromtqJC43w=
+golang.org/x/text v0.40.0 h1:Ub2Z6/xjgF1WrYQz2nuITOEegKFtiIy+rieRJ5lHZKs=
+golang.org/x/text v0.40.0/go.mod 
h1:hpnzDAfGV753zIKo+wk3u1bVKCGPbrnF7+7LBF/UHVY=
+golang.org/x/time v0.15.0 h1:bbrp8t3bGUeFOx08pvsMYRTCVSMk89u4tKbNOZbp88U=
+golang.org/x/time v0.15.0/go.mod 
h1:Y4YMaQmXwGQZoFaVFk4YpCt4FLQMYKZe9oeV/f4MSno=
+google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af 
h1:+5/Sw3GsDNlEmu7TfklWKPdQ0Ykja5VEmq2i817+jbI=
+google.golang.org/protobuf v1.36.12-0.20260120151049-f2248ac996af/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c 
h1:Hei/4ADfdWqJk1ZMxUNpqntNwaWcugrBjAiHlqqRiVk=
 gopkg.in/check.v1 v1.0.0-20201130134442-10cb98267c6c/go.mod 
h1:JHkPIbrfpd72SG/EVd6muEfDQjcINNoR0C8j2r3qZ4Q=
@@ -169,28 +167,27 @@
 gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod 
h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M=
 gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc=
 gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw=
-gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
 gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
-k8s.io/api v0.35.4 h1:P7nFYKl5vo9AGUp1Z+Pmd3p2tA7bX2wbFWCvDeRv988=
-k8s.io/api v0.35.4/go.mod h1:yl4lqySWOgYJJf9RERXKUwE9g2y+CkuwG+xmcOK8wXU=
-k8s.io/apiextensions-apiserver v0.35.4 
h1:HeP+Upp7ItdvnyGmub0yoix+2z5+ev4M5cE5TCgtOUU=
-k8s.io/apiextensions-apiserver v0.35.4/go.mod 
h1:ogQlk+stIE8mnoRthSYCwlOS12fVqgWFiErMwPaXA7c=
-k8s.io/apimachinery v0.35.4 h1:xtdom9RG7e+yDp71uoXoJDWEE2eOiHgeO4GdBzwWpds=
-k8s.io/apimachinery v0.35.4/go.mod 
h1:NNi1taPOpep0jOj+oRha3mBJPqvi0hGdaV8TCqGQ+cc=
-k8s.io/client-go v0.35.4 h1:DN6fyaGuzK64UvnKO5fOA6ymSjvfGAnCAHAR0C66kD8=
-k8s.io/client-go v0.35.4/go.mod h1:2Pg9WpsS4NeOpoYTfHHfMxBG8zFMSAUi4O/qoiJC3nY=
-k8s.io/klog/v2 v2.130.1 h1:n9Xl7H1Xvksem4KFG4PYbdQCQxqc/tTUyrgXaOhHSzk=
-k8s.io/klog/v2 v2.130.1/go.mod h1:3Jpz1GvMt720eyJH1ckRHK1EDfpxISzJ7I9OYgaDtPE=
-k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912 
h1:Y3gxNAuB0OBLImH611+UDZcmKS3g6CthxToOb37KgwE=
-k8s.io/kube-openapi v0.0.0-20250910181357-589584f1c912/go.mod 
h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ=
-k8s.io/utils v0.0.0-20251002143259-bc988d571ff4 
h1:SjGebBtkBqHFOli+05xYbK8YF1Dzkbzn+gDM4X9T4Ck=
-k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod 
h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0=
+k8s.io/api v0.37.0 h1:Z//Vj9N7RA/yS2sDmxyeo7h+RR4zbUrd2vrd3Z0TbB4=
+k8s.io/api v0.37.0/go.mod h1:LKXgcJWMc+f4OLbP5SFR8rulEg07zZhpi/zMULiBImk=
+k8s.io/apiextensions-apiserver v0.37.0 
h1:zRMQ3+/LIE5oZ0tVvXwYHC+dIkSP5cjNWju7AZU1LOI=
+k8s.io/apiextensions-apiserver v0.37.0/go.mod 
h1:HU0PfSBwchHL5iDau6jjt9zU6ryWkDDlaVUiq91NK80=
+k8s.io/apimachinery v0.37.0 h1:Np2AbDtf8x6RDHiD8T9LbKJ9gaegeVNa8yNm5FuGKm0=
+k8s.io/apimachinery v0.37.0/go.mod 
h1:RN3nhprFSCxOi5Selxd7oMTXOe/c+ZbcE7Im+TS2zkE=
+k8s.io/client-go v0.37.0 h1:nsN31fy8wBySuZ+QRnKmrjRSQLOG2rvoGN0tKd12zhQ=
+k8s.io/client-go v0.37.0/go.mod h1:FcGqw+Ll/gNQiq+nPGY1Oyt9y7SgDh1d3MW3RFDEbn0=
+k8s.io/klog/v2 v2.140.0 h1:Tf+J3AH7xnUzZyVVXhTgGhEKnFqye14aadWv7bzXdzc=
+k8s.io/klog/v2 v2.140.0/go.mod h1:o+/RWfJ6PwpnFn7OyAG3QnO47BFsymfEfrz6XyYSSp0=
+k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad 
h1:oXImqH8mQNk7PmvzKhmN3ddJoY6OnyM225MXwGHPm0A=
+k8s.io/kube-openapi v0.0.0-20260721132016-d427ff9ee9ad/go.mod 
h1:0/mqHCVhlumdJ3BhCfnjSZQE037nAhNodh1/hK0T8/I=
+k8s.io/utils v0.0.0-20260626114624-be93311217bd 
h1:Ea7fgQ5we8Y9T0OX5o0dAHzQOBRI07D/dEYRaB9ZZEs=
+k8s.io/utils v0.0.0-20260626114624-be93311217bd/go.mod 
h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk=
 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 
h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg=
 sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod 
h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg=
 sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU=
 sigs.k8s.io/randfill v1.0.0/go.mod 
h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY=
-sigs.k8s.io/structured-merge-diff/v6 v6.3.0 
h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco=
-sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod 
h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
+sigs.k8s.io/structured-merge-diff/v6 v6.4.2 
h1:qdOxHwrl2Kaag1aQEarlYcOA9vSyGCp3CIki3aW8c4Q=
+sigs.k8s.io/structured-merge-diff/v6 v6.4.2/go.mod 
h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE=
 sigs.k8s.io/yaml v1.6.0 h1:G8fkbMSAFqgEFgh4b1wmtzDnioxFCUgTZhlbj5P9QYs=
 sigs.k8s.io/yaml v1.6.0/go.mod h1:796bPqUfzR/0jLAl6XjHl3Ck7MiyVv8dbTdyT3/pMf4=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/clusterroles.go 
new/kor-0.6.9/pkg/kor/clusterroles.go
--- old/kor-0.6.8/pkg/kor/clusterroles.go       2026-04-22 19:52:08.000000000 
+0200
+++ new/kor-0.6.9/pkg/kor/clusterroles.go       2026-09-04 10:38:26.000000000 
+0200
@@ -7,13 +7,12 @@
        "encoding/json"
        "fmt"
        "os"
-       "strconv"
+       "slices"
 
        v1 "k8s.io/api/rbac/v1"
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
-       "k8s.io/utils/strings/slices"
 
        "github.com/yonahd/kor/pkg/common"
        "github.com/yonahd/kor/pkg/filters"
@@ -89,10 +88,8 @@
                for _, clusterRole := range clusterRoles.Items {
                        for label, value := range clusterRole.Labels {
                                if slices.Contains(aggregatedLabels, label+": 
"+value) {
-                                       usedClusterRoles[clusterRole.Name], err 
= strconv.ParseBool(value)
-                                       if err != nil {
-                                               return nil, 
fmt.Errorf("couldn't convert string to bool %v", err)
-                                       }
+                                       // Aggregated into a used ClusterRole, 
so it is itself used.
+                                       usedClusterRoles[clusterRole.Name] = 
true
                                        if clusterRole.AggregationRule == nil {
                                                continue
                                        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/clusterroles_test.go 
new/kor-0.6.9/pkg/kor/clusterroles_test.go
--- old/kor-0.6.8/pkg/kor/clusterroles_test.go  2026-04-22 19:52:08.000000000 
+0200
+++ new/kor-0.6.9/pkg/kor/clusterroles_test.go  2026-09-04 10:38:26.000000000 
+0200
@@ -4,6 +4,7 @@
        "context"
        "encoding/json"
        "reflect"
+       "slices"
        "sort"
        "testing"
 
@@ -279,3 +280,47 @@
        scheme.Scheme = runtime.NewScheme()
        _ = appsv1.AddToScheme(scheme.Scheme)
 }
+
+// TestRetrieveUsedClusterRoles_NonBooleanAggregationLabel is a regression test
+// for aggregated ClusterRoles whose aggregation label value is an arbitrary
+// string (e.g. Emissary's "emissary-emissary-ingress-agent") rather than a
+// boolean. Previously the scan parsed the label value as a bool and errored,
+// aborting ClusterRole detection entirely on such clusters.
+func TestRetrieveUsedClusterRoles_NonBooleanAggregationLabel(t *testing.T) {
+       clientset := fake.NewClientset()
+
+       if _, err := clientset.CoreV1().Namespaces().Create(context.TODO(), 
&corev1.Namespace{
+               ObjectMeta: v1.ObjectMeta{Name: testNamespace},
+       }, v1.CreateOptions{}); err != nil {
+               t.Fatalf("Error creating namespace %s: %v", testNamespace, err)
+       }
+
+       // Aggregation label with a non-boolean value, as shipped by 
Emissary/Ambassador.
+       nonBoolLabel := 
map[string]string{"rbac.authorization.k8s.io/aggregate-to-emissary": 
"emissary-emissary-ingress-agent"}
+       selector := v1.LabelSelector{MatchLabels: nonBoolLabel}
+
+       // Aggregator ClusterRole selects the non-boolean label; it is "used" 
via a binding.
+       aggregator := CreateTestClusterRole("emissary-aggregator", AppLabels, 
selector)
+       if _, err := clientset.RbacV1().ClusterRoles().Create(context.TODO(), 
aggregator, v1.CreateOptions{}); err != nil {
+               t.Fatalf("Error creating aggregator clusterRole: %v", err)
+       }
+       // Member ClusterRole carries the matching non-boolean label.
+       member := CreateTestClusterRole("emissary-member", nonBoolLabel)
+       if _, err := clientset.RbacV1().ClusterRoles().Create(context.TODO(), 
member, v1.CreateOptions{}); err != nil {
+               t.Fatalf("Error creating member clusterRole: %v", err)
+       }
+       // Bind the aggregator so it lands in usedClusterRoles and the 
aggregation loop runs.
+       ref := CreateTestRoleRefForClusterRole("emissary-aggregator")
+       crb := CreateTestClusterRoleBindingRoleRef(testNamespace, 
"emissary-rb", "test-sa", ref)
+       if _, err := 
clientset.RbacV1().ClusterRoleBindings().Create(context.TODO(), crb, 
v1.CreateOptions{}); err != nil {
+               t.Fatalf("Error creating clusterRoleBinding: %v", err)
+       }
+
+       used, err := retrieveUsedClusterRoles(clientset, &filters.Options{})
+       if err != nil {
+               t.Fatalf("non-boolean aggregation label must not error: %v", 
err)
+       }
+       if !slices.Contains(used, "emissary-member") {
+               t.Errorf("expected aggregated 'emissary-member' to be marked 
used, got %v", used)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/exporter.go 
new/kor-0.6.9/pkg/kor/exporter.go
--- old/kor-0.6.8/pkg/kor/exporter.go   2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/pkg/kor/exporter.go   2026-09-04 10:38:26.000000000 +0200
@@ -20,7 +20,7 @@
 )
 
 var (
-       orphanedResourcesCounter = prometheus.NewGaugeVec(
+       orphanedResourcesGauge = prometheus.NewGaugeVec(
                prometheus.GaugeOpts{
                        Name: "kubernetes_orphaned_resources",
                        Help: "Orphaned resources in Kubernetes",
@@ -30,7 +30,7 @@
 )
 
 func init() {
-       prometheus.MustRegister(orphanedResourcesCounter)
+       prometheus.MustRegister(orphanedResourcesGauge)
 }
 
 // TODO: add option to change port / url !?
@@ -66,16 +66,29 @@
                                return
                        }
 
-                       orphanedResourcesCounter.Reset()
+                       orphanedResourcesGauge.Reset()
+                       setOrphanedResourceMetrics(data, opts.GroupBy)
+                       time.Sleep(time.Duration(exporterIntervalValue) * 
time.Minute)
+               }
+       }
+}
 
-                       for namespace, resources := range data {
-                               for kind, resourceList := range resources {
-                                       for _, resourceName := range 
resourceList {
-                                               
orphanedResourcesCounter.WithLabelValues(kind, namespace, resourceName).Set(1)
-                                       }
-                               }
+func setOrphanedResourceMetrics(data map[string]map[string][]string, groupBy 
string) {
+       labelValues := func(outerKey, innerKey string) (kind, namespace string) 
{
+               return innerKey, outerKey
+       }
+       if groupBy == "resource" {
+               labelValues = func(outerKey, innerKey string) (kind, namespace 
string) {
+                       return outerKey, innerKey
+               }
+       }
+
+       for outerKey, resources := range data {
+               for innerKey, resourceList := range resources {
+                       for _, resourceName := range resourceList {
+                               kind, namespace := labelValues(outerKey, 
innerKey)
+                               orphanedResourcesGauge.WithLabelValues(kind, 
namespace, resourceName).Set(1)
                        }
-                       time.Sleep(time.Duration(exporterIntervalValue) * 
time.Minute)
                }
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/exporter_test.go 
new/kor-0.6.9/pkg/kor/exporter_test.go
--- old/kor-0.6.8/pkg/kor/exporter_test.go      1970-01-01 01:00:00.000000000 
+0100
+++ new/kor-0.6.9/pkg/kor/exporter_test.go      2026-09-04 10:38:26.000000000 
+0200
@@ -0,0 +1,49 @@
+package kor
+
+import (
+       "testing"
+
+       dto "github.com/prometheus/client_model/go"
+)
+
+func TestSetOrphanedResourceMetricsGroupByNamespace(t *testing.T) {
+       orphanedResourcesGauge.Reset()
+
+       data := map[string]map[string][]string{
+               "default": {
+                       "ConfigMap": {"script"},
+               },
+       }
+
+       setOrphanedResourceMetrics(data, "namespace")
+
+       metric := &dto.Metric{}
+       if err := orphanedResourcesGauge.WithLabelValues("ConfigMap", 
"default", "script").Write(metric); err != nil {
+               t.Fatalf("failed writing metric: %v", err)
+       }
+       value := metric.GetGauge().GetValue()
+       if value != 1 {
+               t.Fatalf("expected metric value 1, got %v", value)
+       }
+}
+
+func TestSetOrphanedResourceMetricsGroupByResource(t *testing.T) {
+       orphanedResourcesGauge.Reset()
+
+       data := map[string]map[string][]string{
+               "ConfigMap": {
+                       "default": {"script"},
+               },
+       }
+
+       setOrphanedResourceMetrics(data, "resource")
+
+       metric := &dto.Metric{}
+       if err := orphanedResourcesGauge.WithLabelValues("ConfigMap", 
"default", "script").Write(metric); err != nil {
+               t.Fatalf("failed writing metric: %v", err)
+       }
+       value := metric.GetGauge().GetValue()
+       if value != 1 {
+               t.Fatalf("expected metric value 1, got %v", value)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/finalizers.go 
new/kor-0.6.9/pkg/kor/finalizers.go
--- old/kor-0.6.8/pkg/kor/finalizers.go 2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/pkg/kor/finalizers.go 2026-09-04 10:38:26.000000000 +0200
@@ -6,13 +6,13 @@
        "encoding/json"
        "fmt"
        "os"
+       "slices"
 
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/apimachinery/pkg/runtime/schema"
        "k8s.io/client-go/dynamic"
        "k8s.io/client-go/kubernetes"
        _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
-       "k8s.io/utils/strings/slices"
 
        "github.com/yonahd/kor/pkg/common"
        "github.com/yonahd/kor/pkg/filters"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/finalizers_test.go 
new/kor-0.6.9/pkg/kor/finalizers_test.go
--- old/kor-0.6.8/pkg/kor/finalizers_test.go    2026-04-22 19:52:08.000000000 
+0200
+++ new/kor-0.6.9/pkg/kor/finalizers_test.go    2026-09-04 10:38:26.000000000 
+0200
@@ -1,6 +1,7 @@
 package kor
 
 import (
+       "slices"
        "testing"
        "time"
 
@@ -8,7 +9,6 @@
        "k8s.io/apimachinery/pkg/runtime"
        "k8s.io/apimachinery/pkg/runtime/schema"
        fakedynamic "k8s.io/client-go/dynamic/fake"
-       "k8s.io/utils/strings/slices"
 
        "github.com/yonahd/kor/pkg/filters"
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/hpas.go 
new/kor-0.6.9/pkg/kor/hpas.go
--- old/kor-0.6.8/pkg/kor/hpas.go       2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/pkg/kor/hpas.go       2026-09-04 10:38:26.000000000 +0200
@@ -6,11 +6,11 @@
        "encoding/json"
        "fmt"
        "os"
+       "slices"
 
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
-       "k8s.io/utils/strings/slices"
 
        "github.com/yonahd/kor/pkg/common"
        "github.com/yonahd/kor/pkg/filters"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/multi_test.go 
new/kor-0.6.9/pkg/kor/multi_test.go
--- old/kor-0.6.8/pkg/kor/multi_test.go 2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/pkg/kor/multi_test.go 2026-09-04 10:38:26.000000000 +0200
@@ -122,6 +122,47 @@
 
 }
 
+func TestGetUnusedMultiGroupByResource(t *testing.T) {
+       clientset := createTestMultiResources(t)
+       resourceList := "cm,pdb,deployment"
+
+       opts := common.Opts{
+               WebhookURL:    "",
+               Channel:       "",
+               Token:         "",
+               DeleteFlag:    false,
+               NoInteractive: true,
+               GroupBy:       "resource",
+       }
+
+       output, err := GetUnusedMulti(resourceList, &filters.Options{}, 
clientset, nil, nil, "json", opts)
+       if err != nil {
+               t.Fatalf("Error calling GetUnusedMulti: %v", err)
+       }
+
+       expectedOutput := map[string]map[string][]string{
+               "ConfigMap": {
+                       "test-namespace": {
+                               "configmap-1",
+                       },
+               },
+               "Deployment": {
+                       "test-namespace": {
+                               "test-deployment1",
+                       },
+               },
+       }
+
+       var actualOutput map[string]map[string][]string
+       if err := json.Unmarshal([]byte(output), &actualOutput); err != nil {
+               t.Fatalf("Error unmarshaling actual output: %v", err)
+       }
+
+       if !reflect.DeepEqual(expectedOutput, actualOutput) {
+               t.Errorf("Expected output does not match \n actualOutput:\n %s 
\n expectedOutput:\n %s", actualOutput, expectedOutput)
+       }
+}
+
 func TestGetUnusedMultiWithMultipleResources(t *testing.T) {
        clientset := fake.NewClientset()
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/kor-0.6.8/pkg/kor/secrets.go 
new/kor-0.6.9/pkg/kor/secrets.go
--- old/kor-0.6.8/pkg/kor/secrets.go    2026-04-22 19:52:08.000000000 +0200
+++ new/kor-0.6.9/pkg/kor/secrets.go    2026-09-04 10:38:26.000000000 +0200
@@ -7,11 +7,11 @@
        "encoding/json"
        "fmt"
        "os"
+       "slices"
 
        metav1 "k8s.io/apimachinery/pkg/apis/meta/v1"
        "k8s.io/client-go/kubernetes"
        _ "k8s.io/client-go/plugin/pkg/client/auth/oidc"
-       "k8s.io/utils/strings/slices"
 
        "github.com/yonahd/kor/pkg/common"
        "github.com/yonahd/kor/pkg/filters"

++++++ kor.obsinfo ++++++
--- /var/tmp/diff_new_pack.uQH6Fr/_old  2026-09-19 22:23:54.790537861 +0200
+++ /var/tmp/diff_new_pack.uQH6Fr/_new  2026-09-19 22:23:54.794538028 +0200
@@ -1,5 +1,5 @@
 name: kor
-version: 0.6.8
-mtime: 1776880328
-commit: d6986c937ce72d331fef965c1b103fab69b4ea93
+version: 0.6.9
+mtime: 1788511106
+commit: 2ac1fcf39ceab83daf39e6e119d2827fe0d9e1ce
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/kor/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.kor.new.383539/vendor.tar.gz differ: char 13, line 1

Reply via email to