Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package k9s for openSUSE:Factory checked in at 2025-09-29 16:32:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/k9s (Old) and /work/SRC/openSUSE:Factory/.k9s.new.11973 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "k9s" Mon Sep 29 16:32:39 2025 rev:65 rq:1307581 version:0.50.13 Changes: -------- --- /work/SRC/openSUSE:Factory/k9s/k9s.changes 2025-09-20 22:04:48.856517860 +0200 +++ /work/SRC/openSUSE:Factory/.k9s.new.11973/k9s.changes 2025-09-29 16:34:51.209030637 +0200 @@ -1,0 +2,14 @@ +Sun Sep 28 14:55:04 UTC 2025 - Johannes Kastl <[email protected]> + +- update to 0.50.13: + * Resolved Issues + - #3587 UI doesn't show any updates when restarting a + Deployment + - #3585 abbreviation sec for secret not working + - #3584 Show managed fields doesn't show them + - #3583 Cannot open shell to pods without node read access as + of 0.50.12 + - #3577 Log view is broken as of v0.50.10 + - #3574 Aliases for pods with label filters not working + +------------------------------------------------------------------- Old: ---- k9s-0.50.12.obscpio New: ---- k9s-0.50.13.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ k9s.spec ++++++ --- /var/tmp/diff_new_pack.Bey7k7/_old 2025-09-29 16:34:53.381122081 +0200 +++ /var/tmp/diff_new_pack.Bey7k7/_new 2025-09-29 16:34:53.381122081 +0200 @@ -17,7 +17,7 @@ Name: k9s -Version: 0.50.12 +Version: 0.50.13 Release: 0 Summary: Curses based terminal UI for Kubernetes clusters License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.Bey7k7/_old 2025-09-29 16:34:53.417123596 +0200 +++ /var/tmp/diff_new_pack.Bey7k7/_new 2025-09-29 16:34:53.421123765 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/derailed/k9s.git</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v0.50.12</param> + <param name="revision">v0.50.13</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">disable</param> ++++++ k9s-0.50.12.obscpio -> k9s-0.50.13.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/Makefile new/k9s-0.50.13/Makefile --- old/k9s-0.50.12/Makefile 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/Makefile 2025-09-27 17:16:36.000000000 +0200 @@ -1,5 +1,5 @@ NAME := k9s -VERSION ?= v0.50.12 +VERSION ?= v0.50.13 PACKAGE := github.com/derailed/$(NAME) OUTPUT_BIN ?= execs/${NAME} GO_FLAGS ?= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/change_logs/release_v0.50.13.md new/k9s-0.50.13/change_logs/release_v0.50.13.md --- old/k9s-0.50.12/change_logs/release_v0.50.13.md 1970-01-01 01:00:00.000000000 +0100 +++ new/k9s-0.50.13/change_logs/release_v0.50.13.md 2025-09-27 17:16:36.000000000 +0200 @@ -0,0 +1,32 @@ +<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/k9s.png" align="center" width="800" height="auto"/> + +# Release v0.50.13 + +## Notes + +Thank you to all that contributed with flushing out issues and enhancements for K9s! +I'll try to mark some of these issues as fixed. But if you don't mind grab the latest rev +and see if we're happier with some of the fixes! +If you've filed an issue please help me verify and close. + +Your support, kindness and awesome suggestions to make K9s better are, as ever, very much noted and appreciated! +Also big thanks to all that have allocated their own time to help others on both slack and on this repo!! + +As you may know, K9s is not pimped out by corps with deep pockets, thus if you feel K9s is helping your Kubernetes journey, +please consider joining our [sponsorship program](https://github.com/sponsors/derailed) and/or make some noise on social! [@kitesurfer](https://twitter.com/kitesurfer) + +On Slack? Please join us [K9slackers](https://join.slack.com/t/k9sers/shared_invite/zt-3360a389v-ElLHrb0Dp1kAXqYUItSAFA) + +## Maintenance Release! + +## Resolved Issues + +* [#3587](https://github.com/derailed/k9s/issues/3587) UI doesn't show any updates when restarting a Deployment +* [#3585](https://github.com/derailed/k9s/issues/3585) abbreviation sec for secret not working +* [#3584](https://github.com/derailed/k9s/issues/3584) Show managed fields doesn't show them +* [#3583](https://github.com/derailed/k9s/issues/3583) Cannot open shell to pods without node read access as of 0.50.12 +* [#3577](https://github.com/derailed/k9s/issues/3577) Log view is broken as of v0.50.10 +* [#3574](https://github.com/derailed/k9s/issues/3574) Aliases for pods with label filters not working + +--- +<img src="https://raw.githubusercontent.com/derailed/k9s/master/assets/imhotep_logo.png" width="32" height="auto"/> © 2025 Imhotep Software LLC. All materials licensed under [Apache v2.0](http://www.apache.org/licenses/LICENSE-2.0)# \ No newline at end of file diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/go.mod new/k9s-0.50.13/go.mod --- old/k9s-0.50.12/go.mod 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/go.mod 2025-09-27 17:16:36.000000000 +0200 @@ -19,7 +19,7 @@ github.com/lmittmann/tint v1.0.7 github.com/mattn/go-colorable v0.1.14 github.com/mattn/go-runewidth v0.0.16 - github.com/olekukonko/tablewriter v1.0.9 + github.com/olekukonko/tablewriter v1.1.0 github.com/petergtz/pegomock v2.9.0+incompatible github.com/rakyll/hey v0.1.4 github.com/sahilm/fuzzy v0.1.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/go.sum new/k9s-0.50.13/go.sum --- old/k9s-0.50.12/go.sum 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/go.sum 2025-09-27 17:16:36.000000000 +0200 @@ -910,8 +910,8 @@ github.com/olekukonko/errors v1.1.0/go.mod h1:ppzxA5jBKcO1vIpCXQ9ZqgDh8iwODz6OXIGKU8r5m4Y= github.com/olekukonko/ll v0.0.9 h1:Y+1YqDfVkqMWuEQMclsF9HUR5+a82+dxJuL1HHSRpxI= github.com/olekukonko/ll v0.0.9/go.mod h1:En+sEW0JNETl26+K8eZ6/W4UQ7CYSrrgg/EdIYT2H8g= -github.com/olekukonko/tablewriter v1.0.9 h1:XGwRsYLC2bY7bNd93Dk51bcPZksWZmLYuaTHR0FqfL8= -github.com/olekukonko/tablewriter v1.0.9/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= +github.com/olekukonko/tablewriter v1.1.0 h1:N0LHrshF4T39KvI96fn6GT8HEjXRXYNDrDjKFDB7RIY= +github.com/olekukonko/tablewriter v1.1.0/go.mod h1:5c+EBPeSqvXnLLgkm9isDdzR3wjfBkHR9Nhfp3NWrzo= github.com/onsi/ginkgo v1.6.0/go.mod h1:lLunBs/Ym6LB5Z9jYTR76FiuTmxDTDusOGeTQH+WWjE= github.com/onsi/ginkgo v1.12.1/go.mod h1:zj2OWP4+oCPe1qIXoGWkgMRwljMUYCdkwsT2108oapk= github.com/onsi/ginkgo v1.16.5 h1:8xi0RTUf59SOSfEtZMvwTvXYMzG4gV23XVHOZiXNtnE= diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/client/gvr.go new/k9s-0.50.13/internal/client/gvr.go --- old/k9s-0.50.12/internal/client/gvr.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/client/gvr.go 2025-09-27 17:16:36.000000000 +0200 @@ -88,7 +88,7 @@ } func (g *GVR) IsK8sRes() bool { - return g != nil && ((strings.Contains(g.raw, "/") && !strings.Contains(g.raw, " /")) || reservedGVRs.Has(g)) + return g != nil && ((!strings.Contains(g.raw, " ") && strings.Contains(g.raw, "/") && !strings.Contains(g.raw, " /")) || reservedGVRs.Has(g)) } // WithSubResource builds a new gvr with a sub resource. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/config/alias.go new/k9s-0.50.13/internal/config/alias.go --- old/k9s-0.50.12/internal/config/alias.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/config/alias.go 2025-09-27 17:16:36.000000000 +0200 @@ -159,11 +159,15 @@ } a.mx.Lock() - defer a.mx.Unlock() if err := yaml.Unmarshal(bb, a); err != nil { return err } + for k, v := range a.Alias { + a.Alias[k] = client.NewGVR(v.String()) + } + defer a.mx.Unlock() + return nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/dao/helpers.go new/k9s-0.50.13/internal/dao/helpers.go --- old/k9s-0.50.12/internal/dao/helpers.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/dao/helpers.go 2025-09-27 17:16:36.000000000 +0200 @@ -8,7 +8,6 @@ "errors" "fmt" "log/slog" - "maps" "math" "github.com/derailed/k9s/internal/client" @@ -95,17 +94,12 @@ return "", fmt.Errorf("expecting unstructured object but got nil") } - mm := u.Object - var ( - buff bytes.Buffer - p printers.YAMLPrinter - ) + var p printers.ResourcePrinter = &printers.YAMLPrinter{} if !showManaged { - mm = maps.Clone(mm) - if meta, ok := mm["metadata"].(map[string]any); ok { - delete(meta, "managedFields") - } + p = &printers.OmitManagedFieldsPrinter{Delegate: p} } + + var buff bytes.Buffer if err := p.PrintObj(o, &buff); err != nil { slog.Error("PrintObj failed", slogs.Error, err) return "", err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/dao/pod.go new/k9s-0.50.13/internal/dao/pod.go --- old/k9s-0.50.12/internal/dao/pod.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/dao/pod.go 2025-09-27 17:16:36.000000000 +0200 @@ -71,9 +71,9 @@ switch pod.Status.Phase { case v1.PodSucceeded, v1.PodFailed: return true + default: + return false } - - return false } // Get returns a resource instance if found, else an error. @@ -372,20 +372,19 @@ delay := logBackoffInitial for range logRetryCount { - // Check if we should stop retrying based on pod status - if pod, ok := logger.(*Pod); ok && pod.shouldStopRetrying(opts.Path) { - slog.Debug("Stopping log retry - pod is terminating or deleted", - slogs.Container, opts.Info(), - ) - return - } - req, err := logger.Logs(opts.Path, podOpts) if err != nil { slog.Error("Log request failed", slogs.Container, opts.Info(), slogs.Error, err, ) + // Check if we should stop retrying based on pod status + if pod, ok := logger.(*Pod); ok && pod.shouldStopRetrying(opts.Path) { + slog.Debug("Stopping log retry - pod is terminating or deleted", + slogs.Container, opts.Info(), + ) + return + } select { case <-ctx.Done(): return @@ -403,6 +402,13 @@ slogs.Error, e, slogs.Container, opts.Info(), ) + // Check if we should stop retrying based on pod status + if pod, ok := logger.(*Pod); ok && pod.shouldStopRetrying(opts.Path) { + slog.Debug("Stopping log retry - pod is terminating or deleted", + slogs.Container, opts.Info(), + ) + return + } select { case <-ctx.Done(): return @@ -466,7 +472,7 @@ func readLogs(ctx context.Context, stream io.ReadCloser, out chan<- *LogItem, opts *LogOptions) streamResult { defer func() { if err := stream.Close(); err != nil && !errors.Is(err, io.ErrClosedPipe) { - slog.Error("Fail to close stream", + slog.Error("Failed to close stream", slogs.Container, opts.Info(), slogs.Error, err, ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/render/dp.go new/k9s-0.50.13/internal/render/dp.go --- old/k9s-0.50.12/internal/render/dp.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/render/dp.go 2025-09-27 17:16:36.000000000 +0200 @@ -100,7 +100,7 @@ strconv.Itoa(int(dp.Status.UpdatedReplicas)), strconv.Itoa(int(dp.Status.AvailableReplicas)), mapToStr(dp.Labels), - AsStatus(d.diagnose(desired, dp.Status.AvailableReplicas)), + AsStatus(d.diagnose(dp.Status.Replicas, dp.Status.AvailableReplicas)), ToAge(dp.GetCreationTimestamp()), } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/render/sts.go new/k9s-0.50.13/internal/render/sts.go --- old/k9s-0.50.12/internal/render/sts.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/render/sts.go 2025-09-27 17:16:36.000000000 +0200 @@ -66,30 +66,34 @@ return err } + var desired int32 + if sts.Spec.Replicas != nil { + desired = *sts.Spec.Replicas + } r.ID = client.MetaFQN(&sts.ObjectMeta) r.Fields = model1.Fields{ sts.Namespace, sts.Name, computeVulScore(sts.Namespace, sts.Labels, &sts.Spec.Template.Spec), - strconv.Itoa(int(sts.Status.ReadyReplicas)) + "/" + strconv.Itoa(int(sts.Status.Replicas)), + strconv.Itoa(int(sts.Status.ReadyReplicas)) + "/" + strconv.Itoa(int(desired)), asSelector(sts.Spec.Selector), na(sts.Spec.ServiceName), podContainerNames(&sts.Spec.Template.Spec, true), podImageNames(&sts.Spec.Template.Spec, true), mapToStr(sts.Labels), - AsStatus(s.diagnose(sts.Spec.Replicas, sts.Status.Replicas, sts.Status.ReadyReplicas)), + AsStatus(s.diagnose(desired, sts.Status.Replicas, sts.Status.ReadyReplicas)), ToAge(sts.GetCreationTimestamp()), } return nil } -func (StatefulSet) diagnose(w *int32, d, r int32) error { - if d != r { - return fmt.Errorf("desired %d replicas got %d available", d, r) +func (StatefulSet) diagnose(d, c, r int32) error { + if c != r { + return fmt.Errorf("desired %d replicas got %d available", c, r) } - if w != nil && *w != r { - return fmt.Errorf("want %d replicas got %d available", *w, r) + if d != r { + return fmt.Errorf("want %d replicas got %d available", d, r) } return nil diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/internal/view/exec.go new/k9s-0.50.13/internal/view/exec.go --- old/k9s-0.50.12/internal/view/exec.go 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/internal/view/exec.go 2025-09-27 17:16:36.000000000 +0200 @@ -348,7 +348,7 @@ cfg := a.Config.K9s.ShellPod platform, err := getPodOS(a.factory, fqn) if err != nil { - return fmt.Errorf("os detect failed: %w", err) + slog.Warn("os detect failed", slogs.Error, err) } args := buildShellArgs("exec", fqn, co, a.Conn().Config().Flags()) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/k9s-0.50.12/snap/snapcraft.yaml new/k9s-0.50.13/snap/snapcraft.yaml --- old/k9s-0.50.12/snap/snapcraft.yaml 2025-09-19 16:36:53.000000000 +0200 +++ new/k9s-0.50.13/snap/snapcraft.yaml 2025-09-27 17:16:36.000000000 +0200 @@ -1,6 +1,6 @@ name: k9s base: core22 -version: 'v0.50.12' +version: 'v0.50.13' summary: K9s is a CLI to view and manage your Kubernetes clusters. description: | K9s is a CLI to view and manage your Kubernetes clusters. By leveraging a terminal UI, you can easily traverse Kubernetes resources and view the state of your clusters in a single powerful session. ++++++ k9s.obsinfo ++++++ --- /var/tmp/diff_new_pack.Bey7k7/_old 2025-09-29 16:34:54.525170244 +0200 +++ /var/tmp/diff_new_pack.Bey7k7/_new 2025-09-29 16:34:54.533170582 +0200 @@ -1,5 +1,5 @@ name: k9s -version: 0.50.12 -mtime: 1758292613 -commit: 09c1c0795051f443da6b75a11705e25c0c1c7c6b +version: 0.50.13 +mtime: 1758986196 +commit: 1d8cb6ced0d0f1231fa6bd59f165277d7416b736 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/k9s/vendor.tar.gz /work/SRC/openSUSE:Factory/.k9s.new.11973/vendor.tar.gz differ: char 117, line 1
