Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kubeseal for openSUSE:Factory checked in at 2025-08-21 16:56:57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kubeseal (Old) and /work/SRC/openSUSE:Factory/.kubeseal.new.29662 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kubeseal" Thu Aug 21 16:56:57 2025 rev:39 rq:1300527 version:0.31.0 Changes: -------- --- /work/SRC/openSUSE:Factory/kubeseal/kubeseal.changes 2025-06-13 18:46:09.392560766 +0200 +++ /work/SRC/openSUSE:Factory/.kubeseal.new.29662/kubeseal.changes 2025-08-21 16:56:58.916078991 +0200 @@ -1,0 +2,27 @@ +Wed Aug 20 12:57:28 UTC 2025 - Johannes Kastl <opensuse_buildserv...@ojkastl.de> + +- Update to version 0.31.0: + * Update release notes for v0.31.0 (#1772) + * Simplify VIB helm chart validation (#1771) + * Bump VIB action version and updates the service URL (#1770) + * helm: add watch for secrets (#1758) + * fix: metrics cleanup for deleted SealedSecrets (#1764) + * Bump golang version to latest available one for 1.24 (#1769) + * Bump k8s.io/client-go from 0.33.2 to 0.33.3 (#1761) + * Bump github.com/spf13/pflag from 1.0.6 to 1.0.7 (#1765) + * Bump golang.org/x/crypto from 0.40.0 to 0.41.0 (#1768) + * Bump k8s.io/api from 0.33.2 to 0.33.3 (#1766) + * Bump github.com/prometheus/client_golang from 1.22.0 to 1.23.0 + (#1767) + * Bump k8s.io/code-generator from 0.33.2 to 0.33.3 (#1759) + * Bump github.com/onsi/gomega from 1.37.0 to 1.38.0 (#1760) + * Fix keyrenewperiod template chart (#1756) + * Fix namespace validation to prevent mismatch errors (#1754) + * Bump golang.org/x/crypto from 0.39.0 to 0.40.0 (#1755) + * Bump k8s.io/code-generator from 0.33.1 to 0.33.2 (#1752) + * Bump k8s.io/client-go from 0.33.1 to 0.33.2 (#1749) + * add watch for secrets (#1737) + * Release carvel package 2.17.3 (#1746) + * Release chart 2.17.3 (#1745) + +------------------------------------------------------------------- Old: ---- kubeseal-0.30.0.obscpio New: ---- kubeseal-0.31.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kubeseal.spec ++++++ --- /var/tmp/diff_new_pack.wf3Pbe/_old 2025-08-21 16:57:00.064126822 +0200 +++ /var/tmp/diff_new_pack.wf3Pbe/_new 2025-08-21 16:57:00.068126988 +0200 @@ -1,7 +1,7 @@ # # spec file for package kubeseal # -# Copyright (c) 2025 SUSE LLC +# Copyright (c) 2025 SUSE LLC and contributors # # All modifications and additions to the file contributed by third parties # remain the property of their copyright owners, unless otherwise agreed @@ -17,7 +17,7 @@ Name: kubeseal -Version: 0.30.0 +Version: 0.31.0 Release: 0 Summary: CLI for encrypting secrets to SealedSecrets License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.wf3Pbe/_old 2025-08-21 16:57:00.096128156 +0200 +++ /var/tmp/diff_new_pack.wf3Pbe/_new 2025-08-21 16:57:00.100128322 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/bitnami-labs/sealed-secrets</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.30.0</param> + <param name="revision">v0.31.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.wf3Pbe/_old 2025-08-21 16:57:00.120129155 +0200 +++ /var/tmp/diff_new_pack.wf3Pbe/_new 2025-08-21 16:57:00.124129322 +0200 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/bitnami-labs/sealed-secrets</param> - <param name="changesrevision">6e0beae85afcd1e981b4b56f22399ded6cbe6a88</param></service></servicedata> + <param name="changesrevision">443107a1fd256cb9e2ff3a3290aa79d722f840ee</param></service></servicedata> (No newline at EOF) ++++++ kubeseal-0.30.0.obscpio -> kubeseal-0.31.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/.vib/vib-platform-verify-skip-recreate.json new/kubeseal-0.31.0/.vib/vib-platform-verify-skip-recreate.json --- old/kubeseal-0.30.0/.vib/vib-platform-verify-skip-recreate.json 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/.vib/vib-platform-verify-skip-recreate.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -{ - "phases": { - "package": { - "context": { - "resources": { - "url": "{SHA_ARCHIVE}", - "path": "/helm/sealed-secrets" - } - }, - "actions": [ - { - "action_id": "helm-package" - } - ] - }, - "verify": { - "context": { - "resources": { - "url": "{SHA_ARCHIVE}", - "path": "/.vib/" - }, - "runtime_parameters": "IyMgQ3JlYXRlIFNlYWxlZCBTZWNyZXRzIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQKY3JlYXRlQ29udHJvbGxlcjogdHJ1ZQojIyBTZWNyZXQgY29udGFpbmluZyB0aGUga2V5IHVzZWQgdG8gZW5jcnlwdCBzZWNyZXRzCnNlY3JldE5hbWU6ICJzZWFsZWQtc2VjcmV0cy1rZXkiCiMjIFJlbmV3IGtleXMgZXZlcnkgd2VlawprZXlyZW5ld3BlcmlvZDogIjE2OGgiCiMgU2tpcCBzZWNyZXQgcmVjcmVhdGlvbgpza2lwUmVjcmVhdGU6IHRydWUKc2VydmljZToKICB0eXBlOiBMb2FkQmFsYW5jZXIKICBwb3J0OiA4MAo=", - "target_platform": { - "target_platform_id": "{TARGET_PLATFORM}" - } - }, - "actions": [ - { - "action_id": "health-check", - "params": { - "endpoint": "lb-sealed-secrets-http" - } - } - ] - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/.vib/vib-platform-verify.json new/kubeseal-0.31.0/.vib/vib-platform-verify.json --- old/kubeseal-0.30.0/.vib/vib-platform-verify.json 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/.vib/vib-platform-verify.json 1970-01-01 01:00:00.000000000 +0100 @@ -1,37 +0,0 @@ -{ - "phases": { - "package": { - "context": { - "resources": { - "url": "{SHA_ARCHIVE}", - "path": "/helm/sealed-secrets" - } - }, - "actions": [ - { - "action_id": "helm-package" - } - ] - }, - "verify": { - "context": { - "resources": { - "url": "{SHA_ARCHIVE}", - "path": "/.vib/" - }, - "runtime_parameters": "IyMgQ3JlYXRlIFNlYWxlZCBTZWNyZXRzIGNvbnRyb2xsZXIgc2hvdWxkIGJlIGNyZWF0ZWQKY3JlYXRlQ29udHJvbGxlcjogdHJ1ZQojIyBTZWNyZXQgY29udGFpbmluZyB0aGUga2V5IHVzZWQgdG8gZW5jcnlwdCBzZWNyZXRzCnNlY3JldE5hbWU6ICJzZWFsZWQtc2VjcmV0cy1rZXkiCiMjIFJlbmV3IGtleXMgZXZlcnkgd2VlawprZXlyZW5ld3BlcmlvZDogIjE2OGgiCnNlcnZpY2U6CiAgdHlwZTogTG9hZEJhbGFuY2VyCiAgcG9ydDogODAK", - "target_platform": { - "target_platform_id": "{TARGET_PLATFORM}" - } - }, - "actions": [ - { - "action_id": "health-check", - "params": { - "endpoint": "lb-sealed-secrets-http" - } - } - ] - } - } -} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/RELEASE-NOTES.md new/kubeseal-0.31.0/RELEASE-NOTES.md --- old/kubeseal-0.30.0/RELEASE-NOTES.md 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/RELEASE-NOTES.md 2025-08-14 16:26:26.000000000 +0200 @@ -4,6 +4,25 @@ [](https://github.com/bitnami-labs/sealed-secrets/releases/latest) +## v0.31.0 + +- Helm: add watch for secrets ([#1758](https://github.com/bitnami-labs/sealed-secrets/pull/1758)) +- Simplify VIB helm chart validation ([#1771](https://github.com/bitnami-labs/sealed-secrets/pull/1771)) +- Fix: metrics cleanup for deleted SealedSecrets ([#1764](https://github.com/bitnami-labs/sealed-secrets/pull/1764)) +- Fix keyrenewperiod template chart ([#1756](https://github.com/bitnami-labs/sealed-secrets/pull/1756)) +- Fix namespace validation to prevent mismatch errors ([#1754](https://github.com/bitnami-labs/sealed-secrets/pull/1754)) +- Bump VIB action version and updates the service URL ([#1770](https://github.com/bitnami-labs/sealed-secrets/pull/1770)) +- Bump golang version to latest available one for 1.24 ([#1769](https://github.com/bitnami-labs/sealed-secrets/pull/1769)) +- Bump golang.org/x/crypto from 0.40.0 to 0.41.0 ([#1768](https://github.com/bitnami-labs/sealed-secrets/pull/1768)) +- Bump github.com/prometheus/client_golang from 1.22.0 to 1.23.0 ([#1767](https://github.com/bitnami-labs/sealed-secrets/pull/1767)) +- Bump k8s.io/api from 0.33.2 to 0.33.3 ([#1766](https://github.com/bitnami-labs/sealed-secrets/pull/1766)) +- Bump github.com/spf13/pflag from 1.0.6 to 1.0.7 ([#1765](https://github.com/bitnami-labs/sealed-secrets/pull/1765)) +- Bump k8s.io/client-go from 0.33.2 to 0.33.3 ([#1761](https://github.com/bitnami-labs/sealed-secrets/pull/1761)) +- Bump github.com/onsi/gomega from 1.37.0 to 1.38.0 ([#1760](https://github.com/bitnami-labs/sealed-secrets/pull/1760)) +- Bump k8s.io/code-generator from 0.33.2 to 0.33.3 ([#1759](https://github.com/bitnami-labs/sealed-secrets/pull/1759)) +- Bump golang.org/x/crypto from 0.39.0 to 0.40.0 ([#1755](https://github.com/bitnami-labs/sealed-secrets/pull/1755)) +- Bump k8s.io/code-generator from 0.33.1 to 0.33.2 ([#1752](https://github.com/bitnami-labs/sealed-secrets/pull/1752)) + ## v0.30.0 - Bump golang to 1.24.4 ([#1743](https://github.com/bitnami-labs/sealed-secrets/pull/1743)) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/carvel/package.yaml new/kubeseal-0.31.0/carvel/package.yaml --- old/kubeseal-0.30.0/carvel/package.yaml 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/carvel/package.yaml 2025-08-14 16:26:26.000000000 +0200 @@ -1,10 +1,10 @@ apiVersion: data.packaging.carvel.dev/v1alpha1 kind: Package metadata: - name: "sealedsecrets.bitnami.com.2.17.2" + name: "sealedsecrets.bitnami.com.2.17.3" spec: refName: "sealedsecrets.bitnami.com" - version: "2.17.2" + version: "2.17.3" valuesSchema: openAPIv3: title: Chart Values @@ -424,7 +424,7 @@ spec: fetch: - imgpkgBundle: - image: ghcr.io/bitnami-labs/sealed-secrets-carvel@sha256:2cf177c3d8a91413e3e04fedf6c355228d0e30797ffb5db7dd7d008c0e28e983 + image: ghcr.io/bitnami-labs/sealed-secrets-carvel@sha256:b99f590e72772ebaa83aad35a88f01977a95245049e32a36b48ec21af32de8a7 template: - helmTemplate: path: sealed-secrets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/cmd/controller/main.go new/kubeseal-0.31.0/cmd/controller/main.go --- old/kubeseal-0.30.0/cmd/controller/main.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/cmd/controller/main.go 2025-08-14 16:26:26.000000000 +0200 @@ -51,6 +51,7 @@ fs.BoolVar(&f.OldGCBehavior, "old-gc-behavior", false, "Revert to old GC behavior where the controller deletes secrets instead of delegating that to k8s itself.") fs.BoolVar(&f.UpdateStatus, "update-status", true, "beta: if true, the controller will update the status sub-resource whenever it processes a sealed secret") + fs.BoolVar(&f.WatchForSecrets, "watch-for-secrets", false, "beta: If this is true, the controller will watch for key secrets. This is useful if you create the key secrets externally.") fs.BoolVar(&f.SkipRecreate, "skip-recreate", false, "if true the controller will skip listening for managed secret changes to recreate them. This helps on limited permission environments.") diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/cmd/kubeseal/main_test.go new/kubeseal-0.31.0/cmd/kubeseal/main_test.go --- old/kubeseal-0.30.0/cmd/kubeseal/main_test.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/cmd/kubeseal/main_test.go 2025-08-14 16:26:26.000000000 +0200 @@ -22,10 +22,33 @@ _ "k8s.io/client-go/plugin/pkg/client/auth" "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" certUtil "k8s.io/client-go/util/cert" "k8s.io/client-go/util/keyutil" ) +// mockClientConfig implements clientcmd.ClientConfig for testing +type mockClientConfig struct { + namespace string + namespaceSet bool +} + +func (m *mockClientConfig) Namespace() (string, bool, error) { + return m.namespace, m.namespaceSet, nil +} + +func (m *mockClientConfig) ClientConfig() (*rest.Config, error) { + return &rest.Config{}, nil +} + +func (m *mockClientConfig) ConfigAccess() clientcmd.ConfigAccess { + return nil +} + +func (m *mockClientConfig) RawConfig() (clientcmdapi.Config, error) { + return clientcmdapi.Config{}, nil +} + func TestVersion(t *testing.T) { buf := bytes.NewBufferString("") testVersionFlags := flag.NewFlagSet("testVersionFlags", flag.ExitOnError) @@ -41,7 +64,7 @@ } func testClientConfig() clientcmd.ClientConfig { - return initClient("", testConfigOverrides(), os.Stdin) + return &mockClientConfig{namespace: "default", namespaceSet: false} } func testConfig(flags *cliFlags) *config { @@ -53,23 +76,6 @@ } } -func initUsualKubectlFlagsForTests(overrides *clientcmd.ConfigOverrides, flagset *flag.FlagSet) { - kflags := clientcmd.RecommendedConfigOverrideFlags("") - clientcmd.BindOverrideFlags(overrides, flagset, kflags) -} - -func testConfigOverrides() *clientcmd.ConfigOverrides { - flagset := flag.NewFlagSet("test", flag.PanicOnError) - var overrides clientcmd.ConfigOverrides - initUsualKubectlFlagsForTests(&overrides, flagset) - err := flagset.Parse([]string{"-n", "default"}) - if err != nil { - fmt.Printf("flagset parse err: %v\n", err) - os.Exit(1) - } - return &overrides -} - func TestMainError(t *testing.T) { badFileName := filepath.Join("this", "file", "cannot", "possibly", "exist", "can", "it?") flags := cliFlags{certURL: badFileName} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/go.mod new/kubeseal-0.31.0/go.mod --- old/kubeseal-0.30.0/go.mod 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/go.mod 2025-08-14 16:26:26.000000000 +0200 @@ -9,16 +9,16 @@ github.com/mattn/go-isatty v0.0.20 github.com/mkmik/multierror v0.4.0 github.com/onsi/ginkgo/v2 v2.23.4 - github.com/onsi/gomega v1.37.0 - github.com/prometheus/client_golang v1.22.0 - github.com/spf13/pflag v1.0.6 + github.com/onsi/gomega v1.38.0 + github.com/prometheus/client_golang v1.23.0 + github.com/spf13/pflag v1.0.7 github.com/throttled/throttled v2.2.5+incompatible - golang.org/x/crypto v0.39.0 + golang.org/x/crypto v0.41.0 gopkg.in/yaml.v2 v2.4.0 - k8s.io/api v0.33.1 - k8s.io/apimachinery v0.33.1 - k8s.io/client-go v0.33.1 - k8s.io/code-generator v0.33.1 + k8s.io/api v0.33.3 + k8s.io/apimachinery v0.33.3 + k8s.io/client-go v0.33.3 + k8s.io/code-generator v0.33.3 k8s.io/klog v1.0.0 k8s.io/klog/v2 v2.130.1 k8s.io/utils v0.0.0-20241104100929-3ea5e8cea738 @@ -54,23 +54,24 @@ github.com/modern-go/reflect2 v1.0.2 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/pkg/errors v0.9.1 // indirect - github.com/prometheus/client_model v0.6.1 // indirect - github.com/prometheus/common v0.62.0 // indirect - github.com/prometheus/procfs v0.15.1 // indirect + github.com/prometheus/client_model v0.6.2 // indirect + github.com/prometheus/common v0.65.0 // indirect + github.com/prometheus/procfs v0.16.1 // indirect github.com/shopspring/decimal v1.4.0 // indirect github.com/spf13/cast v1.7.0 // indirect github.com/x448/float16 v0.8.4 // indirect go.uber.org/automaxprocs v1.6.0 // indirect - golang.org/x/mod v0.25.0 // indirect - golang.org/x/net v0.40.0 // indirect - golang.org/x/oauth2 v0.27.0 // indirect - golang.org/x/sync v0.15.0 // indirect - golang.org/x/sys v0.33.0 // indirect - golang.org/x/term v0.32.0 // indirect - golang.org/x/text v0.26.0 // indirect + golang.org/x/mod v0.26.0 // indirect + golang.org/x/net v0.42.0 // indirect + golang.org/x/oauth2 v0.30.0 // indirect + golang.org/x/sync v0.16.0 // indirect + golang.org/x/sys v0.35.0 // indirect + golang.org/x/term v0.34.0 // indirect + golang.org/x/text v0.28.0 // indirect golang.org/x/time v0.9.0 // indirect - golang.org/x/tools v0.33.0 // indirect - google.golang.org/protobuf v1.36.5 // indirect + golang.org/x/tools v0.35.0 // indirect + golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated // indirect + google.golang.org/protobuf v1.36.6 // indirect gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/go.sum new/kubeseal-0.31.0/go.sum --- old/kubeseal-0.30.0/go.sum 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/go.sum 2025-08-14 16:26:26.000000000 +0200 @@ -84,30 +84,30 @@ github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822/go.mod h1:+n7T8mK8HuQTcFwEeznm/DIxMOiR9yIdICNftLE1DvQ= github.com/onsi/ginkgo/v2 v2.23.4 h1:ktYTpKJAVZnDT4VjxSbiBenUjmlL/5QkBEocaWXiQus= github.com/onsi/ginkgo/v2 v2.23.4/go.mod h1:Bt66ApGPBFzHyR+JO10Zbt0Gsp4uWxu5mIOTusL46e8= -github.com/onsi/gomega v1.37.0 h1:CdEG8g0S133B4OswTDC/5XPSzE1OeP29QOioj2PID2Y= -github.com/onsi/gomega v1.37.0/go.mod h1:8D9+Txp43QWKhM24yyOBEdpkzN8FvJyAwecBgsU4KU0= +github.com/onsi/gomega v1.38.0 h1:c/WX+w8SLAinvuKKQFh77WEucCnPk4j2OTUr7lt7BeY= +github.com/onsi/gomega v1.38.0/go.mod h1:OcXcwId0b9QsE7Y49u+BTrL4IdKOBOKnD6VQNTJEB6o= github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4= github.com/pkg/errors v0.9.1/go.mod h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0= 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/prashantv/gostub v1.1.0 h1:BTyx3RfQjRHnUWaGF9oQos79AlQ5k8WNktv7VGvVH4g= github.com/prashantv/gostub v1.1.0/go.mod h1:A5zLQHz7ieHGG7is6LLXLz7I8+3LZzsrV0P1IAHhP5U= -github.com/prometheus/client_golang v1.22.0 h1:rb93p9lokFEsctTys46VnV1kLCDpVZ0a/Y92Vm0Zc6Q= -github.com/prometheus/client_golang v1.22.0/go.mod h1:R7ljNsLXhuQXYZYtw6GAE9AZg8Y7vEW5scdCXrWRXC0= -github.com/prometheus/client_model v0.6.1 h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E= -github.com/prometheus/client_model v0.6.1/go.mod h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY= -github.com/prometheus/common v0.62.0 h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io= -github.com/prometheus/common v0.62.0/go.mod h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I= -github.com/prometheus/procfs v0.15.1 h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc= -github.com/prometheus/procfs v0.15.1/go.mod h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk= +github.com/prometheus/client_golang v1.23.0 h1:ust4zpdl9r4trLY/gSjlm07PuiBq2ynaXXlptpfy8Uc= +github.com/prometheus/client_golang v1.23.0/go.mod h1:i/o0R9ByOnHX0McrTMTyhYvKE4haaf2mW08I+jGAjEE= +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.65.0 h1:QDwzd+G1twt//Kwj/Ww6E9FQq1iVMmODnILtW1t2VzE= +github.com/prometheus/common v0.65.0/go.mod h1:0gZns+BLRQ3V6NdaerOhMbwwRbNh9hkGINtQAsP5GS8= +github.com/prometheus/procfs v0.16.1 h1:hZ15bTNuirocR6u0JZ6BAHHmwS1p8B4P6MRqxtzMyRg= +github.com/prometheus/procfs v0.16.1/go.mod h1:teAbpZRB1iIAJYREa1LsoWUXykVXA1KlTmWl8x/U+Is= github.com/rogpeppe/go-internal v1.13.1 h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII= github.com/rogpeppe/go-internal v1.13.1/go.mod h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o= github.com/shopspring/decimal v1.4.0 h1:bxl37RwXBklmTi0C79JfXCEBD1cqqHt0bbgBAGFp81k= github.com/shopspring/decimal v1.4.0/go.mod h1:gawqmDU56v4yIKSwfBSFip1HdCCXN8/+DMd9qYNcwME= github.com/spf13/cast v1.7.0 h1:ntdiHjuueXFgm5nzDRdOS4yfT43P5Fnud6DH50rz/7w= github.com/spf13/cast v1.7.0/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o= -github.com/spf13/pflag v1.0.6/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M= +github.com/spf13/pflag v1.0.7/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= 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= @@ -127,51 +127,55 @@ golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w= golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI= golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto= -golang.org/x/crypto v0.39.0 h1:SHs+kF4LP+f+p14esP5jAoDpHU8Gu/v9lFRK6IT5imM= -golang.org/x/crypto v0.39.0/go.mod h1:L+Xg3Wf6HoL4Bn4238Z6ft6KfEpN0tJGo53AAPC632U= +golang.org/x/crypto v0.41.0 h1:WKYxWedPGCTVVl5+WHSSrOBT0O8lx32+zxmHxijgXp4= +golang.org/x/crypto v0.41.0/go.mod h1:pO5AFd7FA68rFak7rOAGVuygIISepHftHnr8dr6+sUc= golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA= -golang.org/x/mod v0.25.0 h1:n7a+ZbQKQA/Ysbyb0/6IbB1H/X41mKgbhfv7AfG/44w= -golang.org/x/mod v0.25.0/go.mod h1:IXM97Txy2VM4PJ3gI61r1YEk/gAj6zAHN3AdZt6S9Ww= +golang.org/x/mod v0.26.0 h1:EGMPT//Ezu+ylkCijjPc+f4Aih7sZvaAr+O3EHBxvZg= +golang.org/x/mod v0.26.0/go.mod h1:/j6NAhSk8iQ723BGAUyoAcn7SlD7s15Dp9Nd/SfeaFQ= golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg= golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s= golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= -golang.org/x/net v0.40.0 h1:79Xs7wF06Gbdcg4kdCCIQArK11Z1hr5POQ6+fIYHNuY= -golang.org/x/net v0.40.0/go.mod h1:y0hY0exeL2Pku80/zKK7tpntoX23cqL3Oa6njdgRtds= -golang.org/x/oauth2 v0.27.0 h1:da9Vo7/tDv5RH/7nZDz1eMGS/q1Vv1N/7FCrBhI9I3M= -golang.org/x/oauth2 v0.27.0/go.mod h1:onh5ek6nERTohokkhCD/y2cV4Do3fxFHFuAejCkRWT8= +golang.org/x/net v0.42.0 h1:jzkYrhi3YQWD6MLBJcsklgQsoAcw89EcZbJw8Z614hs= +golang.org/x/net v0.42.0/go.mod h1:FF1RA5d3u7nAYA4z2TkclSCKh68eSXtiFwcWQpPXdt8= +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.0.0-20190423024810-112230192c58/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.15.0 h1:KWH3jNZsfyT6xfAfKiz6MRNmd46ByHDYaZ7KSkCtdW8= -golang.org/x/sync v0.15.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= +golang.org/x/sync v0.16.0 h1:ycBJEhp9p4vXvUZNszeOq0kGTPghopOL8q0fq3vstxw= +golang.org/x/sync v0.16.0/go.mod h1:1dzgHSNfp02xaA81J2MS99Qcpr2w7fw1gpm99rleRqA= golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw= -golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= -golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg= -golang.org/x/term v0.32.0/go.mod h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ= +golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI= +golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4= +golang.org/x/term v0.34.0/go.mod h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw= golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ= golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ= -golang.org/x/text v0.26.0 h1:P42AVeLghgTYr4+xUnTRKDMqpar+PtX7KWuNQL21L8M= -golang.org/x/text v0.26.0/go.mod h1:QK15LZJUUQVJxhz7wXgxSy/CJaTFjd0G+YLonydOVQA= +golang.org/x/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= 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.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo= golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE= golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA= -golang.org/x/tools v0.33.0 h1:4qz2S3zmRxbGIhDIAgjxvFutSvH5EfnsYrRBj0UI0bc= -golang.org/x/tools v0.33.0/go.mod h1:CIJMaWEY88juyUfo7UbgPqbC8rU2OqfAV1h2Qp0oMYI= +golang.org/x/tools v0.35.0 h1:mBffYraMEf7aa0sB+NuKnuCy8qI/9Bughn8dC2Gu5r0= +golang.org/x/tools v0.35.0/go.mod h1:NKdj5HkL/73byiZSJjqJgKn3ep7KjFkBOkR/Hps3VPw= +golang.org/x/tools/go/expect v0.1.0-deprecated h1:jY2C5HGYR5lqex3gEniOQL0r7Dq5+VGVgY1nudX5lXY= +golang.org/x/tools/go/expect v0.1.0-deprecated/go.mod h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY= +golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM= +golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated/go.mod h1:RVAQXBGNv1ib0J382/DPCRS/BPnsGebyM1Gj5VSDpG8= golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0= -google.golang.org/protobuf v1.36.5 h1:tPhr+woSbjfYvY6/GPufUoYizxw1cF/yFoxJ2fmpwlM= -google.golang.org/protobuf v1.36.5/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.6 h1:z1NpPI8ku2WgiWnf+t9wTPsn6eP1L7ksHUlkfLvd9xY= +google.golang.org/protobuf v1.36.6/go.mod h1:jduwjTPXsFjZGTmRluh+L6NjiWu7pchiJ2/5YcXBHnY= 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= @@ -183,14 +187,14 @@ gopkg.in/yaml.v2 v2.4.0/go.mod h1:RDklbk79AGWmwhnvt/jBztapEOGDOx6ZbXqjP6csGnQ= 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.33.1 h1:tA6Cf3bHnLIrUK4IqEgb2v++/GYUtqiu9sRVk3iBXyw= -k8s.io/api v0.33.1/go.mod h1:87esjTn9DRSRTD4fWMXamiXxJhpOIREjWOSjsW1kEHw= -k8s.io/apimachinery v0.33.1 h1:mzqXWV8tW9Rw4VeW9rEkqvnxj59k1ezDUl20tFK/oM4= -k8s.io/apimachinery v0.33.1/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= -k8s.io/client-go v0.33.1 h1:ZZV/Ks2g92cyxWkRRnfUDsnhNn28eFpt26aGc8KbXF4= -k8s.io/client-go v0.33.1/go.mod h1:JAsUrl1ArO7uRVFWfcj6kOomSlCv+JpvIsp6usAGefA= -k8s.io/code-generator v0.33.1 h1:ZLzIRdMsh3Myfnx9BaooX6iQry29UJjVfVG+BuS+UMw= -k8s.io/code-generator v0.33.1/go.mod h1:HUKT7Ubp6bOgIbbaPIs9lpd2Q02uqkMCMx9/GjDrWpY= +k8s.io/api v0.33.3 h1:SRd5t//hhkI1buzxb288fy2xvjubstenEKL9K51KBI8= +k8s.io/api v0.33.3/go.mod h1:01Y/iLUjNBM3TAvypct7DIj0M0NIZc+PzAHCIo0CYGE= +k8s.io/apimachinery v0.33.3 h1:4ZSrmNa0c/ZpZJhAgRdcsFcZOw1PQU1bALVQ0B3I5LA= +k8s.io/apimachinery v0.33.3/go.mod h1:BHW0YOu7n22fFv/JkYOEfkUYNRN0fj0BlvMFWA7b+SM= +k8s.io/client-go v0.33.3 h1:M5AfDnKfYmVJif92ngN532gFqakcGi6RvaOF16efrpA= +k8s.io/client-go v0.33.3/go.mod h1:luqKBQggEf3shbxHY4uVENAxrDISLOarxpTKMiUuujg= +k8s.io/code-generator v0.33.3 h1:6+34LhYkIuQ/yn/E3qlpVqjQaP8smzCu4NE1A8b0LWs= +k8s.io/code-generator v0.33.3/go.mod h1:6Y02+HQJYgNphv9z3wJB5w+sjYDIEBQW7sh62PkufvA= k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7 h1:2OX19X59HxDprNCVrWi6jb7LW1PoqTlYqEq5H2oetog= k8s.io/gengo/v2 v2.0.0-20250207200755-1244d31929d7/go.mod h1:EJykeLsmFC60UQbYJezXkEsG2FLrt0GPNkU5iK5GWxU= k8s.io/klog v1.0.0 h1:Pt+yjF5aB1xDSVbau4VsWe+dQNzA0qv1LlXdC2dF6Q8= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/helm/sealed-secrets/Chart.yaml new/kubeseal-0.31.0/helm/sealed-secrets/Chart.yaml --- old/kubeseal-0.30.0/helm/sealed-secrets/Chart.yaml 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/helm/sealed-secrets/Chart.yaml 2025-08-14 16:26:26.000000000 +0200 @@ -1,7 +1,7 @@ annotations: category: DeveloperTools apiVersion: v2 -appVersion: 0.29.0 +appVersion: 0.30.0 description: Helm chart for the sealed-secrets controller. home: https://github.com/bitnami-labs/sealed-secrets icon: https://bitnami.com/assets/stacks/sealed-secrets/img/sealed-secrets-stack-220x234.png @@ -14,6 +14,6 @@ url: https://github.com/bitnami-labs/sealed-secrets name: sealed-secrets type: application -version: 2.17.2 +version: 2.17.3 sources: - https://github.com/bitnami-labs/sealed-secrets diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/helm/sealed-secrets/README.md new/kubeseal-0.31.0/helm/sealed-secrets/README.md --- old/kubeseal-0.30.0/helm/sealed-secrets/README.md 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/helm/sealed-secrets/README.md 2025-08-14 16:26:26.000000000 +0200 @@ -86,7 +86,7 @@ | ------------------------------------------------- | ------------------------------------------------------------------------------------------------------------------ | ----------------------------------- | | `image.registry` | Sealed Secrets image registry | `docker.io` | | `image.repository` | Sealed Secrets image repository | `bitnami/sealed-secrets-controller` | -| `image.tag` | Sealed Secrets image tag (immutable tags are recommended) | `0.29.0` | +| `image.tag` | Sealed Secrets image tag (immutable tags are recommended) | `0.30.0` | | `image.pullPolicy` | Sealed Secrets image pull policy | `IfNotPresent` | | `image.pullSecrets` | Sealed Secrets image pull secrets | `[]` | | `revisionHistoryLimit` | Number of old history to retain to allow rollback (If not set, default Kubernetes value is set to 10) | `""` | @@ -106,6 +106,7 @@ | `logLevel` | Specifies log level of controller (INFO,ERROR) | `""` | | `logFormat` | Specifies log format (text,json) | `""` | | `maxRetries` | Number of maximum retries | `""` | +| `watchForSecrets` | Specifies whether the Sealed Secrets controller will watch for new secrets | `false` | | `command` | Override default container command | `[]` | | `args` | Override default container args | `[]` | | `livenessProbe.enabled` | Enable livenessProbe on Sealed Secret containers | `true` | diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/helm/sealed-secrets/templates/deployment.yaml new/kubeseal-0.31.0/helm/sealed-secrets/templates/deployment.yaml --- old/kubeseal-0.30.0/helm/sealed-secrets/templates/deployment.yaml 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/helm/sealed-secrets/templates/deployment.yaml 2025-08-14 16:26:26.000000000 +0200 @@ -78,7 +78,7 @@ {{- if .Values.skipRecreate }} - --skip-recreate {{- end }} - {{- if .Values.keyrenewperiod }} + {{- if ne (.Values.keyrenewperiod | toString) "" }} - --key-renew-period - {{ .Values.keyrenewperiod | quote }} {{- end }} @@ -149,6 +149,9 @@ - --max-unseal-retries - {{ .Values.maxRetries | quote }} {{- end }} + {{- if .Values.watchForSecrets }} + - --watch-for-secrets + {{- end }} {{- end }} image: {{ printf "%s/%s:%s" .Values.image.registry .Values.image.repository .Values.image.tag }} imagePullPolicy: {{ .Values.image.pullPolicy }} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/helm/sealed-secrets/values.yaml new/kubeseal-0.31.0/helm/sealed-secrets/values.yaml --- old/kubeseal-0.30.0/helm/sealed-secrets/values.yaml 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/helm/sealed-secrets/values.yaml 2025-08-14 16:26:26.000000000 +0200 @@ -39,7 +39,7 @@ image: registry: docker.io repository: bitnami/sealed-secrets-controller - tag: 0.29.0 + tag: 0.30.0 ## Specify a imagePullPolicy ## Defaults to 'Always' if image tag is 'latest', else set to 'IfNotPresent' ## ref: http://kubernetes.io/docs/user-guide/images/#pre-pulling-images @@ -115,6 +115,9 @@ ## @param maxRetries Number of maximum retries ## maxRetries: "" +## @param watchForSecrets Specifies whether the Sealed Secrets controller will watch for new secrets +## +watchForSecrets: false ## @param command Override default container command ## command: [] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/controller/keys.go new/kubeseal-0.31.0/pkg/controller/keys.go --- old/kubeseal-0.30.0/pkg/controller/keys.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/pkg/controller/keys.go 2025-08-14 16:26:26.000000000 +0200 @@ -29,7 +29,7 @@ return crypto.GeneratePrivateKeyAndCert(keySize, validFor, cn) } -func readKey(secret v1.Secret) (*rsa.PrivateKey, []*x509.Certificate, error) { +func readKey(secret *v1.Secret) (*rsa.PrivateKey, []*x509.Certificate, error) { key, err := keyutil.ParsePrivateKeyPEM(secret.Data[v1.TLSPrivateKeyKey]) if err != nil { return nil, nil, err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/controller/keys_test.go new/kubeseal-0.31.0/pkg/controller/keys_test.go --- old/kubeseal-0.30.0/pkg/controller/keys_test.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/pkg/controller/keys_test.go 2025-08-14 16:26:26.000000000 +0200 @@ -60,7 +60,7 @@ Type: v1.SecretTypeTLS, } - key2, cert2, err := readKey(secret) + key2, cert2, err := readKey(&secret) if err != nil { t.Errorf("readKey() failed with: %v", err) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/controller/main.go new/kubeseal-0.31.0/pkg/controller/main.go --- old/kubeseal-0.30.0/pkg/controller/main.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/pkg/controller/main.go 2025-08-14 16:26:26.000000000 +0200 @@ -13,6 +13,8 @@ "syscall" "time" + "k8s.io/apimachinery/pkg/watch" + v1 "k8s.io/api/core/v1" "k8s.io/apimachinery/pkg/api/errors" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" @@ -57,6 +59,7 @@ PrivateKeyAnnotations string PrivateKeyLabels string MaxRetries int + WatchForSecrets bool } func initKeyPrefix(keyPrefix string) (string, error) { @@ -85,23 +88,31 @@ keyRegistry := NewKeyRegistry(client, namespace, prefix, label, keysize) sort.Sort(ssv1alpha1.ByCreationTimestamp(items)) for _, secret := range items { - key, certs, err := readKey(secret) + err = registryNewKeyWithSecret(&secret, keyRegistry, keyOrderPriority) if err != nil { - slog.Error("Error reading key", "secret", secret.Name, "error", err) - } - - // Select ordering time based on the keyOrderPriority flag - orderingTime := getKeyOrderPriority(keyOrderPriority, certs[0], secret) - - if err := keyRegistry.registerNewKey(secret.Name, key, certs[0], orderingTime); err != nil { return nil, err } - slog.Info("registered private key", "secretname", secret.Name) } return keyRegistry, nil } -func getKeyOrderPriority(keyOrderPriority string, cert *x509.Certificate, secret v1.Secret) time.Time { +func registryNewKeyWithSecret(secret *v1.Secret, keyRegistry *KeyRegistry, keyOrderPriority string) error { + key, certs, err := readKey(secret) + if err != nil { + slog.Error("Error reading key", "secret", secret.Name, "error", err) + } + + // Select ordering time based on the keyOrderPriority flag + orderingTime := getKeyOrderPriority(keyOrderPriority, certs[0], secret) + + if err := keyRegistry.registerNewKey(secret.Name, key, certs[0], orderingTime); err != nil { + return err + } + slog.Info("registered private key", "secretname", secret.Name) + return nil +} + +func getKeyOrderPriority(keyOrderPriority string, cert *x509.Certificate, secret *v1.Secret) time.Time { switch keyOrderPriority { case "CertNotBefore": return cert.NotBefore @@ -113,6 +124,37 @@ return cert.NotBefore } +func watchKeyRegistry(ctx context.Context, client kubernetes.Interface, keyRegistry *KeyRegistry, namespace, keyOrderPriority string) error { + watcher, err := client.CoreV1().Secrets(namespace).Watch(ctx, metav1.ListOptions{ + LabelSelector: keySelector.String(), + }) + if err != nil { + return err + } + + for event := range watcher.ResultChan() { + secret := event.Object.(*v1.Secret) + if secret == nil { + continue + } + + switch event.Type { + case watch.Added: + err = registryNewKeyWithSecret(secret, keyRegistry, keyOrderPriority) + if err != nil { + return err + } + case watch.Modified: + case watch.Deleted: + case watch.Error: + case watch.Bookmark: + default: + slog.Info("Unexpected watch event", "type", event.Type) + } + } + return nil +} + func myNamespace() string { if ns := os.Getenv("POD_NAMESPACE"); ns != "" { return ns @@ -232,6 +274,13 @@ go controller.Run(stop) + if f.WatchForSecrets { + go func() { + err := watchKeyRegistry(ctx, clientset, keyRegistry, myNs, f.KeyOrderPriority) + slog.Error("Watch fo secrets", "err", err) + }() + } + if f.AdditionalNamespaces != "" { addNS := removeDuplicates(strings.Split(f.AdditionalNamespaces, ",")) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/controller/metrics.go new/kubeseal-0.31.0/pkg/controller/metrics.go --- old/kubeseal-0.30.0/pkg/controller/metrics.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/pkg/controller/metrics.go 2025-08-14 16:26:26.000000000 +0200 @@ -117,7 +117,7 @@ return } for _, condition := range ssecret.Status.Conditions { - conditionInfo.MetricVec.DeleteLabelValues(ssecret.Namespace, ssecret.Name, string(condition.Type), labelInstance) + conditionInfo.DeleteLabelValues(ssecret.Namespace, ssecret.Name, string(condition.Type), ssecret.Labels["app.kubernetes.io/instance"]) } } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/controller/metrics_test.go new/kubeseal-0.31.0/pkg/controller/metrics_test.go --- old/kubeseal-0.30.0/pkg/controller/metrics_test.go 1970-01-01 01:00:00.000000000 +0100 +++ new/kubeseal-0.31.0/pkg/controller/metrics_test.go 2025-08-14 16:26:26.000000000 +0200 @@ -0,0 +1,232 @@ +package controller + +import ( + "testing" + + ssv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1" + "github.com/prometheus/client_golang/prometheus" + dto "github.com/prometheus/client_model/go" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" +) + +// setupTestMetrics creates a fresh metrics setup for testing +func setupTestMetrics() *prometheus.Registry { + registry := prometheus.NewRegistry() + + // Create a new conditionInfo metric for testing + testConditionInfo := prometheus.NewGaugeVec( + prometheus.GaugeOpts{ + Namespace: metricNamespace, + Name: "condition_info", + Help: "Current SealedSecret condition status. Values are -1 (false), 0 (unknown or absent), 1 (true)", + }, + []string{labelNamespace, labelName, labelCondition, labelInstance}, + ) + + registry.MustRegister(testConditionInfo) + + // Replace the global conditionInfo for testing + conditionInfo = testConditionInfo + + return registry +} + +func TestObserveCondition(t *testing.T) { + registry := setupTestMetrics() + + ssecret := &ssv1alpha1.SealedSecret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test-ns", + Name: "test-secret", + Labels: map[string]string{ + "app.kubernetes.io/instance": "test-instance", + }, + }, + Status: &ssv1alpha1.SealedSecretStatus{ + Conditions: []ssv1alpha1.SealedSecretCondition{ + { + Type: ssv1alpha1.SealedSecretSynced, + Status: corev1.ConditionTrue, + }, + }, + }, + } + + ObserveCondition(ssecret) + + // Verify metric was created + metricFamilies, err := registry.Gather() + if err != nil { + t.Fatalf("Failed to gather metrics: %v", err) + } + + found := false + for _, mf := range metricFamilies { + if mf.GetName() == "sealed_secrets_controller_condition_info" { + for _, metric := range mf.GetMetric() { + labels := metric.GetLabel() + if getLabel(labels, "namespace") == "test-ns" && + getLabel(labels, "name") == "test-secret" && + getLabel(labels, "condition") == "Synced" && + getLabel(labels, "ss_app_kubernetes_io_instance") == "test-instance" { + found = true + if metric.GetGauge().GetValue() != 1.0 { + t.Errorf("Expected metric value 1.0, got %f", metric.GetGauge().GetValue()) + } + } + } + } + } + + if !found { + t.Error("Expected metric not found") + } +} + +func TestUnregisterCondition(t *testing.T) { + registry := setupTestMetrics() + + ssecret := &ssv1alpha1.SealedSecret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test-ns", + Name: "test-secret", + Labels: map[string]string{ + "app.kubernetes.io/instance": "test-instance", + }, + }, + Status: &ssv1alpha1.SealedSecretStatus{ + Conditions: []ssv1alpha1.SealedSecretCondition{ + { + Type: ssv1alpha1.SealedSecretSynced, + Status: corev1.ConditionTrue, + }, + }, + }, + } + + // First observe the condition to create the metric + ObserveCondition(ssecret) + + // Verify metric exists + metricFamilies, err := registry.Gather() + if err != nil { + t.Fatalf("Failed to gather metrics: %v", err) + } + + metricExists := func() bool { + for _, mf := range metricFamilies { + if mf.GetName() == "sealed_secrets_controller_condition_info" { + for _, metric := range mf.GetMetric() { + labels := metric.GetLabel() + if getLabel(labels, "namespace") == "test-ns" && + getLabel(labels, "name") == "test-secret" && + getLabel(labels, "condition") == "Synced" && + getLabel(labels, "ss_app_kubernetes_io_instance") == "test-instance" { + return true + } + } + } + } + return false + } + + if !metricExists() { + t.Fatal("Metric should exist before unregistering") + } + + // Now unregister the condition + UnregisterCondition(ssecret) + + // Verify metric was removed + metricFamilies, err = registry.Gather() + if err != nil { + t.Fatalf("Failed to gather metrics: %v", err) + } + + if metricExists() { + t.Error("Metric should have been removed after unregistering") + } +} + +func TestUnregisterConditionWithNilStatus(t *testing.T) { + ssecret := &ssv1alpha1.SealedSecret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test-ns", + Name: "test-secret", + }, + Status: nil, + } + + // Should not panic + UnregisterCondition(ssecret) +} + +func TestObserveConditionWithNilStatus(t *testing.T) { + ssecret := &ssv1alpha1.SealedSecret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test-ns", + Name: "test-secret", + }, + Status: nil, + } + + // Should not panic + ObserveCondition(ssecret) +} + +func TestUnregisterConditionWithMissingLabel(t *testing.T) { + registry := setupTestMetrics() + + ssecret := &ssv1alpha1.SealedSecret{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "test-ns", + Name: "test-secret", + // Missing app.kubernetes.io/instance label + }, + Status: &ssv1alpha1.SealedSecretStatus{ + Conditions: []ssv1alpha1.SealedSecretCondition{ + { + Type: ssv1alpha1.SealedSecretSynced, + Status: corev1.ConditionTrue, + }, + }, + }, + } + + // First observe the condition to create the metric (with empty instance label) + ObserveCondition(ssecret) + + // Now unregister the condition - should work with empty instance label + UnregisterCondition(ssecret) + + // Verify metric was removed + metricFamilies, err := registry.Gather() + if err != nil { + t.Fatalf("Failed to gather metrics: %v", err) + } + + for _, mf := range metricFamilies { + if mf.GetName() == "sealed_secrets_controller_condition_info" { + for _, metric := range mf.GetMetric() { + labels := metric.GetLabel() + if getLabel(labels, "namespace") == "test-ns" && + getLabel(labels, "name") == "test-secret" && + getLabel(labels, "condition") == "Synced" && + getLabel(labels, "ss_app_kubernetes_io_instance") == "" { + t.Error("Metric should have been removed after unregistering") + } + } + } + } +} + +// Helper function to get label value from metric labels +func getLabel(labels []*dto.LabelPair, name string) string { + for _, label := range labels { + if label.GetName() == name { + return label.GetValue() + } + } + return "" +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/kubeseal/kubeseal.go new/kubeseal-0.31.0/pkg/kubeseal/kubeseal.go --- old/kubeseal-0.30.0/pkg/kubeseal/kubeseal.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/pkg/kubeseal/kubeseal.go 2025-08-14 16:26:26.000000000 +0200 @@ -252,14 +252,22 @@ secret.Annotations = ssv1alpha1.UpdateScopeAnnotations(secret.Annotations, scope) } - if ssv1alpha1.SecretScope(secret) != ssv1alpha1.ClusterWideScope && secret.GetNamespace() == "" { - ns, _, err := clientConfig.Namespace() - if clientcmd.IsEmptyConfig(err) { + if ssv1alpha1.SecretScope(secret) != ssv1alpha1.ClusterWideScope { + ns, namespaceSet, err := clientConfig.Namespace() + if clientcmd.IsEmptyConfig(err) && secret.GetNamespace() == "" { return fmt.Errorf("input secret has no namespace and cannot infer the namespace automatically when no kube config is available") } else if err != nil { return err } - secret.SetNamespace(ns) + + // Check for namespace mismatch when namespace is explicitly set via command line + if namespaceSet && secret.GetNamespace() != "" && secret.GetNamespace() != ns { + return fmt.Errorf("namespace mismatch: input secret is in namespace %q but %q was specified", secret.GetNamespace(), ns) + } + + if secret.GetNamespace() == "" { + secret.SetNamespace(ns) + } } // Strip read-only server-side ObjectMeta (if present) @@ -278,7 +286,7 @@ if err = sealedSecretOutput(out, outputFormat, codecs, ssecret); err != nil { return err } - //return nil + // return nil } return nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/pkg/kubeseal/kubeseal_test.go new/kubeseal-0.31.0/pkg/kubeseal/kubeseal_test.go --- old/kubeseal-0.30.0/pkg/kubeseal/kubeseal_test.go 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/pkg/kubeseal/kubeseal_test.go 2025-08-14 16:26:26.000000000 +0200 @@ -19,19 +19,18 @@ "testing" "time" - "k8s.io/apimachinery/pkg/util/yaml" - "k8s.io/utils/strings/slices" - - flag "github.com/spf13/pflag" - "github.com/google/go-cmp/cmp" "github.com/google/go-cmp/cmp/cmpopts" v1 "k8s.io/api/core/v1" metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/apimachinery/pkg/runtime" + "k8s.io/apimachinery/pkg/util/yaml" "k8s.io/client-go/kubernetes/scheme" + "k8s.io/client-go/rest" "k8s.io/client-go/tools/clientcmd" + clientcmdapi "k8s.io/client-go/tools/clientcmd/api" "k8s.io/client-go/util/keyutil" + "k8s.io/utils/strings/slices" ssv1alpha1 "github.com/bitnami-labs/sealed-secrets/pkg/apis/sealedsecrets/v1alpha1" "github.com/bitnami-labs/sealed-secrets/pkg/crypto" @@ -113,36 +112,12 @@ /* repeated from main here... STARTs */ -func initClient(kubeConfigPath string, cfgOverrides *clientcmd.ConfigOverrides, r io.Reader) clientcmd.ClientConfig { - loadingRules := clientcmd.NewDefaultClientConfigLoadingRules() - loadingRules.DefaultClientConfig = &clientcmd.DefaultClientConfig - loadingRules.ExplicitPath = kubeConfigPath - return clientcmd.NewInteractiveDeferredLoadingClientConfig(loadingRules, cfgOverrides, r) -} - func testClientConfig() clientcmd.ClientConfig { - return initClient("", testConfigOverrides(), os.Stdin) + return &mockClientConfig{namespace: "testns", namespaceSet: false} } /* repeated from main here... ENDs */ -func initUsualKubectlFlagsForTests(overrides *clientcmd.ConfigOverrides, flagset *flag.FlagSet) { - kflags := clientcmd.RecommendedConfigOverrideFlags("") - clientcmd.BindOverrideFlags(overrides, flagset, kflags) -} - -func testConfigOverrides() *clientcmd.ConfigOverrides { - flagset := flag.NewFlagSet("test", flag.PanicOnError) - var overrides clientcmd.ConfigOverrides - initUsualKubectlFlagsForTests(&overrides, flagset) - err := flagset.Parse([]string{"-n", "default"}) - if err != nil { - fmt.Printf("flagset parse err: %v\n", err) - os.Exit(1) - } - return &overrides -} - func TestOpenCertFile(t *testing.T) { ctx := context.Background() clientConfig := testClientConfig() @@ -212,7 +187,7 @@ s2 := mkTestSecret(t, "bar", "2", withSecretName("s2"), asYAML(tc.asYaml)) multiDocYaml := fmt.Sprintf("%s%s%s", s1, tc.inputSeparator, s2) - clientConfig := testClientConfig() + clientConfig := &mockClientConfig{namespace: "testns", namespaceSet: false} outputFormat := tc.outputFormat inbuf := bytes.Buffer{} _, err = bytes.NewBuffer([]byte(multiDocYaml)).WriteTo(&inbuf) @@ -432,7 +407,11 @@ for i, tc := range testCases { t.Run(fmt.Sprint(i), func(t *testing.T) { - clientConfig := testClientConfig() + clientConfig := &mockClientConfig{namespace: "testns", namespaceSet: false} + // For test cases where the secret has no namespace and we expect it to be filled with "default" + if tc.secret.GetNamespace() == "" && tc.want.GetNamespace() == "default" { + clientConfig = &mockClientConfig{namespace: "default", namespaceSet: true} + } outputFormat := "json" info, ok := runtime.SerializerInfoForMediaType(scheme.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON) if !ok { @@ -553,7 +532,7 @@ } func mkTestSealedSecret(t *testing.T, pubKey *rsa.PublicKey, key, value string, opts ...mkTestSecretOpt) []byte { - clientConfig := testClientConfig() + clientConfig := &mockClientConfig{namespace: "testns", namespaceSet: false} outputFormat := "json" inbuf := bytes.NewBuffer(mkTestSecret(t, key, value, opts...)) var outbuf bytes.Buffer @@ -687,7 +666,7 @@ } func TestMergeInto(t *testing.T) { - clientConfig := testClientConfig() + clientConfig := &mockClientConfig{namespace: "testns", namespaceSet: false} outputFormat := "json" pubKey, privKeys := newTestKeyPair(t) @@ -1011,3 +990,138 @@ t.Errorf("got: %q, want: %q", got, want) } } + +func TestNamespaceMismatchValidation(t *testing.T) { + key, err := ParseKey(strings.NewReader(testCert)) + if err != nil { + t.Fatalf("Failed to parse test key: %v", err) + } + + testCases := []struct { + name string + secret v1.Secret + configNamespace string + namespaceSet bool + expectedError string + }{ + { + name: "namespace mismatch should fail", + secret: v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mysecret", + Namespace: "secretns", + }, + Data: map[string][]byte{ + "foo": []byte("sekret"), + }, + }, + configNamespace: "flagns", + namespaceSet: true, + expectedError: "namespace mismatch: input secret is in namespace \"secretns\" but \"flagns\" was specified", + }, + { + name: "matching namespaces should succeed", + secret: v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mysecret", + Namespace: "samens", + }, + Data: map[string][]byte{ + "foo": []byte("sekret"), + }, + }, + configNamespace: "samens", + namespaceSet: true, + expectedError: "", + }, + { + name: "no namespace flag set should succeed", + secret: v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mysecret", + Namespace: "secretns", + }, + Data: map[string][]byte{ + "foo": []byte("sekret"), + }, + }, + configNamespace: "flagns", + namespaceSet: false, + expectedError: "", + }, + { + name: "empty secret namespace with flag set should succeed", + secret: v1.Secret{ + ObjectMeta: metav1.ObjectMeta{ + Name: "mysecret", + Namespace: "", + }, + Data: map[string][]byte{ + "foo": []byte("sekret"), + }, + }, + configNamespace: "flagns", + namespaceSet: true, + expectedError: "", + }, + } + + for _, tc := range testCases { + t.Run(tc.name, func(t *testing.T) { + // Create a mock client config that returns the test namespace + mockClientConfig := &mockClientConfig{ + namespace: tc.configNamespace, + namespaceSet: tc.namespaceSet, + } + + outputFormat := "json" + info, ok := runtime.SerializerInfoForMediaType(scheme.Codecs.SupportedMediaTypes(), runtime.ContentTypeJSON) + if !ok { + t.Fatalf("binary can't serialize JSON") + } + enc := scheme.Codecs.EncoderForVersion(info.Serializer, v1.SchemeGroupVersion) + inbuf := bytes.Buffer{} + if err := enc.Encode(&tc.secret, &inbuf); err != nil { + t.Fatalf("Error encoding: %v", err) + } + + outbuf := bytes.Buffer{} + err := Seal(mockClientConfig, outputFormat, &inbuf, &outbuf, scheme.Codecs, key, ssv1alpha1.DefaultScope, false, "", "") + + if tc.expectedError != "" { + if err == nil { + t.Fatalf("Expected error %q but got nil", tc.expectedError) + } + if got, want := err.Error(), tc.expectedError; got != want { + t.Errorf("got error: %q, want: %q", got, want) + } + } else { + if err != nil { + t.Fatalf("Unexpected error: %v", err) + } + } + }) + } +} + +// mockClientConfig implements clientcmd.ClientConfig for testing +type mockClientConfig struct { + namespace string + namespaceSet bool +} + +func (m *mockClientConfig) Namespace() (string, bool, error) { + return m.namespace, m.namespaceSet, nil +} + +func (m *mockClientConfig) ClientConfig() (*rest.Config, error) { + return &rest.Config{}, nil +} + +func (m *mockClientConfig) ConfigAccess() clientcmd.ConfigAccess { + return nil +} + +func (m *mockClientConfig) RawConfig() (clientcmdapi.Config, error) { + return clientcmdapi.Config{}, nil +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/kubeseal-0.30.0/versions.env new/kubeseal-0.31.0/versions.env --- old/kubeseal-0.30.0/versions.env 2025-06-12 10:37:26.000000000 +0200 +++ new/kubeseal-0.31.0/versions.env 2025-08-14 16:26:26.000000000 +0200 @@ -1,2 +1,2 @@ -GO_VERSION=1.24.4 +GO_VERSION=1.24.6 GO_VERSION_LIST="[\"$GO_VERSION\"]" ++++++ kubeseal.obsinfo ++++++ --- /var/tmp/diff_new_pack.wf3Pbe/_old 2025-08-21 16:57:00.668151988 +0200 +++ /var/tmp/diff_new_pack.wf3Pbe/_new 2025-08-21 16:57:00.672152154 +0200 @@ -1,5 +1,5 @@ name: kubeseal -version: 0.30.0 -mtime: 1749717446 -commit: 6e0beae85afcd1e981b4b56f22399ded6cbe6a88 +version: 0.31.0 +mtime: 1755181586 +commit: 443107a1fd256cb9e2ff3a3290aa79d722f840ee ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/kubeseal/vendor.tar.gz /work/SRC/openSUSE:Factory/.kubeseal.new.29662/vendor.tar.gz differ: char 38, line 1