Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package polaris for openSUSE:Factory checked in at 2026-02-25 21:11:42 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/polaris (Old) and /work/SRC/openSUSE:Factory/.polaris.new.1977 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "polaris" Wed Feb 25 21:11:42 2026 rev:45 rq:1335046 version:10.1.5 Changes: -------- --- /work/SRC/openSUSE:Factory/polaris/polaris.changes 2026-02-02 14:56:26.469680330 +0100 +++ /work/SRC/openSUSE:Factory/.polaris.new.1977/polaris.changes 2026-02-25 21:11:59.733698220 +0100 @@ -1,0 +2,8 @@ +Wed Feb 25 09:52:15 UTC 2026 - Johannes Kastl <[email protected]> + +- Update to version 10.1.5: + * INS-1950: Go 1.26 and bump libs for polaris (#1172) + * Revert "Go 1.26" + * Go 1.26 + +------------------------------------------------------------------- Old: ---- polaris-10.1.4.obscpio New: ---- polaris-10.1.5.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ polaris.spec ++++++ --- /var/tmp/diff_new_pack.OuxDFz/_old 2026-02-25 21:12:00.309722005 +0100 +++ /var/tmp/diff_new_pack.OuxDFz/_new 2026-02-25 21:12:00.309722005 +0100 @@ -17,7 +17,7 @@ Name: polaris -Version: 10.1.4 +Version: 10.1.5 Release: 0 Summary: Validation of best practices in your Kubernetes clusters License: Apache-2.0 @@ -26,7 +26,7 @@ Source1: vendor.tar.gz BuildRequires: bash-completion BuildRequires: fish -BuildRequires: go1.25 >= 1.25.5 +BuildRequires: go1.26 >= 1.26.0 BuildRequires: zsh %description ++++++ _service ++++++ --- /var/tmp/diff_new_pack.OuxDFz/_old 2026-02-25 21:12:00.349723657 +0100 +++ /var/tmp/diff_new_pack.OuxDFz/_new 2026-02-25 21:12:00.353723822 +0100 @@ -3,7 +3,7 @@ <param name="url">https://github.com/FairwindsOps/polaris</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">10.1.4</param> + <param name="revision">10.1.5</param> <param name="versionformat">@PARENT_TAG@</param> <param name="changesgenerate">enable</param> </service> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.OuxDFz/_old 2026-02-25 21:12:00.373724648 +0100 +++ /var/tmp/diff_new_pack.OuxDFz/_new 2026-02-25 21:12:00.377724813 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/FairwindsOps/polaris</param> - <param name="changesrevision">517c8899d701bd8e19cdd9ba0c22ddf63e68eb93</param></service></servicedata> + <param name="changesrevision">a5af7bb34ea1c377ece9cef5a8ff9e75dc775849</param></service></servicedata> (No newline at EOF) ++++++ polaris-10.1.4.obscpio -> polaris-10.1.5.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/.circleci/config.yml new/polaris-10.1.5/.circleci/config.yml --- old/polaris-10.1.4/.circleci/config.yml 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/.circleci/config.yml 2026-02-24 16:22:14.000000000 +0100 @@ -120,7 +120,7 @@ test: docker: - - image: cimg/go:1.25.5 + - image: cimg/go:1.26.0 steps: - checkout - *set_environment_variables @@ -136,7 +136,7 @@ # The goreleaser image tag determins the version of Go. # Manually check goreleaser images for their version of Go. # Ref: https://hub.docker.com/r/goreleaser/goreleaser/tags - - image: goreleaser/goreleaser:v2.13.1 + - image: goreleaser/goreleaser:v2.14.0 steps: - checkout - setup_remote_docker diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/.goreleaser.yml.envsubst new/polaris-10.1.5/.goreleaser.yml.envsubst --- old/polaris-10.1.4/.goreleaser.yml.envsubst 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/.goreleaser.yml.envsubst 2026-02-24 16:22:14.000000000 +0100 @@ -30,6 +30,10 @@ goarm: - 6 - 7 + # Go does not support windows/arm (32-bit); only windows/arm64 is supported. + ignore: + - goos: windows + goarch: arm archives: - id: polaris builds: ["polaris"] diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/cmd/polaris/audit.go new/polaris-10.1.5/cmd/polaris/audit.go --- old/polaris-10.1.4/cmd/polaris/audit.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/cmd/polaris/audit.go 2026-02-24 16:22:14.000000000 +0100 @@ -190,7 +190,7 @@ var outputBytes []byte var err error if outputFormat == "score" { - outputBytes = []byte(fmt.Sprintf("%d\n", auditData.GetSummary().GetScore())) + outputBytes = fmt.Appendf(nil, "%d\n", auditData.GetSummary().GetScore()) } else if outputFormat == "yaml" { var jsonBytes []byte jsonBytes, err = json.Marshal(auditData) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/go.mod new/polaris-10.1.5/go.mod --- old/polaris-10.1.4/go.mod 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/go.mod 2026-02-24 16:22:14.000000000 +0100 @@ -1,6 +1,6 @@ module github.com/fairwindsops/polaris -go 1.25.5 +go 1.26.0 require ( github.com/fairwindsops/controller-utils v0.3.4 @@ -15,9 +15,9 @@ github.com/thoas/go-funk v0.9.3 gomodules.xyz/jsonpatch/v2 v2.5.0 gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.35.0 - k8s.io/apimachinery v0.35.0 - k8s.io/client-go v0.35.0 + k8s.io/api v0.35.1 + k8s.io/apimachinery v0.35.1 + k8s.io/client-go v0.35.1 sigs.k8s.io/controller-runtime v0.23.1 sigs.k8s.io/yaml v1.6.0 ) @@ -69,20 +69,20 @@ github.com/x448/float16 v0.8.4 // indirect go.yaml.in/yaml/v2 v2.4.3 // indirect go.yaml.in/yaml/v3 v3.0.4 // indirect - golang.org/x/net v0.49.0 // indirect - golang.org/x/oauth2 v0.34.0 // indirect - golang.org/x/sys v0.40.0 // indirect - golang.org/x/term v0.39.0 // indirect - golang.org/x/text v0.33.0 // indirect + golang.org/x/net v0.50.0 // indirect + golang.org/x/oauth2 v0.35.0 // indirect + golang.org/x/sys v0.41.0 // indirect + golang.org/x/term v0.40.0 // indirect + golang.org/x/text v0.34.0 // indirect golang.org/x/time v0.14.0 // indirect google.golang.org/protobuf v1.36.11 // indirect gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - k8s.io/apiextensions-apiserver v0.35.0 // indirect + k8s.io/apiextensions-apiserver v0.35.1 // indirect k8s.io/klog/v2 v2.130.1 // indirect k8s.io/kube-openapi v0.0.0-20260127142750-a19766b6e2d4 // indirect - k8s.io/utils v0.0.0-20260108192941-914a6e750570 // indirect + k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 // 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.2-0.20260122202528-d9cc6641c482 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.2 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/go.sum new/polaris-10.1.5/go.sum --- old/polaris-10.1.4/go.sum 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/go.sum 2026-02-24 16:22:14.000000000 +0100 @@ -189,8 +189,12 @@ golang.org/x/net v0.47.0/go.mod h1:/jNxtkgq5yWUGYkaZGqo27cfGZ1c5Nen03aYrrKpVRU= golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o= golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8= +golang.org/x/net v0.50.0 h1:ucWh9eiCGyDR3vtzso0WMQinm2Dnt8cFMuQa9K33J60= +golang.org/x/net v0.50.0/go.mod h1:UgoSli3F/pBgdJBHCTc+tp3gmrU4XswgGRgtnwWTfyM= golang.org/x/oauth2 v0.34.0 h1:hqK/t4AKgbqWkdkcAeI8XLmbK+4m4G5YeQRrmiotGlw= golang.org/x/oauth2 v0.34.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= +golang.org/x/oauth2 v0.35.0 h1:Mv2mzuHuZuY2+bkyWXIHMfhNdJAdwW3FuWeCPYN5GVQ= +golang.org/x/oauth2 v0.35.0/go.mod h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA= 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= @@ -205,16 +209,22 @@ golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ= golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +golang.org/x/sys v0.41.0 h1:Ivj+2Cp/ylzLiEU89QhWblYnOE9zerudt9Ftecq2C6k= +golang.org/x/sys v0.41.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= 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/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY= golang.org/x/term v0.39.0/go.mod h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww= +golang.org/x/term v0.40.0 h1:36e4zGLqU4yhjlmxEaagx2KuYbJq3EwY8K943ZsHcvg= +golang.org/x/term v0.40.0/go.mod h1:w2P8uVp06p2iyKKuvXIm7N/y0UCRt3UfJTfZ7oOpglM= 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.31.0 h1:aC8ghyu4JhP8VojJ2lEHBnochRno1sgL6nEi9WGFGMM= golang.org/x/text v0.31.0/go.mod h1:tKRAlv61yKIjGGHX/4tP1LTbc13YSec1pxVEWXzfoeM= golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE= golang.org/x/text v0.33.0/go.mod h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8= +golang.org/x/text v0.34.0 h1:oL/Qq0Kdaqxa1KbNeMKwQq0reLCCaFtqu2eNuSeNHbk= +golang.org/x/text v0.34.0/go.mod h1:homfLqTYRFyVYemLBFl5GgL/DWEiH5wcsQ5gSh1yziA= golang.org/x/time v0.14.0 h1:MRx4UaLrDotUKUdCIqzPC48t1Y9hANFKIRpNx+Te8PI= golang.org/x/time v0.14.0/go.mod h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4= golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ= @@ -248,18 +258,26 @@ k8s.io/api v0.34.2/go.mod h1:MMBPaWlED2a8w4RSeanD76f7opUoypY8TFYkSM+3XHw= k8s.io/api v0.35.0 h1:iBAU5LTyBI9vw3L5glmat1njFK34srdLmktWwLTprlY= k8s.io/api v0.35.0/go.mod h1:AQ0SNTzm4ZAczM03QH42c7l3bih1TbAXYo0DkF8ktnA= +k8s.io/api v0.35.1 h1:0PO/1FhlK/EQNVK5+txc4FuhQibV25VLSdLMmGpDE/Q= +k8s.io/api v0.35.1/go.mod h1:28uR9xlXWml9eT0uaGo6y71xK86JBELShLy4wR1XtxM= k8s.io/apiextensions-apiserver v0.34.1 h1:NNPBva8FNAPt1iSVwIE0FsdrVriRXMsaWFMqJbII2CI= k8s.io/apiextensions-apiserver v0.34.1/go.mod h1:hP9Rld3zF5Ay2Of3BeEpLAToP+l4s5UlxiHfqRaRcMc= k8s.io/apiextensions-apiserver v0.35.0 h1:3xHk2rTOdWXXJM+RDQZJvdx0yEOgC0FgQ1PlJatA5T4= k8s.io/apiextensions-apiserver v0.35.0/go.mod h1:E1Ahk9SADaLQ4qtzYFkwUqusXTcaV2uw3l14aqpL2LU= +k8s.io/apiextensions-apiserver v0.35.1 h1:p5vvALkknlOcAqARwjS20kJffgzHqwyQRM8vHLwgU7w= +k8s.io/apiextensions-apiserver v0.35.1/go.mod h1:2CN4fe1GZ3HMe4wBr25qXyJnJyZaquy4nNlNmb3R7AQ= k8s.io/apimachinery v0.34.2 h1:zQ12Uk3eMHPxrsbUJgNF8bTauTVR2WgqJsTmwTE/NW4= k8s.io/apimachinery v0.34.2/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= k8s.io/apimachinery v0.35.0 h1:Z2L3IHvPVv/MJ7xRxHEtk6GoJElaAqDCCU0S6ncYok8= k8s.io/apimachinery v0.35.0/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= +k8s.io/apimachinery v0.35.1 h1:yxO6gV555P1YV0SANtnTjXYfiivaTPvCTKX6w6qdDsU= +k8s.io/apimachinery v0.35.1/go.mod h1:jQCgFZFR1F4Ik7hvr2g84RTJSZegBc8yHgFWKn//hns= k8s.io/client-go v0.34.2 h1:Co6XiknN+uUZqiddlfAjT68184/37PS4QAzYvQvDR8M= k8s.io/client-go v0.34.2/go.mod h1:2VYDl1XXJsdcAxw7BenFslRQX28Dxz91U9MWKjX97fE= k8s.io/client-go v0.35.0 h1:IAW0ifFbfQQwQmga0UdoH0yvdqrbwMdq9vIFEhRpxBE= k8s.io/client-go v0.35.0/go.mod h1:q2E5AAyqcbeLGPdoRB+Nxe3KYTfPce1Dnu1myQdqz9o= +k8s.io/client-go v0.35.1 h1:+eSfZHwuo/I19PaSxqumjqZ9l5XiTEKbIaJ+j1wLcLM= +k8s.io/client-go v0.35.1/go.mod h1:1p1KxDt3a0ruRfc/pG4qT/3oHmUj1AhSHEcxNSGg+OA= 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-20251125145642-4e65d59e963e h1:iW9ChlU0cU16w8MpVYjXk12dqQ4BPFBEgif+ap7/hqQ= @@ -270,6 +288,8 @@ k8s.io/utils v0.0.0-20251002143259-bc988d571ff4/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= k8s.io/utils v0.0.0-20260108192941-914a6e750570 h1:JT4W8lsdrGENg9W+YwwdLJxklIuKWdRm+BC+xt33FOY= k8s.io/utils v0.0.0-20260108192941-914a6e750570/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= +k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2 h1:AZYQSJemyQB5eRxqcPky+/7EdBj0xi3g0ZcxxJ7vbWU= +k8s.io/utils v0.0.0-20260210185600-b8788abfbbc2/go.mod h1:xDxuJ0whA3d0I4mf/C4ppKHxXynQ+fxnkmQH0vTHnuk= sigs.k8s.io/controller-runtime v0.22.4 h1:GEjV7KV3TY8e+tJ2LCTxUTanW4z/FmNB7l327UfMq9A= sigs.k8s.io/controller-runtime v0.22.4/go.mod h1:+QX1XUpTXN4mLoblf4tqr5CQcyHPAki2HLXqQMY6vh8= sigs.k8s.io/controller-runtime v0.23.1 h1:TjJSM80Nf43Mg21+RCy3J70aj/W6KyvDtOlpKf+PupE= @@ -282,5 +302,7 @@ sigs.k8s.io/structured-merge-diff/v6 v6.3.1/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482 h1:2WOzJpHUBVrrkDjU4KBT8n5LDcj824eX0I5UKcgeRUs= sigs.k8s.io/structured-merge-diff/v6 v6.3.2-0.20260122202528-d9cc6641c482/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/structured-merge-diff/v6 v6.3.2 h1:kwVWMx5yS1CrnFWA/2QHyRVJ8jM6dBA80uLmm0wJkk8= +sigs.k8s.io/structured-merge-diff/v6 v6.3.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/polaris-10.1.4/pkg/config/config_test.go new/polaris-10.1.5/pkg/config/config_test.go --- old/polaris-10.1.4/pkg/config/config_test.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/config/config_test.go 2026-02-24 16:22:14.000000000 +0100 @@ -142,19 +142,19 @@ } func TestConfigWithCustomChecks(t *testing.T) { - valid := map[string]interface{}{ - "securityContext": map[string]interface{}{ + valid := map[string]any{ + "securityContext": map[string]any{ "foo": "bar", }, } - invalid := map[string]interface{}{ - "notSecurityContext": map[string]interface{}{}, + invalid := map[string]any{ + "notSecurityContext": map[string]any{}, } parsedConf, err := Parse([]byte(confCustomChecks)) assert.NoError(t, err, "Expected no error when parsing YAML config") assert.Equal(t, 1, len(parsedConf.CustomChecks)) - check, err := parsedConf.CustomChecks["foo"].TemplateForResource(map[string]interface{}{}) + check, err := parsedConf.CustomChecks["foo"].TemplateForResource(map[string]any{}) isValid, _, err := check.CheckObject(context.TODO(), valid) assert.NoError(t, err) assert.Equal(t, true, isValid) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/config/schema.go new/polaris-10.1.5/pkg/config/schema.go --- old/polaris-10.1.4/pkg/config/schema.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/config/schema.go 2026-02-24 16:22:14.000000000 +0100 @@ -21,6 +21,8 @@ "errors" "fmt" "io" + "maps" + "slices" "strings" "text/template" @@ -58,34 +60,34 @@ type Mutation struct { Path string Op string - Value interface{} + Value any Comment string } // SchemaCheck is a Polaris check that runs using JSON Schema type SchemaCheck struct { - ID string `yaml:"id" json:"id"` - Category string `yaml:"category" json:"category"` - SuccessMessage string `yaml:"successMessage" json:"successMessage"` - FailureMessage string `yaml:"failureMessage" json:"failureMessage"` - Controllers includeExcludeList `yaml:"controllers" json:"controllers"` - Containers includeExcludeList `yaml:"containers" json:"containers"` - Target TargetKind `yaml:"target" json:"target"` - SchemaTarget TargetKind `yaml:"schemaTarget" json:"schemaTarget"` - Schema map[string]interface{} `yaml:"schema" json:"schema"` - SchemaString string `yaml:"schemaString" json:"schemaString"` - Validator jsonschema.Schema `yaml:"-" json:"-"` - AdditionalSchemas map[string]map[string]interface{} `yaml:"additionalSchemas" json:"additionalSchemas"` - AdditionalSchemaStrings map[string]string `yaml:"additionalSchemaStrings" json:"additionalSchemaStrings"` - AdditionalValidators map[string]jsonschema.Schema `yaml:"-" json:"-"` - Mutations []Mutation `yaml:"mutations" json:"mutations"` + ID string `yaml:"id" json:"id"` + Category string `yaml:"category" json:"category"` + SuccessMessage string `yaml:"successMessage" json:"successMessage"` + FailureMessage string `yaml:"failureMessage" json:"failureMessage"` + Controllers includeExcludeList `yaml:"controllers" json:"controllers"` + Containers includeExcludeList `yaml:"containers" json:"containers"` + Target TargetKind `yaml:"target" json:"target"` + SchemaTarget TargetKind `yaml:"schemaTarget" json:"schemaTarget"` + Schema map[string]any `yaml:"schema" json:"schema"` + SchemaString string `yaml:"schemaString" json:"schemaString"` + Validator jsonschema.Schema `yaml:"-" json:"-"` + AdditionalSchemas map[string]map[string]any `yaml:"additionalSchemas" json:"additionalSchemas"` + AdditionalSchemaStrings map[string]string `yaml:"additionalSchemaStrings" json:"additionalSchemaStrings"` + AdditionalValidators map[string]jsonschema.Schema `yaml:"-" json:"-"` + Mutations []Mutation `yaml:"mutations" json:"mutations"` } type resourceMinimum string type resourceMaximum string // UnmarshalYAMLOrJSON is a helper function to unmarshal data in an arbitrary format -func UnmarshalYAMLOrJSON(raw []byte, dest interface{}) error { +func UnmarshalYAMLOrJSON(raw []byte, dest any) error { reader := bytes.NewReader(raw) d := k8sYaml.NewYAMLOrJSONDecoder(reader, 4096) for { @@ -129,7 +131,7 @@ return new(resourceMaximum) } -func (min resourceMinimum) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data interface{}) { +func (min resourceMinimum) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data any) { err := validateRange(string(min), data, true) if err != nil { errs := currentState.Errs @@ -137,7 +139,7 @@ currentState.Errs = errs } } -func (max resourceMaximum) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data interface{}) { +func (max resourceMaximum) ValidateKeyword(ctx context.Context, currentState *jsonschema.ValidationState, data any) { err := validateRange(string(max), data, false) if err != nil { errs := currentState.Errs @@ -163,7 +165,7 @@ // Not implemented } -func parseQuantity(i interface{}) (resource.Quantity, *[]jsonschema.KeyError) { +func parseQuantity(i any) (resource.Quantity, *[]jsonschema.KeyError) { if resNum, ok := i.(float64); ok { i = fmt.Sprintf("%f", resNum) } @@ -182,7 +184,7 @@ return q, nil } -func validateRange(limit interface{}, data interface{}, isMinimum bool) *[]jsonschema.KeyError { +func validateRange(limit any, data any, isMinimum bool) *[]jsonschema.KeyError { limitQuantity, err := parseQuantity(limit) if err != nil { return err @@ -228,21 +230,19 @@ } check.AdditionalSchemaStrings[kind] = string(jsonBytes) } - check.Schema = map[string]interface{}{} - check.AdditionalSchemas = map[string]map[string]interface{}{} + check.Schema = map[string]any{} + check.AdditionalSchemas = map[string]map[string]any{} return nil } // TemplateForResource fills out a check's templated fields given a particular resource -func (check SchemaCheck) TemplateForResource(res interface{}) (*SchemaCheck, error) { +func (check SchemaCheck) TemplateForResource(res any) (*SchemaCheck, error) { newCheck := check // Make a copy of the check, since we're going to modify the schema templateStrings := map[string]string{ "": newCheck.SchemaString, } - for kind, schema := range newCheck.AdditionalSchemaStrings { - templateStrings[kind] = schema - } + maps.Copy(templateStrings, newCheck.AdditionalSchemaStrings) newCheck.SchemaString = "" newCheck.AdditionalSchemaStrings = map[string]string{} @@ -294,7 +294,7 @@ } // CheckPodTemplate checks a pod template against the schema -func (check SchemaCheck) CheckPodTemplate(ctx context.Context, podTemplate interface{}) (bool, []jsonschema.KeyError, error) { +func (check SchemaCheck) CheckPodTemplate(ctx context.Context, podTemplate any) (bool, []jsonschema.KeyError, error) { return check.CheckObject(ctx, podTemplate) } @@ -310,7 +310,7 @@ } // CheckObject checks arbitrary data against the schema -func (check SchemaCheck) CheckObject(ctx context.Context, obj interface{}) (bool, []jsonschema.KeyError, error) { +func (check SchemaCheck) CheckObject(ctx context.Context, obj any) (bool, []jsonschema.KeyError, error) { bytes, err := json.Marshal(obj) if err != nil { return false, nil, err @@ -320,7 +320,7 @@ } // CheckAdditionalObjects looks for an object that passes the specified additional schema -func (check SchemaCheck) CheckAdditionalObjects(ctx context.Context, groupkind string, objects []interface{}) (bool, error) { +func (check SchemaCheck) CheckAdditionalObjects(ctx context.Context, groupkind string, objects []any) (bool, error) { val, ok := check.AdditionalValidators[groupkind] if !ok { return false, errors.New("No validator found for " + groupkind) @@ -356,19 +356,14 @@ return false } isIncluded := len(check.Controllers.Include) == 0 - for _, inclusion := range check.Controllers.Include { - if inclusion == kind { - isIncluded = true - break - } + if slices.Contains(check.Controllers.Include, kind) { + isIncluded = true } if !isIncluded { return false } - for _, exclusion := range check.Controllers.Exclude { - if exclusion == kind { - return false - } + if slices.Contains(check.Controllers.Exclude, kind) { + return false } if check.Target == TargetContainer { isIncluded := len(check.Containers.Include) == 0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/dashboard/helpers.go new/polaris-10.1.5/pkg/dashboard/helpers.go --- old/polaris-10.1.4/pkg/dashboard/helpers.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/dashboard/helpers.go 2026-02-24 16:22:14.000000000 +0100 @@ -16,6 +16,7 @@ import ( "fmt" + "slices" "strings" "github.com/fairwindsops/polaris/pkg/config" @@ -157,10 +158,5 @@ } func stringInSlice(a string, list []string) bool { - for _, b := range list { - if b == a { - return true - } - } - return false + return slices.Contains(list, a) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/kube/resource.go new/polaris-10.1.5/pkg/kube/resource.go --- old/polaris-10.1.4/pkg/kube/resource.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/kube/resource.go 2026-02-24 16:22:14.000000000 +0100 @@ -39,13 +39,13 @@ ObjectMeta kubeAPIMetaV1.Object Resource unstructured.Unstructured PodSpec *kubeAPICoreV1.PodSpec - PodTemplate interface{} + PodTemplate any OriginalObjectJSON []byte OriginalObjectYAML []byte } // NewGenericResourceFromUnstructured creates a workload from an unstructured.Unstructured -func NewGenericResourceFromUnstructured(unst unstructured.Unstructured, podSpecMap interface{}) (GenericResource, error) { +func NewGenericResourceFromUnstructured(unst unstructured.Unstructured, podSpecMap any) (GenericResource, error) { if unst.GetCreationTimestamp().Time.IsZero() { unstructured.RemoveNestedField(unst.Object, "metadata", "creationTimestamp") unstructured.RemoveNestedField(unst.Object, "status") @@ -69,7 +69,7 @@ return workload, err } workload.OriginalObjectJSON = b - m := make(map[string]interface{}) + m := make(map[string]any) err = json.Unmarshal(b, &m) if err != nil { return workload, err @@ -93,7 +93,7 @@ } // NewGenericResourceFromPod builds a new workload for a given Pod without looking at parents -func NewGenericResourceFromPod(podResource kubeAPICoreV1.Pod, originalObject interface{}) (GenericResource, error) { +func NewGenericResourceFromPod(podResource kubeAPICoreV1.Pod, originalObject any) (GenericResource, error) { podMap, err := SerializePod(&podResource) if err != nil { return GenericResource{}, err @@ -157,7 +157,7 @@ } topKind := "Pod" topMeta := podWorkload.ObjectMeta - var topPodSpec interface{} + var topPodSpec any topPodSpec = podWorkload.Resource.Object owners := podResource.ObjectMeta.GetOwnerReferences() lastKey := "" @@ -263,10 +263,10 @@ } // GetPodSpec looks inside arbitrary YAML for a PodSpec -func GetPodSpec(yaml map[string]interface{}) interface{} { +func GetPodSpec(yaml map[string]any) any { for _, child := range podSpecFields { if childYaml, ok := yaml[child]; ok { - return GetPodSpec(childYaml.(map[string]interface{})) + return GetPodSpec(childYaml.(map[string]any)) } } if _, ok := yaml["containers"]; ok { @@ -278,9 +278,9 @@ // GetPodTemplate looks inside arbitrary YAML for a Pod template, containing // fields `spec.containers`. // For example, it returns the `spec.template` level of a Kubernetes Deployment yaml. -func GetPodTemplate(yaml map[string]interface{}) (podTemplate interface{}, err error) { +func GetPodTemplate(yaml map[string]any) (podTemplate any, err error) { if yamlSpec, ok := yaml["spec"]; ok { - if yamlSpecMap, ok := yamlSpec.(map[string]interface{}); ok { + if yamlSpecMap, ok := yamlSpec.(map[string]any); ok { if _, ok := yamlSpecMap["containers"]; ok { // This is a hack around unstructured.SetNestedField using DeepCopy which does // not support the type int, and panics. @@ -289,7 +289,7 @@ if err != nil { return nil, err } - podTemplateMap := make(map[string]interface{}) + podTemplateMap := make(map[string]any) err = json.Unmarshal(podTemplateJSON, &podTemplateMap) if err != nil { return nil, err @@ -300,7 +300,7 @@ } for _, podSpecField := range podSpecFields { if childYaml, ok := yaml[podSpecField]; ok { - return GetPodTemplate(childYaml.(map[string]interface{})) + return GetPodTemplate(childYaml.(map[string]any)) } } return nil, nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/kube/resources.go new/polaris-10.1.5/pkg/kube/resources.go --- old/polaris-10.1.4/pkg/kube/resources.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/kube/resources.go 2026-02-24 16:22:14.000000000 +0100 @@ -109,13 +109,13 @@ } func parseGroupKind(gk string) schema.GroupKind { - i := strings.Index(gk, "/") - if i == -1 { + before, after, ok := strings.Cut(gk, "/") + if !ok { return schema.GroupKind{Kind: gk} } - group := gk[:i] - kind := gk[i+1:] + group := before + kind := after return schema.GroupKind{Group: group, Kind: kind} } @@ -454,12 +454,12 @@ } // SerializePodSpec converts a typed PodSpec into a map[string]interface{} -func SerializePodSpec(pod *corev1.PodSpec) (map[string]interface{}, error) { +func SerializePodSpec(pod *corev1.PodSpec) (map[string]any, error) { podJSON, err := json.Marshal(pod) if err != nil { return nil, err } - podMap := make(map[string]interface{}) + podMap := make(map[string]any) err = json.Unmarshal(podJSON, &podMap) if err != nil { return nil, err @@ -468,12 +468,12 @@ } // SerializePod converts a typed Pod into a map[string]interface{} -func SerializePod(pod *corev1.Pod) (map[string]interface{}, error) { +func SerializePod(pod *corev1.Pod) (map[string]any, error) { podJSON, err := json.Marshal(pod) if err != nil { return nil, err } - podMap := make(map[string]interface{}) + podMap := make(map[string]any) err = json.Unmarshal(podJSON, &podMap) if err != nil { return nil, err @@ -482,12 +482,12 @@ } // SerializeContainer converts a typed Container into a map[string]interface{} -func SerializeContainer(container *corev1.Container) (map[string]interface{}, error) { +func SerializeContainer(container *corev1.Container) (map[string]any, error) { containerJSON, err := json.Marshal(container) if err != nil { return nil, err } - containerMap := make(map[string]interface{}) + containerMap := make(map[string]any) err = json.Unmarshal(containerJSON, &containerMap) if err != nil { return nil, err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/mutation/mutate.go new/polaris-10.1.5/pkg/mutation/mutate.go --- old/polaris-10.1.4/pkg/mutation/mutate.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/mutation/mutate.go 2026-02-24 16:22:14.000000000 +0100 @@ -224,7 +224,7 @@ return nil } -func getNodeFromValue(value interface{}, comment string) (*yaml.Node, error) { +func getNodeFromValue(value any, comment string) (*yaml.Node, error) { bytes, err := yaml.Marshal(value) if err != nil { return nil, err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/mutation/mutate_test.go new/polaris-10.1.5/pkg/mutation/mutate_test.go --- old/polaris-10.1.4/pkg/mutation/mutate_test.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/mutation/mutate_test.go 2026-02-24 16:22:14.000000000 +0100 @@ -102,7 +102,7 @@ `, patch: config.Mutation{ Op: "replace", - Value: map[string]interface{}{ + Value: map[string]any{ "bar": []string{"c", "d"}, }, Path: "/obj/foo", @@ -129,7 +129,7 @@ original: `foo: bar`, patch: config.Mutation{ Op: "add", - Value: map[string]interface{}{ + Value: map[string]any{ "baz": "quux", }, Path: "/extra", @@ -149,7 +149,7 @@ `, patch: config.Mutation{ Op: "replace", - Value: map[string]interface{}{ + Value: map[string]any{ "baz": "quux", }, Path: "/extra", diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/validator/controller_test.go new/polaris-10.1.5/pkg/validator/controller_test.go --- old/polaris-10.1.4/pkg/validator/controller_test.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/validator/controller_test.go 2026-02-24 16:22:14.000000000 +0100 @@ -99,7 +99,7 @@ assert.Equal(t, 10, res.Resources.GetLength()) testResources(res) - replicaSpec := map[string]interface{}{"replicas": 2} + replicaSpec := map[string]any{"replicas": 2} b, err := json.Marshal(replicaSpec) assert.NoError(t, err) err = json.Unmarshal(b, &replicaSpec) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/validator/output.go new/polaris-10.1.5/pkg/validator/output.go --- old/polaris-10.1.4/pkg/validator/output.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/validator/output.go 2026-02-24 16:22:14.000000000 +0100 @@ -250,15 +250,16 @@ // GetPrettyOutput returns a human-readable string func (res AuditData) GetPrettyOutput(useColor bool) string { color.NoColor = !useColor - str := titleColor.Sprint(fmt.Sprintf("Polaris audited %s %s at %s\n", res.SourceType, res.SourceName, res.AuditTime)) - str += color.CyanString(fmt.Sprintf(" Nodes: %d | Namespaces: %d | Controllers: %d\n", res.ClusterInfo.Nodes, res.ClusterInfo.Namespaces, res.ClusterInfo.Controllers)) - str += color.GreenString(fmt.Sprintf(" Final score: %d\n", res.Score)) - str += "\n" + var str strings.Builder + str.WriteString(titleColor.Sprint(fmt.Sprintf("Polaris audited %s %s at %s\n", res.SourceType, res.SourceName, res.AuditTime))) + str.WriteString(color.CyanString(fmt.Sprintf(" Nodes: %d | Namespaces: %d | Controllers: %d\n", res.ClusterInfo.Nodes, res.ClusterInfo.Namespaces, res.ClusterInfo.Controllers))) + str.WriteString(color.GreenString(fmt.Sprintf(" Final score: %d\n", res.Score))) + str.WriteString("\n") for _, result := range res.Results { - str += result.GetPrettyOutput() + "\n" + str.WriteString(result.GetPrettyOutput() + "\n") } color.NoColor = false - return str + return str.String() } // GetPrettyOutput returns a human-readable string @@ -277,11 +278,12 @@ // GetPrettyOutput returns a human-readable string func (res PodResult) GetPrettyOutput() string { - str := res.Results.GetPrettyOutput() + var str strings.Builder + str.WriteString(res.Results.GetPrettyOutput()) for _, cont := range res.ContainerResults { - str += cont.GetPrettyOutput() + str.WriteString(cont.GetPrettyOutput()) } - return str + return str.String() } // GetPrettyOutput returns a human-readable string @@ -296,7 +298,7 @@ // GetPrettyOutput returns a human-readable string func (res ResultSet) GetPrettyOutput() string { indent := " " - str := "" + var str strings.Builder for _, msg := range res { status := color.GreenString(successMessage) if !msg.Success { @@ -309,8 +311,8 @@ if color.NoColor { status = strings.Fields(status)[1] // remove emoji } - str += fmt.Sprintf("%s%s %s\n", indent, checkColor.Sprint(fillString(msg.ID, minIDLength-len(indent))), status) - str += fmt.Sprintf("%s %s - %s\n", indent, msg.Category, msg.Message) + str.WriteString(fmt.Sprintf("%s%s %s\n", indent, checkColor.Sprint(fillString(msg.ID, minIDLength-len(indent))), status)) + str.WriteString(fmt.Sprintf("%s %s - %s\n", indent, msg.Category, msg.Message)) } - return str + return str.String() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/validator/schema.go new/polaris-10.1.5/pkg/validator/schema.go --- old/polaris-10.1.4/pkg/validator/schema.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/validator/schema.go 2026-02-24 16:22:14.000000000 +0100 @@ -99,7 +99,7 @@ // getTemplateInput augments a schemaTestCase.Resource.Resource.Object with // Polaris built-in variables. The result can be used as input for // CheckSchema.TemplateForResource(). -func getTemplateInput(test schemaTestCase) (map[string]interface{}, error) { +func getTemplateInput(test schemaTestCase) (map[string]any, error) { templateInput := test.Resource.Resource.Object if templateInput == nil { return nil, nil @@ -113,7 +113,7 @@ if err != nil { return nil, err } - podTemplateMap, ok := test.Resource.PodTemplate.(map[string]interface{}) + podTemplateMap, ok := test.Resource.PodTemplate.(map[string]any) if ok { err := unstructured.SetNestedMap(templateInput, podTemplateMap, "Polaris", "PodTemplate") if err != nil { @@ -425,9 +425,9 @@ resources = funk.Filter(resources, func(res kube.GenericResource) bool { return res.ObjectMeta.GetNamespace() == "" || res.ObjectMeta.GetNamespace() == namespace }).([]kube.GenericResource) - objects := funk.Map(resources, func(res kube.GenericResource) interface{} { + objects := funk.Map(resources, func(res kube.GenericResource) any { return res.Resource.Object - }).([]interface{}) + }).([]any) passes, err = check.CheckAdditionalObjects(ctx, groupkind, objects) if err != nil { return nil, err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/pkg/webhook/webhook.go new/polaris-10.1.5/pkg/webhook/webhook.go --- old/polaris-10.1.4/pkg/webhook/webhook.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/pkg/webhook/webhook.go 2026-02-24 16:22:14.000000000 +0100 @@ -19,6 +19,7 @@ "encoding/json" "fmt" "net/http" + "strings" "github.com/fairwindsops/controller-utils/pkg/controller" "github.com/fairwindsops/polaris/pkg/config" @@ -135,11 +136,12 @@ } func getFailureReason(result validator.Result) string { - reason := "\nPolaris prevented this deployment due to configuration problems:\n" + var reason strings.Builder + reason.WriteString("\nPolaris prevented this deployment due to configuration problems:\n") for _, message := range result.Results { if !message.Success && message.Severity == config.SeverityDanger { - reason += fmt.Sprintf("- %s: %s\n", result.Kind, message.Message) + reason.WriteString(fmt.Sprintf("- %s: %s\n", result.Kind, message.Message)) } } @@ -147,18 +149,18 @@ if podResult != nil { for _, message := range podResult.Results { if !message.Success && message.Severity == config.SeverityDanger { - reason += fmt.Sprintf("- Pod: %s\n", message.Message) + reason.WriteString(fmt.Sprintf("- Pod: %s\n", message.Message)) } } for _, containerResult := range podResult.ContainerResults { for _, message := range containerResult.Results { if !message.Success && message.Severity == config.SeverityDanger { - reason += fmt.Sprintf("- Container %s: %s\n", containerResult.Name, message.Message) + reason.WriteString(fmt.Sprintf("- Container %s: %s\n", containerResult.Name, message.Message)) } } } } - return reason + return reason.String() } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/polaris-10.1.4/test/fixtures.go new/polaris-10.1.5/test/fixtures.go --- old/polaris-10.1.4/test/fixtures.go 2026-01-30 20:21:23.000000000 +0100 +++ new/polaris-10.1.5/test/fixtures.go 2026-02-24 16:22:14.000000000 +0100 @@ -32,12 +32,12 @@ "k8s.io/client-go/kubernetes/fake" ) -func newUnstructured(apiVersion, kind, namespace, name string, spec map[string]interface{}) unstructured.Unstructured { +func newUnstructured(apiVersion, kind, namespace, name string, spec map[string]any) unstructured.Unstructured { return unstructured.Unstructured{ - Object: map[string]interface{}{ + Object: map[string]any{ "apiVersion": apiVersion, "kind": kind, - "metadata": map[string]interface{}{ + "metadata": map[string]any{ "namespace": namespace, "name": name, }, @@ -85,7 +85,7 @@ } // MockController creates a mock controller and pod -func MockController(apiVersion, kind, namespace, name string, spec map[string]interface{}, podSpec corev1.PodSpec, dest interface{}) corev1.Pod { +func MockController(apiVersion, kind, namespace, name string, spec map[string]any, podSpec corev1.PodSpec, dest any) corev1.Pod { unst := newUnstructured(apiVersion, kind, namespace, name, spec) pod := corev1.Pod{ ObjectMeta: metav1.ObjectMeta{ @@ -111,19 +111,19 @@ } // MockControllerWithNormalSpec mocks a controller with podspec at spec.template.spec -func MockControllerWithNormalSpec(apiVersion, kind, namespace, name string, dest interface{}) corev1.Pod { +func MockControllerWithNormalSpec(apiVersion, kind, namespace, name string, dest any) corev1.Pod { p := MockPod() b, err := json.Marshal(p.Spec) if err != nil { panic(err) } - pSpec := map[string]interface{}{} + pSpec := map[string]any{} err = json.Unmarshal(b, &pSpec) if err != nil { panic(err) } - spec := map[string]interface{}{ - "template": map[string]interface{}{ + spec := map[string]any{ + "template": map[string]any{ "spec": pSpec, }, } @@ -162,7 +162,7 @@ func MockCronJob(namespace, name string) (batchv1.CronJob, corev1.Pod) { cj := batchv1.CronJob{} p := MockPod() - spec := map[string]interface{}{} + spec := map[string]any{} pod := MockController("batch/v1", "CronJob", namespace, name, spec, p.Spec, &cj) cj.Spec.JobTemplate.Spec.Template.Spec = pod.Spec ++++++ polaris.obsinfo ++++++ --- /var/tmp/diff_new_pack.OuxDFz/_old 2026-02-25 21:12:00.965749093 +0100 +++ /var/tmp/diff_new_pack.OuxDFz/_new 2026-02-25 21:12:00.969749258 +0100 @@ -1,5 +1,5 @@ name: polaris -version: 10.1.4 -mtime: 1769800883 -commit: 517c8899d701bd8e19cdd9ba0c22ddf63e68eb93 +version: 10.1.5 +mtime: 1771946534 +commit: a5af7bb34ea1c377ece9cef5a8ff9e75dc775849 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/polaris/vendor.tar.gz /work/SRC/openSUSE:Factory/.polaris.new.1977/vendor.tar.gz differ: char 14, line 1
