Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package stern for openSUSE:Factory checked in at 2025-09-18 21:11:32 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/stern (Old) and /work/SRC/openSUSE:Factory/.stern.new.27445 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "stern" Thu Sep 18 21:11:32 2025 rev:13 rq:1305747 version:1.33.0 Changes: -------- --- /work/SRC/openSUSE:Factory/stern/stern.changes 2025-01-27 20:58:59.067858924 +0100 +++ /work/SRC/openSUSE:Factory/.stern.new.27445/stern.changes 2025-09-18 21:12:46.420732429 +0200 @@ -1,0 +2,17 @@ +Thu Sep 18 08:56:48 UTC 2025 - Johannes Kastl <[email protected]> + +- Update to version 1.33.0: + * Notable Changes + - New template variables Labels and Annotations + You can now use Labels and Annotations in your templates. + stern -n kube-system -l component --template '{{printf "%-25s %s" .Labels.component .Message}}{{"\n"}}' + * Changes + - Update dependencies for Kubernetes 1.34 (#349) d6a0679 + (Takashi Kusumi) + - Fix asdf installation typo (#348) 5946e7f (Guruprasad Bhat) + - 338: fix: move highlighting after formatting (#339) 6d915a8 + (Peter) + - Add support for labels & annotations in templates (#344) + 3cd85b4 (Nicholas Hurden) + +------------------------------------------------------------------- Old: ---- stern-1.32.0.obscpio New: ---- stern-1.33.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ stern.spec ++++++ --- /var/tmp/diff_new_pack.QIR6nP/_old 2025-09-18 21:12:47.148763031 +0200 +++ /var/tmp/diff_new_pack.QIR6nP/_new 2025-09-18 21:12:47.152763200 +0200 @@ -1,7 +1,7 @@ # # spec file for package stern # -# 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,14 +17,14 @@ Name: stern -Version: 1.32.0 +Version: 1.33.0 Release: 0 Summary: Multi pod and container log tailing for Kubernetes License: Apache-2.0 URL: https://github.com/stern/stern Source: stern-%{version}.tar.gz Source1: vendor.tar.gz -BuildRequires: go >= 1.23.5 +BuildRequires: golang(API) >= 1.25 %description Stern allows you to tail multiple pods on Kubernetes and multiple containers ++++++ _service ++++++ --- /var/tmp/diff_new_pack.QIR6nP/_old 2025-09-18 21:12:47.192764881 +0200 +++ /var/tmp/diff_new_pack.QIR6nP/_new 2025-09-18 21:12:47.196765049 +0200 @@ -3,7 +3,7 @@ <param name="url">https://github.com/stern/stern</param> <param name="scm">git</param> <param name="exclude">.git</param> - <param name="revision">v1.32.0</param> + <param name="revision">v1.33.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.QIR6nP/_old 2025-09-18 21:12:47.228766394 +0200 +++ /var/tmp/diff_new_pack.QIR6nP/_new 2025-09-18 21:12:47.232766563 +0200 @@ -3,6 +3,6 @@ <param name="url">https://github.com/wercker/stern</param> <param name="changesrevision">94f4ffb3b98a9dcd34aedf00f8a7e95b623b25d3</param></service><service name="tar_scm"> <param name="url">https://github.com/stern/stern</param> - <param name="changesrevision">5e06930fe21f951f079880ec2c13cd688aa5ca09</param></service></servicedata> + <param name="changesrevision">f79098037d951aad53e13aff1f86854b291baf01</param></service></servicedata> (No newline at EOF) ++++++ stern-1.32.0.obscpio -> stern-1.33.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.github/CODEOWNERS new/stern-1.33.0/.github/CODEOWNERS --- old/stern-1.32.0/.github/CODEOWNERS 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.github/CODEOWNERS 1970-01-01 01:00:00.000000000 +0100 @@ -1 +0,0 @@ -* @superbrothers @floryut @rkmathi @tksm diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.github/ISSUE_TEMPLATE/bug-report.md new/stern-1.33.0/.github/ISSUE_TEMPLATE/bug-report.md --- old/stern-1.32.0/.github/ISSUE_TEMPLATE/bug-report.md 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.github/ISSUE_TEMPLATE/bug-report.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,20 +0,0 @@ ---- -name: Bug Report -about: Report a bug encountered while using stern -labels: kind/bug - ---- - -**What happened**: - -**What you expected to happen**: - -**How to reproduce it (as minimally and precisely as possible)**: - -**Anything else we need to know?**: - -**Environment**: -- stern version (use `stern --version`): -- OS (e.g: `cat /etc/os-release`): -- Install tools (e.g: Homebrew) -- Others: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.github/ISSUE_TEMPLATE/enhancement.md new/stern-1.33.0/.github/ISSUE_TEMPLATE/enhancement.md --- old/stern-1.32.0/.github/ISSUE_TEMPLATE/enhancement.md 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.github/ISSUE_TEMPLATE/enhancement.md 1970-01-01 01:00:00.000000000 +0100 @@ -1,9 +0,0 @@ ---- -name: Enhancement Request -about: Suggest an enhancement -labels: kind/feature - ---- -**What would you like to be added**: - -**Why is this needed**: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.github/workflows/ci.yaml new/stern-1.33.0/.github/workflows/ci.yaml --- old/stern-1.32.0/.github/workflows/ci.yaml 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.github/workflows/ci.yaml 1970-01-01 01:00:00.000000000 +0100 @@ -1,31 +0,0 @@ -name: CI - -on: - # Must keep in sync with ci_for_skipped.yaml - push: - branches: [master] - paths-ignore: ['**.md'] - pull_request: - types: [opened, synchronize] - paths-ignore: ['**.md'] - -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version-file: go.mod - - name: Ensure go.mod is already tidied - run: go mod tidy && git diff -s --exit-code go.sum - - name: Run verify-readme - run: make verify-readme - - name: Run tests - run: make test - - name: Build binary - run: make build - - name: Make dist file - run: make dist - - name: Validate a krew plugin manifest file - run: make validate-krew-manifest diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.github/workflows/ci_for_skipped.yaml new/stern-1.33.0/.github/workflows/ci_for_skipped.yaml --- old/stern-1.32.0/.github/workflows/ci_for_skipped.yaml 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.github/workflows/ci_for_skipped.yaml 1970-01-01 01:00:00.000000000 +0100 @@ -1,16 +0,0 @@ -# CI for skipped files -name: CI - -on: - push: - branches: [master] - paths: ['**.md'] - pull_request: - types: [opened, synchronize] - paths: ['**.md'] - -jobs: - run: - runs-on: ubuntu-latest - steps: - - run: 'echo "No check required"' diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.github/workflows/release.yaml new/stern-1.33.0/.github/workflows/release.yaml --- old/stern-1.32.0/.github/workflows/release.yaml 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.github/workflows/release.yaml 1970-01-01 01:00:00.000000000 +0100 @@ -1,28 +0,0 @@ -name: Release - -on: - push: - tags: ["v*"] - -jobs: - run: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v4 - - uses: actions/setup-go@v5 - with: - go-version-file: go.mod - - name: Login to GitHub Container Registry - uses: docker/login-action@v3 - with: - registry: ghcr.io - username: ${{ github.actor }} - password: ${{ secrets.GITHUB_TOKEN }} - - name: Release - run: make release - env: - GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} - - name: Update new version in krew-index - uses: rajatjindal/[email protected] - with: - krew_template_file: dist/krew/stern.yaml diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.gitignore new/stern-1.33.0/.gitignore --- old/stern-1.32.0/.gitignore 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.gitignore 1970-01-01 01:00:00.000000000 +0100 @@ -1,5 +0,0 @@ -/dist -/hack/tools/bin -vendor -.idea -.vscode diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/.golangci.yml new/stern-1.33.0/.golangci.yml --- old/stern-1.32.0/.golangci.yml 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/.golangci.yml 2025-09-07 08:10:00.000000000 +0200 @@ -1,13 +1,21 @@ +version: "2" run: timeout: 5m linters: - disable-all: true + default: none enable: - errcheck - - gofmt - - gosimple - govet - ineffassign - staticcheck - - typecheck - unused + exclusions: + generated: lax + presets: + - comments + - common-false-positives + - legacy + - std-error-handling +formatters: + enable: + - gofmt diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/CHANGELOG.md new/stern-1.33.0/CHANGELOG.md --- old/stern-1.32.0/CHANGELOG.md 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/CHANGELOG.md 2025-09-07 08:10:00.000000000 +0200 @@ -1,3 +1,22 @@ +# v1.33.0 + +## :zap: Notable Changes + +### New template variables `Labels` and `Annotations` + +You can now use `Labels` and `Annotations` in your templates. + +``` +stern -n kube-system -l component --template '{{printf "%-25s %s" .Labels.component .Message}}{{"\n"}}' +``` + +## Changes + +* Update dependencies for Kubernetes 1.34 ([#349](https://github.com/stern/stern/pull/349)) d6a0679 (Takashi Kusumi) +* Fix asdf installation typo ([#348](https://github.com/stern/stern/pull/348)) 5946e7f (Guruprasad Bhat) +* 338: fix: move highlighting after formatting ([#339](https://github.com/stern/stern/pull/339)) 6d915a8 (Peter) +* Add support for labels & annotations in templates ([#344](https://github.com/stern/stern/pull/344)) 3cd85b4 (Nicholas Hurden) + # v1.32.0 ## :zap: Notable Changes diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/Makefile new/stern-1.33.0/Makefile --- old/stern-1.32.0/Makefile 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/Makefile 2025-09-07 08:10:00.000000000 +0200 @@ -5,11 +5,11 @@ go build -o dist/stern . TOOLS_BIN_DIR := $(CURDIR)/hack/tools/bin -GORELEASER_VERSION ?= v2.5.1 +GORELEASER_VERSION ?= v2.12.0 GORELEASER := $(TOOLS_BIN_DIR)/goreleaser -GOLANGCI_LINT_VERSION ?= v1.63.4 +GOLANGCI_LINT_VERSION ?= v2.4.0 GOLANGCI_LINT := $(TOOLS_BIN_DIR)/golangci-lint -VALIDATE_KREW_MAIFEST_VERSION ?= v0.4.4 +VALIDATE_KREW_MAIFEST_VERSION ?= v0.4.5 VALIDATE_KREW_MAIFEST := $(TOOLS_BIN_DIR)/validate-krew-manifest GORELEASER_FILTER_VERSION ?= v0.3.0 GORELEASER_FILTER := $(TOOLS_BIN_DIR)/goreleaser-filter @@ -18,7 +18,7 @@ GOBIN=$(TOOLS_BIN_DIR) go install github.com/goreleaser/goreleaser/v2@$(GORELEASER_VERSION) $(GOLANGCI_LINT): - GOBIN=$(TOOLS_BIN_DIR) go install github.com/golangci/golangci-lint/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) + GOBIN=$(TOOLS_BIN_DIR) go install github.com/golangci/golangci-lint/v2/cmd/golangci-lint@$(GOLANGCI_LINT_VERSION) $(VALIDATE_KREW_MAIFEST): GOBIN=$(TOOLS_BIN_DIR) go install sigs.k8s.io/krew/cmd/validate-krew-manifest@$(VALIDATE_KREW_MAIFEST_VERSION) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/README.md new/stern-1.33.0/README.md --- old/stern-1.32.0/README.md 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/README.md 2025-09-07 08:10:00.000000000 +0200 @@ -32,7 +32,7 @@ If you use [asdf](https://asdf-vm.com/), you can install like this: ``` -asdf plugin-add stern +asdf plugin add stern asdf install stern latest ``` @@ -147,13 +147,15 @@ compiled to a Go template and then used for every log message. This Go template will receive the following struct: -| property | type | description | -|-----------------|--------|---------------------------------------------| -| `Message` | string | The log message itself | -| `NodeName` | string | The node name where the pod is scheduled on | -| `Namespace` | string | The namespace of the pod | -| `PodName` | string | The name of the pod | -| `ContainerName` | string | The name of the container | +| property | type | description | +|-----------------|-------------------|---------------------------------------------| +| `Message` | string | The log message itself | +| `NodeName` | string | The node name where the pod is scheduled on | +| `Namespace` | string | The namespace of the pod | +| `PodName` | string | The name of the pod | +| `ContainerName` | string | The name of the container | +| `Labels` | map[string]string | The labels of the pod | +| `Annotations` | map[string]string | The annotations of the pod | The following functions are available within the template (besides the [builtin functions](https://golang.org/pkg/text/template/#hdr-Functions)): @@ -179,6 +181,7 @@ | `colorMagenta` | `string` | Print text using magenta color | | `colorCyan` | `string` | Print text using cyan color | | `colorWhite` | `string` | Print text using white color | +| `colorCustom` | `string, int [, int]` | Print text using custom color, i.e. {{color "Hi" 3 96}} will print "Hi" as italic with cyan color | ### Log level verbosity diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/cmd/cmd.go new/stern-1.33.0/cmd/cmd.go --- old/stern-1.32.0/cmd/cmd.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/cmd/cmd.go 2025-09-07 08:10:00.000000000 +0200 @@ -476,7 +476,7 @@ o.configFlags.AddFlags(flagset) flagset.VisitAll(func(f *pflag.Flag) { // Hide Kubernetes flags except some - if !(f.Name == "kubeconfig" || f.Name == "context") { + if f.Name != "kubeconfig" && f.Name != "context" { f.Hidden = true } @@ -641,6 +641,9 @@ "color": func(color color.Color, text string) string { return color.SprintFunc()(text) }, + "colorCustom": func(text string, args ...color.Attribute) string { + return color.New(args...).SprintFunc()(text) + }, "colorBlack": color.BlackString, "colorRed": color.RedString, "colorGreen": color.GreenString, diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/cmd/cmd_test.go new/stern-1.33.0/cmd/cmd_test.go --- old/stern-1.32.0/cmd/cmd_test.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/cmd/cmd_test.go 2025-09-07 08:10:00.000000000 +0200 @@ -271,7 +271,7 @@ return o }(), "json message", - `{"message":"json message","nodeName":"node1","namespace":"ns1","podName":"pod1","containerName":"container1"} + `{"message":"json message","nodeName":"node1","namespace":"ns1","podName":"pod1","containerName":"container1","labels":{"app":"nginx","env":"prod"},"annotations":{"version":"1.23.4"}} `, false, }, @@ -432,6 +432,72 @@ `Jan 01 2024 05:00 UTC`, false, }, + { + "template with specific label", + func() *options { + o := NewOptions(streams) + o.template = "{{.PodName}} [{{.Labels.app}}] {{.Message}}" + return o + }(), + "message with app label", + "pod1 [nginx] message with app label", + false, + }, + { + "template with specific annotation", + func() *options { + o := NewOptions(streams) + o.template = "{{.PodName}} [{{.Annotations.version}}] {{.Message}}" + return o + }(), + "message with version annotation", + "pod1 [1.23.4] message with version annotation", + false, + }, + { + "template with labels as json", + func() *options { + o := NewOptions(streams) + o.template = "{{.PodName}} {{json .Labels}} {{.Message}}" + return o + }(), + "message with json labels", + "pod1 {\"app\":\"nginx\",\"env\":\"prod\"} message with json labels", + false, + }, + { + "template with annotations as json", + func() *options { + o := NewOptions(streams) + o.template = "{{.PodName}} {{json .Annotations}} {{.Message}}" + return o + }(), + "message with json annotations", + "pod1 {\"version\":\"1.23.4\"} message with json annotations", + false, + }, + { + "template with missing label", + func() *options { + o := NewOptions(streams) + o.template = "{{.PodName}} [{{.Labels.missing}}] {{.Message}}" + return o + }(), + "message with missing label", + "pod1 [<no value>] message with missing label", + false, + }, + { + "template with missing annotation", + func() *options { + o := NewOptions(streams) + o.template = "{{.PodName}} [{{.Annotations.missing}}] {{.Message}}" + return o + }(), + "message with missing annotation", + "pod1 [<no value>] message with missing annotation", + false, + }, } for _, tt := range tests { @@ -442,6 +508,8 @@ Namespace: "ns1", PodName: "pod1", ContainerName: "container1", + Labels: map[string]string{"app": "nginx", "env": "prod"}, + Annotations: map[string]string{"version": "1.23.4"}, PodColor: color.New(color.FgRed), ContainerColor: color.New(color.FgBlue), } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/cmd/flag_completion.go new/stern-1.33.0/cmd/flag_completion.go --- old/stern-1.32.0/cmd/flag_completion.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/cmd/flag_completion.go 2025-09-07 08:10:00.000000000 +0200 @@ -47,7 +47,7 @@ case "fish": err = cmd.GenFishCompletion(out, true) default: - err = fmt.Errorf("Unsupported shell type: %q", shell) + err = fmt.Errorf("unsupported shell type: %q", shell) } return err diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/go.mod new/stern-1.33.0/go.mod --- old/stern-1.32.0/go.mod 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/go.mod 2025-09-07 08:10:00.000000000 +0200 @@ -1,44 +1,52 @@ module github.com/stern/stern -go 1.23.5 +go 1.25.0 require ( github.com/AlecAivazis/survey/v2 v2.3.7 github.com/fatih/color v1.18.0 github.com/mitchellh/go-homedir v1.1.0 github.com/pkg/errors v0.9.1 - github.com/spf13/cast v1.7.1 - github.com/spf13/cobra v1.8.1 - github.com/spf13/pflag v1.0.5 - golang.org/x/sync v0.10.0 - golang.org/x/time v0.9.0 + github.com/spf13/cast v1.9.2 + github.com/spf13/cobra v1.10.1 + github.com/spf13/pflag v1.0.10 + golang.org/x/sync v0.16.0 + golang.org/x/time v0.12.0 gopkg.in/yaml.v3 v3.0.1 - k8s.io/api v0.32.1 - k8s.io/apimachinery v0.32.1 - k8s.io/cli-runtime v0.32.1 - k8s.io/client-go v0.32.1 + k8s.io/api v0.34.0 + k8s.io/apimachinery v0.34.0 + k8s.io/cli-runtime v0.34.0 + k8s.io/client-go v0.34.0 k8s.io/klog/v2 v2.130.1 - k8s.io/utils v0.0.0-20241210054802-24370beab758 + k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d ) require ( github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c // indirect github.com/blang/semver/v4 v4.0.0 // indirect github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // indirect - github.com/emicklei/go-restful/v3 v3.12.1 // indirect - github.com/fxamacker/cbor/v2 v2.7.0 // indirect + github.com/emicklei/go-restful/v3 v3.13.0 // indirect + github.com/fxamacker/cbor/v2 v2.9.0 // indirect github.com/go-errors/errors v1.5.1 // indirect - github.com/go-logr/logr v1.4.2 // indirect - github.com/go-openapi/jsonpointer v0.21.0 // indirect - github.com/go-openapi/jsonreference v0.21.0 // indirect - github.com/go-openapi/swag v0.23.0 // indirect + github.com/go-logr/logr v1.4.3 // indirect + github.com/go-openapi/jsonpointer v0.22.0 // indirect + github.com/go-openapi/jsonreference v0.21.1 // indirect + github.com/go-openapi/swag v0.24.1 // indirect + github.com/go-openapi/swag/cmdutils v0.24.0 // indirect + github.com/go-openapi/swag/conv v0.24.0 // indirect + github.com/go-openapi/swag/fileutils v0.24.0 // indirect + github.com/go-openapi/swag/jsonname v0.24.0 // indirect + github.com/go-openapi/swag/jsonutils v0.24.0 // indirect + github.com/go-openapi/swag/loading v0.24.0 // indirect + github.com/go-openapi/swag/mangling v0.24.0 // indirect + github.com/go-openapi/swag/netutils v0.24.0 // indirect + github.com/go-openapi/swag/stringutils v0.24.0 // indirect + github.com/go-openapi/swag/typeutils v0.24.0 // indirect + github.com/go-openapi/swag/yamlutils v0.24.0 // indirect github.com/gogo/protobuf v1.3.2 // indirect - github.com/golang/protobuf v1.5.4 // indirect github.com/google/btree v1.1.3 // indirect - github.com/google/gnostic-models v0.6.9 // indirect - github.com/google/go-cmp v0.6.0 // indirect - github.com/google/gofuzz v1.2.0 // indirect - github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 // indirect + github.com/google/gnostic-models v0.7.0 // indirect + github.com/google/go-cmp v0.7.0 // indirect github.com/google/uuid v1.6.0 // indirect github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 // indirect github.com/inconshreveable/mousetrap v1.1.0 // indirect @@ -52,24 +60,28 @@ github.com/mgutz/ansi v0.0.0-20200706080929-d51e80ef957d // indirect github.com/moby/term v0.5.2 // indirect github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd // indirect - github.com/modern-go/reflect2 v1.0.2 // indirect + github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee // indirect github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 // indirect github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 // indirect github.com/peterbourgon/diskv v2.0.1+incompatible // indirect + github.com/pmezard/go-difflib v1.0.0 // indirect github.com/x448/float16 v0.8.4 // indirect github.com/xlab/treeprint v1.2.0 // indirect - golang.org/x/net v0.34.0 // indirect - golang.org/x/oauth2 v0.25.0 // indirect - golang.org/x/sys v0.29.0 // indirect - golang.org/x/term v0.28.0 // indirect - golang.org/x/text v0.21.0 // indirect - google.golang.org/protobuf v1.36.3 // indirect - gopkg.in/evanphx/json-patch.v4 v4.12.0 // indirect + go.yaml.in/yaml/v2 v2.4.2 // indirect + go.yaml.in/yaml/v3 v3.0.4 // indirect + golang.org/x/net v0.43.0 // indirect + golang.org/x/oauth2 v0.30.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 + google.golang.org/protobuf v1.36.8 // indirect + gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect gopkg.in/inf.v0 v0.9.1 // indirect - k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7 // indirect - sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 // indirect - sigs.k8s.io/kustomize/api v0.19.0 // indirect - sigs.k8s.io/kustomize/kyaml v0.19.0 // indirect - sigs.k8s.io/structured-merge-diff/v4 v4.5.0 // indirect - sigs.k8s.io/yaml v1.4.0 // indirect + k8s.io/kube-openapi v0.0.0-20250905212525-66792eed8611 // indirect + sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 // indirect + sigs.k8s.io/kustomize/api v0.20.1 // indirect + sigs.k8s.io/kustomize/kyaml v0.20.1 // indirect + sigs.k8s.io/randfill v1.0.0 // indirect + sigs.k8s.io/structured-merge-diff/v6 v6.3.0 // indirect + sigs.k8s.io/yaml v1.6.0 // indirect ) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/go.sum new/stern-1.33.0/go.sum --- old/stern-1.32.0/go.sum 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/go.sum 2025-09-07 08:10:00.000000000 +0200 @@ -6,7 +6,7 @@ github.com/Netflix/go-expect v0.0.0-20220104043353-73e0943537d2/go.mod h1:HBCaDeC1lPdgDeDbhX8XFpy1jqjK0IBG8W5K+xYqA0w= github.com/blang/semver/v4 v4.0.0 h1:1PFHFE6yCCTv8C1TeyNNarDzntLi7wMI5i/pzqYIsAM= github.com/blang/semver/v4 v4.0.0/go.mod h1:IbckMUScFkM3pff0VJDNKRiT6TG/YpiHIM2yvyW5YoQ= -github.com/cpuguy83/go-md2man/v2 v2.0.4/go.mod h1:tgQtvFlXSQOSOSIRvRPT7W67SCa46tRHOmNcaadrF8o= +github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g= github.com/creack/pty v1.1.17/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= github.com/creack/pty v1.1.18 h1:n56/Zwd5o6whRC5PMGretI4IdRLlmBXYNjScPaBgsbY= github.com/creack/pty v1.1.18/go.mod h1:MOBLtS5ELjhRRrroQr9kyvTxUAFNvYEK993ew/Vr4O4= @@ -14,44 +14,59 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM= github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/emicklei/go-restful/v3 v3.12.1 h1:PJMDIM/ak7btuL8Ex0iYET9hxM3CI2sjZtzpL63nKAU= -github.com/emicklei/go-restful/v3 v3.12.1/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= +github.com/emicklei/go-restful/v3 v3.13.0 h1:C4Bl2xDndpU6nJ4bc1jXd+uTmYPVUwkD6bFY/oTyCes= +github.com/emicklei/go-restful/v3 v3.13.0/go.mod h1:6n3XBCmQQb25CM2LCACGz8ukIrRry+4bhvbpWn3mrbc= github.com/fatih/color v1.18.0 h1:S8gINlzdQ840/4pfAwic/ZE0djQEH3wM94VfqLTZcOM= github.com/fatih/color v1.18.0/go.mod h1:4FelSpRwEGDpQ12mAdzqdOukCy4u8WUtOY6lkT/6HfU= github.com/frankban/quicktest v1.14.6 h1:7Xjx+VpznH+oBnejlPUj8oUpdxnVs4f8XU8WnHkI4W8= github.com/frankban/quicktest v1.14.6/go.mod h1:4ptaffx2x8+WTWXmUCuVU6aPUX1/Mz7zb5vbUoiM6w0= -github.com/fxamacker/cbor/v2 v2.7.0 h1:iM5WgngdRBanHcxugY4JySA0nk1wZorNOpTgCMedv5E= -github.com/fxamacker/cbor/v2 v2.7.0/go.mod h1:pxXPTn3joSm21Gbwsv0w9OSA2y1HFR9qXEeXQVeNoDQ= +github.com/fxamacker/cbor/v2 v2.9.0 h1:NpKPmjDBgUfBms6tr6JZkTHtfFGcMKsw3eGcmD/sapM= +github.com/fxamacker/cbor/v2 v2.9.0/go.mod h1:vM4b+DJCtHn+zz7h3FFp/hDAI9WNWCsZj23V5ytsSxQ= github.com/go-errors/errors v1.5.1 h1:ZwEMSLRCapFLflTpT7NKaAc7ukJ8ZPEjzlxt8rPN8bk= github.com/go-errors/errors v1.5.1/go.mod h1:sIVyrIiJhuEF+Pj9Ebtd6P/rEYROXFi3BopGUQ5a5Og= -github.com/go-logr/logr v1.4.2 h1:6pFjapn8bFcIbiKo3XT4j/BhANplGihG6tvd+8rYgrY= -github.com/go-logr/logr v1.4.2/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= -github.com/go-openapi/jsonpointer v0.21.0 h1:YgdVicSA9vH5RiHs9TZW5oyafXZFc6+2Vc1rr/O9oNQ= -github.com/go-openapi/jsonpointer v0.21.0/go.mod h1:IUyH9l/+uyhIYQ/PXVA41Rexl+kOkAPDdXEYns6fzUY= -github.com/go-openapi/jsonreference v0.21.0 h1:Rs+Y7hSXT83Jacb7kFyjn4ijOuVGSvOdF2+tg1TRrwQ= -github.com/go-openapi/jsonreference v0.21.0/go.mod h1:LmZmgsrTkVg9LG4EaHeY8cBDslNPMo06cago5JNLkm4= -github.com/go-openapi/swag v0.23.0 h1:vsEVJDUo2hPJ2tu0/Xc+4noaxyEffXNIs3cOULZ+GrE= -github.com/go-openapi/swag v0.23.0/go.mod h1:esZ8ITTYEsH1V2trKHjAN8Ai7xHb8RV+YSZ577vPjgQ= +github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI= +github.com/go-logr/logr v1.4.3/go.mod h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY= +github.com/go-openapi/jsonpointer v0.22.0 h1:TmMhghgNef9YXxTu1tOopo+0BGEytxA+okbry0HjZsM= +github.com/go-openapi/jsonpointer v0.22.0/go.mod h1:xt3jV88UtExdIkkL7NloURjRQjbeUgcxFblMjq2iaiU= +github.com/go-openapi/jsonreference v0.21.1 h1:bSKrcl8819zKiOgxkbVNRUBIr6Wwj9KYrDbMjRs0cDA= +github.com/go-openapi/jsonreference v0.21.1/go.mod h1:PWs8rO4xxTUqKGu+lEvvCxD5k2X7QYkKAepJyCmSTT8= +github.com/go-openapi/swag v0.24.1 h1:DPdYTZKo6AQCRqzwr/kGkxJzHhpKxZ9i/oX0zag+MF8= +github.com/go-openapi/swag v0.24.1/go.mod h1:sm8I3lCPlspsBBwUm1t5oZeWZS0s7m/A+Psg0ooRU0A= +github.com/go-openapi/swag/cmdutils v0.24.0 h1:KlRCffHwXFI6E5MV9n8o8zBRElpY4uK4yWyAMWETo9I= +github.com/go-openapi/swag/cmdutils v0.24.0/go.mod h1:uxib2FAeQMByyHomTlsP8h1TtPd54Msu2ZDU/H5Vuf8= +github.com/go-openapi/swag/conv v0.24.0 h1:ejB9+7yogkWly6pnruRX45D1/6J+ZxRu92YFivx54ik= +github.com/go-openapi/swag/conv v0.24.0/go.mod h1:jbn140mZd7EW2g8a8Y5bwm8/Wy1slLySQQ0ND6DPc2c= +github.com/go-openapi/swag/fileutils v0.24.0 h1:U9pCpqp4RUytnD689Ek/N1d2N/a//XCeqoH508H5oak= +github.com/go-openapi/swag/fileutils v0.24.0/go.mod h1:3SCrCSBHyP1/N+3oErQ1gP+OX1GV2QYFSnrTbzwli90= +github.com/go-openapi/swag/jsonname v0.24.0 h1:2wKS9bgRV/xB8c62Qg16w4AUiIrqqiniJFtZGi3dg5k= +github.com/go-openapi/swag/jsonname v0.24.0/go.mod h1:GXqrPzGJe611P7LG4QB9JKPtUZ7flE4DOVechNaDd7Q= +github.com/go-openapi/swag/jsonutils v0.24.0 h1:F1vE1q4pg1xtO3HTyJYRmEuJ4jmIp2iZ30bzW5XgZts= +github.com/go-openapi/swag/jsonutils v0.24.0/go.mod h1:vBowZtF5Z4DDApIoxcIVfR8v0l9oq5PpYRUuteVu6f0= +github.com/go-openapi/swag/loading v0.24.0 h1:ln/fWTwJp2Zkj5DdaX4JPiddFC5CHQpvaBKycOlceYc= +github.com/go-openapi/swag/loading v0.24.0/go.mod h1:gShCN4woKZYIxPxbfbyHgjXAhO61m88tmjy0lp/LkJk= +github.com/go-openapi/swag/mangling v0.24.0 h1:PGOQpViCOUroIeak/Uj/sjGAq9LADS3mOyjznmHy2pk= +github.com/go-openapi/swag/mangling v0.24.0/go.mod h1:Jm5Go9LHkycsz0wfoaBDkdc4CkpuSnIEf62brzyCbhc= +github.com/go-openapi/swag/netutils v0.24.0 h1:Bz02HRjYv8046Ycg/w80q3g9QCWeIqTvlyOjQPDjD8w= +github.com/go-openapi/swag/netutils v0.24.0/go.mod h1:WRgiHcYTnx+IqfMCtu0hy9oOaPR0HnPbmArSRN1SkZM= +github.com/go-openapi/swag/stringutils v0.24.0 h1:i4Z/Jawf9EvXOLUbT97O0HbPUja18VdBxeadyAqS1FM= +github.com/go-openapi/swag/stringutils v0.24.0/go.mod h1:5nUXB4xA0kw2df5PRipZDslPJgJut+NjL7D25zPZ/4w= +github.com/go-openapi/swag/typeutils v0.24.0 h1:d3szEGzGDf4L2y1gYOSSLeK6h46F+zibnEas2Jm/wIw= +github.com/go-openapi/swag/typeutils v0.24.0/go.mod h1:q8C3Kmk/vh2VhpCLaoR2MVWOGP8y7Jc8l82qCTd1DYI= +github.com/go-openapi/swag/yamlutils v0.24.0 h1:bhw4894A7Iw6ne+639hsBNRHg9iZg/ISrOVr+sJGp4c= +github.com/go-openapi/swag/yamlutils v0.24.0/go.mod h1:DpKv5aYuaGm/sULePoeiG8uwMpZSfReo1HR3Ik0yaG8= github.com/go-task/slim-sprig/v3 v3.0.0 h1:sUs3vkvUymDpBKi3qH1YSqBQk9+9D/8M2mN1vB6EwHI= github.com/go-task/slim-sprig/v3 v3.0.0/go.mod h1:W848ghGpv3Qj3dhTPRyJypKRiqCdHZiAzKg9hl15HA8= github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q= github.com/gogo/protobuf v1.3.2/go.mod h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q= -github.com/golang/protobuf v1.5.4 h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek= -github.com/golang/protobuf v1.5.4/go.mod h1:lnTiLA8Wa4RWRcIUkrtSVa5nRhsEGBg48fD6rSs7xps= github.com/google/btree v1.1.3 h1:CVpQJjYgC4VbzxeGVHfvZrv1ctoYCAI8vbl07Fcxlyg= github.com/google/btree v1.1.3/go.mod h1:qOPhT0dTNdNzV6Z/lhRX0YXUafgPLFUh+gZMl761Gm4= -github.com/google/gnostic-models v0.6.9 h1:MU/8wDLif2qCXZmzncUQ/BOfxWfthHi63KqpoNbWqVw= -github.com/google/gnostic-models v0.6.9/go.mod h1:CiWsm0s6BSQd1hRn8/QmxqB6BesYcbSZxsz9b0KuDBw= -github.com/google/go-cmp v0.5.9/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= -github.com/google/go-cmp v0.6.0 h1:ofyhxvXcZhMsU5ulbFiLKl/XBFqE1GSq7atu8tAmTRI= -github.com/google/go-cmp v0.6.0/go.mod h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY= +github.com/google/gnostic-models v0.7.0 h1:qwTtogB15McXDaNqTZdzPJRHvaVJlAl+HVQnLmJEJxo= +github.com/google/gnostic-models v0.7.0/go.mod h1:whL5G0m6dmc5cPxKc5bdKdEN3UjI7OUGxBlw57miDrQ= +github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8= +github.com/google/go-cmp v0.7.0/go.mod h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU= github.com/google/gofuzz v1.0.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= -github.com/google/gofuzz v1.2.0 h1:xRy4A+RhZaiKjJ1bPfwQ8sedCA+YS2YcCHW6ec7JMi0= -github.com/google/gofuzz v1.2.0/go.mod h1:dBl0BpW6vV/+mYPU4Po3pmUjxk6FQPldtuIdl/M65Eg= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db h1:097atOisP2aRj7vFgYQBbFN4U4JNXUNYpxael3UzMyo= github.com/google/pprof v0.0.0-20241029153458-d1b30febd7db/go.mod h1:vavhavw2zAxS5dIdcRluK6cSGGPlZynqzFM8NdvU144= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4= -github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510/go.mod h1:pupxD2MaaD3pAXIBCelhxNneeOaAeabZDe5s4K6zSpQ= github.com/google/uuid v1.6.0 h1:NIvaJDMOsjHA8n1jAhLSgzrAzy1Hgr+hNrb57e+94F0= github.com/google/uuid v1.6.0/go.mod h1:TIyPZe4MgqvfeYDBFedMoGGpEw/LqOeaOT+nhxU+yHo= github.com/gregjones/httpcache v0.0.0-20190611155906-901d90724c79 h1:+ngKgrYPPJrOjhax5N+uePQ0Fh1Z7PheYoUI/0nzkPA= @@ -92,8 +107,9 @@ github.com/modern-go/concurrent v0.0.0-20180228061459-e0a39a4cb421/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd h1:TRLaZ9cD/w8PVh93nsPXa1VrQ6jlwL5oN8l14QlcNfg= github.com/modern-go/concurrent v0.0.0-20180306012644-bacd9c7ef1dd/go.mod h1:6dJC0mAP4ikYIbvyc7fijjWJddQyLn8Ig3JB5CqoB9Q= -github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/modern-go/reflect2 v1.0.2/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee h1:W5t00kpgFdJifH4BDsTlE89Zl93FEloxaWZfGcifgq8= +github.com/modern-go/reflect2 v1.0.3-0.20250322232337-35a7c28c31ee/go.mod h1:yWuevngMOJpCy52FWWMvUC8ws7m/LJsjYzDa0/r8luk= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00 h1:n6/2gBQ3RWajuToeY6ZtZTIKv2v7ThUy5KKusIT0yc0= github.com/monochromegane/go-gitignore v0.0.0-20200626010858-205db1a8cc00/go.mod h1:Pm3mSP3c5uWn86xMLZ5Sa7JB9GsEZySvHYXCTK4E9q4= github.com/munnerz/goautoneg v0.0.0-20191010083416-a7dc8b61c822 h1:C3w9PqII01/Oq1c1nUAm88MOHcQC9l5mIlSMApZMrHA= @@ -106,28 +122,28 @@ github.com/peterbourgon/diskv v2.0.1+incompatible/go.mod h1:uqqh8zWWbv1HBMNONnaR/tNboyR3/BZd58JJSHlUSCU= 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/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 h1:Jamvg5psRIccs7FGNTlIRMkT8wgtp5eCXdBlqhYGL6U= -github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= -github.com/rogpeppe/go-internal v1.12.0 h1:exVL4IDcn6na9z1rAb56Vxr+CgyK3nn3O+epU5NdKM8= -github.com/rogpeppe/go-internal v1.12.0/go.mod h1:E+RYuTGaKKdloAfM02xzb0FW3Paa99yedzYV+kq4uf4= +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/russross/blackfriday/v2 v2.1.0/go.mod h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM= github.com/sergi/go-diff v1.2.0 h1:XU+rvMAioB0UC3q1MFrIQy4Vo5/4VsRDQQXHsEya6xQ= github.com/sergi/go-diff v1.2.0/go.mod h1:STckp+ISIX8hZLjrqAeVduY0gWCT9IjLuqbuNXdaHfM= -github.com/spf13/cast v1.7.1 h1:cuNEagBQEHWN1FnbGEjCXL2szYEXqfJPbP2HNUaca9Y= -github.com/spf13/cast v1.7.1/go.mod h1:ancEpBxwJDODSW/UG4rDrAqiKolqNNh2DX3mk86cAdo= -github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM= -github.com/spf13/cobra v1.8.1/go.mod h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y= -github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA= -github.com/spf13/pflag v1.0.5/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/cast v1.9.2 h1:SsGfm7M8QOFtEzumm7UZrZdLLquNdzFYfIbEXntcFbE= +github.com/spf13/cast v1.9.2/go.mod h1:jNfB8QC9IA6ZuY2ZjDp0KtFO2LZZlg4S/7bzP6qqeHo= +github.com/spf13/cobra v1.10.1 h1:lJeBwCfmrnXthfAupyUTzJ/J4Nc1RsHC/mSRU2dll/s= +github.com/spf13/cobra v1.10.1/go.mod h1:7SmJGaTHFVBY0jW4NXGluQoLvhqFQM+6XSKD+P4XaB0= +github.com/spf13/pflag v1.0.9/go.mod h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg= +github.com/spf13/pflag v1.0.10 h1:4EBh2KAYBwaONj6b2Ye1GiHfwjqyROoF4RwYO+vPwFk= +github.com/spf13/pflag v1.0.10/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= github.com/stretchr/testify v1.3.0/go.mod h1:M5WIy9Dh21IEIfnGCwXGc5bZfKNJtfHm1UVUgZn+9EI= github.com/stretchr/testify v1.6.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= -github.com/stretchr/testify v1.9.0 h1:HtqpIVDClZ4nwg75+f6Lvsy/wHu+3BoSGCbBAcpTsTg= -github.com/stretchr/testify v1.9.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/x448/float16 v0.8.4 h1:qLwI1I70+NjRFUR3zs1JPUCgaCXSh3SW62uAKT1mSBM= github.com/x448/float16 v0.8.4/go.mod h1:14CWIYCyZA/cWjXOioeEpHeN/83MdbZDRQHoFcYsOfg= github.com/xlab/treeprint v1.2.0 h1:HzHnuAF1plUN2zGlAFHbSQP2qJ0ZAD3XF5XD7OesXRQ= @@ -137,6 +153,10 @@ github.com/yuin/goldmark v1.4.13/go.mod h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY= go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto= go.uber.org/goleak v1.3.0/go.mod h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE= +go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI= +go.yaml.in/yaml/v2 v2.4.2/go.mod h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU= +go.yaml.in/yaml/v3 v3.0.4 h1:tfq32ie2Jv2UxXFdLJdh3jXuOzWiL1fo0bu/FbuKpbc= +go.yaml.in/yaml/v3 v3.0.4/go.mod h1:DhzuOOF2ATzADvBadXxruRBLzYTpT36CKvDb3+aBEFg= golang.org/x/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= @@ -150,16 +170,16 @@ golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU= golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg= golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.34.0 h1:Mb7Mrk043xzHgnRM88suvJFwzVrRfHEHJEl5/71CKw0= -golang.org/x/net v0.34.0/go.mod h1:di0qlW3YNM5oh6GqDGQr92MyTozJPmybPK4Ev/Gm31k= -golang.org/x/oauth2 v0.25.0 h1:CY4y7XT9v0cRI9oupztF8AgiIu99L/ksR/Xp/6jrZ70= -golang.org/x/oauth2 v0.25.0/go.mod h1:XYTD2NtWslqkgxebSiOHnXEap4TF09sJSc7H1sXbhtI= +golang.org/x/net v0.43.0 h1:lat02VYK2j4aLzMzecihNvTlJNQUq316m2Mr9rnM6YE= +golang.org/x/net v0.43.0/go.mod h1:vhO1fvI4dGsIjh73sWfUVjj3N7CA9WkKJNQm2svM6Jg= +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.0.0-20220722155255-886fb9371eb4/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM= -golang.org/x/sync v0.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ= -golang.org/x/sync v0.10.0/go.mod h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk= +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-20190222072716-a9d3bda3a223/go.mod h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY= golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs= @@ -170,64 +190,66 @@ golang.org/x/sys v0.0.0-20220520151302-bc2c85ada10a/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= -golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU= -golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA= +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.0.0-20201126162022-7de9c90e9dd1/go.mod h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo= golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8= -golang.org/x/term v0.28.0 h1:/Ts8HFuMR2E6IP/jlo7QVLZHggjKQbhu/7H0LJFr3Gg= -golang.org/x/term v0.28.0/go.mod h1:Sw/lC2IAUZ92udQNf3WodGtn4k/XoLyZoh8v/8uiwek= +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.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ= golang.org/x/text v0.4.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8= -golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo= -golang.org/x/text v0.21.0/go.mod h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ= -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/text v0.28.0 h1:rhazDwis8INMIwQ4tpjLDzUhx6RlXqZNPEM0huQojng= +golang.org/x/text v0.28.0/go.mod h1:U8nCwOR8jO/marOQ0QbDiOngZVEBB7MAiitBuMjXiNU= +golang.org/x/time v0.12.0 h1:ScB/8o8olJvc+CQPWrK3fPZNfh7qgwCrY0zJmoEQLSE= +golang.org/x/time v0.12.0/go.mod h1:CDIdPxbZBQxdj6cxyCIdrNogrJKMJ7pr37NYpMcMDSg= 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.1.12/go.mod h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc= -golang.org/x/tools v0.26.0 h1:v/60pFQmzmT9ExmjDv2gGIfi3OqfKoEP6I5+umXlbnQ= -golang.org/x/tools v0.26.0/go.mod h1:TPVVj70c7JJ3WCazhD8OdXcZg/og+b9+tH/KxylGwH0= +golang.org/x/tools v0.36.0 h1:kWS0uv/zsvHEle1LbV5LE8QujrxB3wfQyxHfhOk0Qkg= +golang.org/x/tools v0.36.0/go.mod h1:WBDiHKJK8YgLHlcQPYQzNCkUxUypCaa5ZegCVutKm+s= 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.3 h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU= -google.golang.org/protobuf v1.36.3/go.mod h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE= +google.golang.org/protobuf v1.36.8 h1:xHScyCOEuuwZEc6UtSOvPbAT4zRh0xcNRYekJwfqyMc= +google.golang.org/protobuf v1.36.8/go.mod h1:fuxRtAxBytpl4zzqUh6/eyUujkJdNiuEkXntxiD/uRU= 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= -gopkg.in/evanphx/json-patch.v4 v4.12.0 h1:n6jtcsulIzXPJaxegRbvFNNrZDjbij7ny3gmSPG+6V4= -gopkg.in/evanphx/json-patch.v4 v4.12.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= +gopkg.in/evanphx/json-patch.v4 v4.13.0 h1:czT3CmqEaQ1aanPc5SdlgQrrEIb8w/wwCvWWnfEbYzo= +gopkg.in/evanphx/json-patch.v4 v4.13.0/go.mod h1:p8EYWUEYMpynmqDbY58zCKCFZw8pRWMG4EsWvDvM72M= gopkg.in/inf.v0 v0.9.1 h1:73M5CoZyi3ZLMOyDlQh031Cx6N9NDJ2Vvfl76EDAgDc= gopkg.in/inf.v0 v0.9.1/go.mod h1:cWUDdTG/fYaXco+Dcufb5Vnc6Gp2YChqWtbxRZE0mXw= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -k8s.io/api v0.32.1 h1:f562zw9cy+GvXzXf0CKlVQ7yHJVYzLfL6JAS4kOAaOc= -k8s.io/api v0.32.1/go.mod h1:/Yi/BqkuueW1BgpoePYBRdDYfjPF5sgTr5+YqDZra5k= -k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs= -k8s.io/apimachinery v0.32.1/go.mod h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE= -k8s.io/cli-runtime v0.32.1 h1:19nwZPlYGJPUDbhAxDIS2/oydCikvKMHsxroKNGA2mM= -k8s.io/cli-runtime v0.32.1/go.mod h1:NJPbeadVFnV2E7B7vF+FvU09mpwYlZCu8PqjzfuOnkY= -k8s.io/client-go v0.32.1 h1:otM0AxdhdBIaQh7l1Q0jQpmo7WOFIk5FFa4bg6YMdUU= -k8s.io/client-go v0.32.1/go.mod h1:aTTKZY7MdxUaJ/KiUs8D+GssR9zJZi77ZqtzcGXIiDg= +k8s.io/api v0.34.0 h1:L+JtP2wDbEYPUeNGbeSa/5GwFtIA662EmT2YSLOkAVE= +k8s.io/api v0.34.0/go.mod h1:YzgkIzOOlhl9uwWCZNqpw6RJy9L2FK4dlJeayUoydug= +k8s.io/apimachinery v0.34.0 h1:eR1WO5fo0HyoQZt1wdISpFDffnWOvFLOOeJ7MgIv4z0= +k8s.io/apimachinery v0.34.0/go.mod h1:/GwIlEcWuTX9zKIg2mbw0LRFIsXwrfoVxn+ef0X13lw= +k8s.io/cli-runtime v0.34.0 h1:N2/rUlJg6TMEBgtQ3SDRJwa8XyKUizwjlOknT1mB2Cw= +k8s.io/cli-runtime v0.34.0/go.mod h1:t/skRecS73Piv+J+FmWIQA2N2/rDjdYSQzEE67LUUs8= +k8s.io/client-go v0.34.0 h1:YoWv5r7bsBfb0Hs2jh8SOvFbKzzxyNo0nSb0zC19KZo= +k8s.io/client-go v0.34.0/go.mod h1:ozgMnEKXkRjeMvBZdV1AijMHLTh3pbACPvK7zFR+QQY= 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-20241212222426-2c72e554b1e7 h1:hcha5B1kVACrLujCKLbr8XWMxCxzQx42DY8QKYJrDLg= -k8s.io/kube-openapi v0.0.0-20241212222426-2c72e554b1e7/go.mod h1:GewRfANuJ70iYzvn+i4lezLDAFzvjxZYK1gn1lWcfas= -k8s.io/utils v0.0.0-20241210054802-24370beab758 h1:sdbE21q2nlQtFh65saZY+rRM6x6aJJI8IUa1AmH/qa0= -k8s.io/utils v0.0.0-20241210054802-24370beab758/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8 h1:gBQPwqORJ8d8/YNZWEjoZs7npUVDpVXUUOFfW6CgAqE= -sigs.k8s.io/json v0.0.0-20241014173422-cfa47c3a1cc8/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= -sigs.k8s.io/kustomize/api v0.19.0 h1:F+2HB2mU1MSiR9Hp1NEgoU2q9ItNOaBJl0I4Dlus5SQ= -sigs.k8s.io/kustomize/api v0.19.0/go.mod h1:/BbwnivGVcBh1r+8m3tH1VNxJmHSk1PzP5fkP6lbL1o= -sigs.k8s.io/kustomize/kyaml v0.19.0 h1:RFge5qsO1uHhwJsu3ipV7RNolC7Uozc0jUBC/61XSlA= -sigs.k8s.io/kustomize/kyaml v0.19.0/go.mod h1:FeKD5jEOH+FbZPpqUghBP8mrLjJ3+zD3/rf9NNu1cwY= -sigs.k8s.io/structured-merge-diff/v4 v4.5.0 h1:nbCitCK2hfnhyiKo6uf2HxUPTCodY6Qaf85SbDIaMBk= -sigs.k8s.io/structured-merge-diff/v4 v4.5.0/go.mod h1:N8f93tFZh9U6vpxwRArLiikrE5/2tiu1w1AGfACIGE4= -sigs.k8s.io/yaml v1.4.0 h1:Mk1wCc2gy/F0THH0TAp1QYyJNzRm2KCLy3o5ASXVI5E= -sigs.k8s.io/yaml v1.4.0/go.mod h1:Ejl7/uTz7PSA4eKMyQCUTnhZYNmLIl+5c2lQPGR2BPY= +k8s.io/kube-openapi v0.0.0-20250905212525-66792eed8611 h1:o4oKOsvSymDkZRsMAPZU7bRdwL+lPOK5VS10Dr1D6eg= +k8s.io/kube-openapi v0.0.0-20250905212525-66792eed8611/go.mod h1:kdmbQkyfwUagLfXIad1y2TdrjPFWp2Q89B3qkRwf/pQ= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d h1:wAhiDyZ4Tdtt7e46e9M5ZSAJ/MnPGPs+Ki1gHw4w1R0= +k8s.io/utils v0.0.0-20250820121507-0af2bda4dd1d/go.mod h1:OLgZIPagt7ERELqWJFomSt595RzquPNLL48iOWgYOg0= +sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730 h1:IpInykpT6ceI+QxKBbEflcR5EXP7sU1kvOlxwZh5txg= +sigs.k8s.io/json v0.0.0-20250730193827-2d320260d730/go.mod h1:mdzfpAEoE6DHQEN0uh9ZbOCuHbLK5wOm7dK4ctXE9Tg= +sigs.k8s.io/kustomize/api v0.20.1 h1:iWP1Ydh3/lmldBnH/S5RXgT98vWYMaTUL1ADcr+Sv7I= +sigs.k8s.io/kustomize/api v0.20.1/go.mod h1:t6hUFxO+Ph0VxIk1sKp1WS0dOjbPCtLJ4p8aADLwqjM= +sigs.k8s.io/kustomize/kyaml v0.20.1 h1:PCMnA2mrVbRP3NIB6v9kYCAc38uvFLVs8j/CD567A78= +sigs.k8s.io/kustomize/kyaml v0.20.1/go.mod h1:0EmkQHRUsJxY8Ug9Niig1pUMSCGHxQ5RklbpV/Ri6po= +sigs.k8s.io/randfill v1.0.0 h1:JfjMILfT8A6RbawdsK2JXGBR5AQVfd+9TbzrlneTyrU= +sigs.k8s.io/randfill v1.0.0/go.mod h1:XeLlZ/jmk4i1HRopwe7/aU3H5n1zNUcX6TM94b3QxOY= +sigs.k8s.io/structured-merge-diff/v6 v6.3.0 h1:jTijUJbW353oVOd9oTlifJqOGEkUw2jB/fXCbTiQEco= +sigs.k8s.io/structured-merge-diff/v6 v6.3.0/go.mod h1:M3W8sfWvn2HhQDIbGWj3S099YozAsymCo/wrT5ohRUE= +sigs.k8s.io/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/stern-1.32.0/stern/container_state.go new/stern-1.33.0/stern/container_state.go --- old/stern-1.32.0/stern/container_state.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/container_state.go 2025-09-07 08:10:00.000000000 +0200 @@ -31,13 +31,14 @@ // NewContainerState returns corresponding ContainerState func NewContainerState(stateConfig string) (ContainerState, error) { - if stateConfig == RUNNING { + switch stateConfig { + case RUNNING: return RUNNING, nil - } else if stateConfig == WAITING { + case WAITING: return WAITING, nil - } else if stateConfig == TERMINATED { + case TERMINATED: return TERMINATED, nil - } else if stateConfig == ALL_STATES { + case ALL_STATES: return ALL_STATES, nil } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/file_tail.go new/stern-1.33.0/stern/file_tail.go --- old/stern-1.32.0/stern/file_tail.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/file_tail.go 2025-09-07 08:10:00.000000000 +0200 @@ -56,8 +56,7 @@ } } -// Print prints a color coded log message -func (t *FileTail) Print(msg string) { +func (t *FileTail) sprint(msg string) (string, error) { vm := Log{ Message: msg, NodeName: "", @@ -70,11 +69,32 @@ var buf bytes.Buffer if err := t.tmpl.Execute(&buf, vm); err != nil { - fmt.Fprintf(t.errOut, "expanding template failed: %s\n", err) + return "", fmt.Errorf("expanding template failed: %s", err) + } + + return buf.String(), nil +} + +// Print prints a color coded log message +func (t *FileTail) Print(msg string) { + buf, err := t.sprint(msg) + if err != nil { + fmt.Fprintf(t.errOut, "%s\n", err) + return + } + + fmt.Fprint(t.out, t.Options.HighlightMatchedString(buf)) +} + +// PrintWithoutHighlight prints a log message without applying any highlight. +func (t *FileTail) PrintWithoutHighlight(msg string) { + buf, err := t.sprint(msg) + if err != nil { + fmt.Fprintf(t.errOut, "%s\n", err) return } - fmt.Fprint(t.out, buf.String()) + fmt.Fprint(t.out, buf) } func (t *FileTail) consumeLine(line string) { @@ -84,6 +104,5 @@ return } - msg := t.Options.HighlightMatchedString(content) - t.Print(msg) + t.Print(content) } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/stern.go new/stern-1.33.0/stern/stern.go --- old/stern-1.32.0/stern/stern.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/stern.go 2025-09-07 08:10:00.000000000 +0200 @@ -66,7 +66,7 @@ } } newTail := func(t *Target) *Tail { - return NewTail(client.CoreV1(), t.Node, t.Namespace, t.Pod, t.Container, config.Template, config.Out, config.ErrOut, newTailOptions(), config.DiffContainer) + return NewTail(client.CoreV1(), t.Pod, t.Container, config.Template, config.Out, config.ErrOut, newTailOptions(), config.DiffContainer) } if config.Stdin { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/tail.go new/stern-1.33.0/stern/tail.go --- old/stern-1.32.0/stern/tail.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/tail.go 2025-09-07 08:10:00.000000000 +0200 @@ -43,10 +43,9 @@ type Tail struct { clientset corev1client.CoreV1Interface - NodeName string - Namespace string - PodName string - ContainerName string + Pod *corev1.Pod + ContainerName string + Options *TailOptions closed chan struct{} podColor *color.Color @@ -67,14 +66,12 @@ } // NewTail returns a new tail for a Kubernetes container inside a pod -func NewTail(clientset corev1client.CoreV1Interface, nodeName, namespace, podName, containerName string, tmpl *template.Template, out, errOut io.Writer, options *TailOptions, diffContainer bool) *Tail { - podColor, containerColor := determineColor(podName, containerName, diffContainer) +func NewTail(clientset corev1client.CoreV1Interface, pod *corev1.Pod, containerName string, tmpl *template.Template, out, errOut io.Writer, options *TailOptions, diffContainer bool) *Tail { + podColor, containerColor := determineColor(pod.Name, containerName, diffContainer) return &Tail{ clientset: clientset, - NodeName: nodeName, - Namespace: namespace, - PodName: podName, + Pod: pod, ContainerName: containerName, Options: options, closed: make(chan struct{}), @@ -111,7 +108,7 @@ t.printStarting() - req := t.clientset.Pods(t.Namespace).GetLogs(t.PodName, &corev1.PodLogOptions{ + req := t.clientset.Pods(t.Pod.Namespace).GetLogs(t.Pod.Name, &corev1.PodLogOptions{ Follow: t.Options.Follow, Timestamps: true, Container: t.ContainerName, @@ -155,9 +152,9 @@ p := t.podColor.SprintFunc() c := t.containerColor.SprintFunc() if t.Options.Namespace { - fmt.Fprintf(t.errOut, "%s %s %s › %s\n", g("+"), p(t.Namespace), p(t.PodName), c(t.ContainerName)) + fmt.Fprintf(t.errOut, "%s %s %s › %s\n", g("+"), p(t.Pod.Namespace), p(t.Pod.Name), c(t.ContainerName)) } else { - fmt.Fprintf(t.errOut, "%s %s › %s\n", g("+"), p(t.PodName), c(t.ContainerName)) + fmt.Fprintf(t.errOut, "%s %s › %s\n", g("+"), p(t.Pod.Name), c(t.ContainerName)) } } } @@ -168,9 +165,9 @@ p := t.podColor.SprintFunc() c := t.containerColor.SprintFunc() if t.Options.Namespace { - fmt.Fprintf(t.errOut, "%s %s %s › %s\n", r("-"), p(t.Namespace), p(t.PodName), c(t.ContainerName)) + fmt.Fprintf(t.errOut, "%s %s %s › %s\n", r("-"), p(t.Pod.Namespace), p(t.Pod.Name), c(t.ContainerName)) } else { - fmt.Fprintf(t.errOut, "%s %s › %s\n", r("-"), p(t.PodName), c(t.ContainerName)) + fmt.Fprintf(t.errOut, "%s %s › %s\n", r("-"), p(t.Pod.Name), c(t.ContainerName)) } } } @@ -200,25 +197,47 @@ } } -// Print prints a color coded log message with the pod and container names -func (t *Tail) Print(msg string) { +func (t *Tail) sprint(msg string) (string, error) { vm := Log{ Message: msg, - NodeName: t.NodeName, - Namespace: t.Namespace, - PodName: t.PodName, + NodeName: t.Pod.Spec.NodeName, + Namespace: t.Pod.Namespace, + PodName: t.Pod.Name, ContainerName: t.ContainerName, + Labels: t.Pod.Labels, + Annotations: t.Pod.Annotations, PodColor: t.podColor, ContainerColor: t.containerColor, } var buf bytes.Buffer if err := t.tmpl.Execute(&buf, vm); err != nil { - fmt.Fprintf(t.errOut, "expanding template failed: %s\n", err) + return "", fmt.Errorf("expanding template failed: %s", err) + } + + return buf.String(), nil +} + +// Print prints a color coded log message with the pod and container names +func (t *Tail) Print(msg string) { + buf, err := t.sprint(msg) + if err != nil { + fmt.Fprintf(t.errOut, "%s\n", err) + return + } + + fmt.Fprint(t.out, t.Options.HighlightMatchedString(buf)) +} + +// PrintWithoutHighlight prints a log message without applying any highlight. +func (t *Tail) PrintWithoutHighlight(msg string) { + buf, err := t.sprint(msg) + if err != nil { + fmt.Fprintf(t.errOut, "%s\n", err) return } - fmt.Fprint(t.out, buf.String()) + fmt.Fprint(t.out, buf) } func (t *Tail) GetResumeRequest() *ResumeRequest { @@ -231,7 +250,7 @@ func (t *Tail) consumeLine(line string) { rfc3339Nano, content, err := splitLogLine(line) if err != nil { - t.Print(fmt.Sprintf("[%v] %s", err, line)) + t.PrintWithoutHighlight(fmt.Sprintf("[%v] %s", err, line)) return } @@ -247,18 +266,16 @@ return } - msg := t.Options.HighlightMatchedString(content) - if t.Options.Timestamps { updatedTs, err := t.Options.UpdateTimezoneAndFormat(rfc3339Nano) if err != nil { - t.Print(fmt.Sprintf("[%v] %s", err, line)) + t.PrintWithoutHighlight(fmt.Sprintf("[%v] %s", err, line)) return } - msg = updatedTs + " " + msg + content = updatedTs + " " + content } - t.Print(msg) + t.Print(content) } func (t *Tail) rememberLastTimestamp(timestamp string) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/tail_test.go new/stern-1.33.0/stern/tail_test.go --- old/stern-1.32.0/stern/tail_test.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/tail_test.go 2025-09-07 08:10:00.000000000 +0200 @@ -3,11 +3,16 @@ import ( "bytes" "context" + "fmt" + "github.com/fatih/color" "io" "reflect" + "regexp" "testing" "text/template" + corev1 "k8s.io/api/core/v1" + metav1 "k8s.io/apimachinery/pkg/apis/meta/v1" "k8s.io/client-go/kubernetes/fake" ) @@ -103,14 +108,152 @@ for i, tt := range tests { t.Run(tt.name, func(t *testing.T) { out := new(bytes.Buffer) - tail := NewTail(clientset.CoreV1(), "my-node", "my-namespace", "my-pod", "my-container", tmpl, out, io.Discard, &TailOptions{}, false) + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "my-namespace", + Name: "my-pod", + }, + Spec: corev1.PodSpec{ + NodeName: "my-node", + }, + } + tail := NewTail(clientset.CoreV1(), pod, "my-container", tmpl, out, io.Discard, &TailOptions{}, false) tail.resumeRequest = tt.resumeReq if err := tail.ConsumeRequest(context.TODO(), &responseWrapperMock{data: bytes.NewBufferString(logLines)}); err != nil { t.Fatalf("%d: unexpected err %v", i, err) } if !bytes.Equal(tt.expected, out.Bytes()) { - t.Errorf("%d: expected %s, but actual %s", i, tt.expected, out) + t.Errorf("%d: expected `%s`, but actual `%s`", i, tt.expected, out) + } + }) + } +} + +func TestHighlight(t *testing.T) { + color.NoColor = false + defer func() { color.NoColor = true }() + coloredLine := colorHighlight("line") + + tmpl := template.Must(template.New("").Parse(`{{printf "%s (%s/%s/%s)\n" .Message .Namespace .PodName .ContainerName}}`)) + + tests := []struct { + name string + logLine string + expected []byte + }{ + { + name: "normal", + logLine: `2023-02-13T21:20:30.000000001Z line 1 +2023-02-13T21:20:30.000000002Z line 2 +2023-02-13T21:20:31.000000001Z line 3 +2023-02-13T21:20:31.000000002Z line 4`, + expected: []byte(fmt.Sprintf(`%s 1 (my-namespace/my-pod/my-container) +%s 2 (my-namespace/my-pod/my-container) +%s 3 (my-namespace/my-pod/my-container) +%s 4 (my-namespace/my-pod/my-container) +`, coloredLine, coloredLine, coloredLine, coloredLine)), + }, + { + name: "no highlight", + logLine: `2023-02-13T21:20:30.000000001Z log 1 +2023-02-13T21:20:30.000000002Z log 2 +2023-02-13T21:20:31.000000001Z log 3 +2023-02-13T21:20:31.000000002Z log 4`, + expected: []byte(`log 1 (my-namespace/my-pod/my-container) +log 2 (my-namespace/my-pod/my-container) +log 3 (my-namespace/my-pod/my-container) +log 4 (my-namespace/my-pod/my-container) +`), + }, + } + + clientset := fake.NewSimpleClientset() + for i, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out := new(bytes.Buffer) + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "my-namespace", + Name: "my-pod", + }, + } + + tail := NewTail(clientset.CoreV1(), pod, "my-container", tmpl, out, io.Discard, &TailOptions{Highlight: []*regexp.Regexp{regexp.MustCompile("line")}}, false) + if err := tail.ConsumeRequest(context.TODO(), &responseWrapperMock{data: bytes.NewBufferString(tt.logLine)}); err != nil { + t.Fatalf("%d: unexpected err %v", i, err) + } + + if !bytes.Equal(tt.expected, out.Bytes()) { + t.Errorf("%d: expected `%s`, but actual `%s`", i, tt.expected, out) + } + }) + } +} + +func TestInclude(t *testing.T) { + color.NoColor = false + defer func() { color.NoColor = true }() + + coloredLine := colorHighlight("line") + + tmpl := template.Must(template.New("").Parse(`{{printf "%s (%s/%s/%s)\n" .Message .Namespace .PodName .ContainerName}}`)) + + tests := []struct { + name string + logLine string + expected []byte + }{ + { + name: "normal", + logLine: `2023-02-13T21:20:30.000000001Z line 1 +2023-02-13T21:20:30.000000002Z line 2 +2023-02-13T21:20:31.000000001Z line 3 +2023-02-13T21:20:31.000000002Z line 4`, + expected: []byte(fmt.Sprintf(`%s 1 (my-namespace/my-pod/my-container) +%s 2 (my-namespace/my-pod/my-container) +%s 3 (my-namespace/my-pod/my-container) +%s 4 (my-namespace/my-pod/my-container) +`, coloredLine, coloredLine, coloredLine, coloredLine)), + }, + { + name: "full excluded", + logLine: `2023-02-13T21:20:30.000000001Z log 1 +2023-02-13T21:20:30.000000002Z log 2 +2023-02-13T21:20:31.000000001Z log 3 +2023-02-13T21:20:31.000000002Z log 4`, + expected: []byte(""), + }, + + { + name: "one included", + logLine: `2023-02-13T21:20:30.000000001Z log 1 +2023-02-13T21:20:30.000000002Z line 2 +2023-02-13T21:20:31.000000001Z log 3 +2023-02-13T21:20:31.000000002Z log 4`, + expected: []byte(fmt.Sprintf(`%s 2 (my-namespace/my-pod/my-container) +`, coloredLine)), + }, + } + + clientset := fake.NewSimpleClientset() + for i, tt := range tests { + t.Run(tt.name, func(t *testing.T) { + out := new(bytes.Buffer) + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "my-namespace", + Name: "my-pod", + }, + } + + tail := NewTail(clientset.CoreV1(), pod, "my-container", tmpl, out, io.Discard, &TailOptions{Include: []*regexp.Regexp{regexp.MustCompile("line")}}, false) + if err := tail.ConsumeRequest(context.TODO(), &responseWrapperMock{data: bytes.NewBufferString(tt.logLine)}); err != nil { + t.Fatalf("%d: unexpected err %v", i, err) + } + + if !bytes.Equal(tt.expected, out.Bytes()) { + t.Errorf("%d: expected `%s`, but actual `%s`", i, tt.expected, out) } }) } @@ -162,7 +305,13 @@ clientset := fake.NewSimpleClientset() for i, tt := range tests { errOut := new(bytes.Buffer) - tail := NewTail(clientset.CoreV1(), "my-node", "my-namespace", "my-pod", "my-container", nil, io.Discard, errOut, tt.options, false) + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "my-namespace", + Name: "my-pod", + }, + } + tail := NewTail(clientset.CoreV1(), pod, "my-container", nil, io.Discard, errOut, tt.options, false) tail.printStarting() if !bytes.Equal(tt.expected, errOut.Bytes()) { @@ -204,7 +353,13 @@ clientset := fake.NewSimpleClientset() for i, tt := range tests { errOut := new(bytes.Buffer) - tail := NewTail(clientset.CoreV1(), "my-node", "my-namespace", "my-pod", "my-container", nil, io.Discard, errOut, tt.options, false) + pod := &corev1.Pod{ + ObjectMeta: metav1.ObjectMeta{ + Namespace: "my-namespace", + Name: "my-pod", + }, + } + tail := NewTail(clientset.CoreV1(), pod, "my-container", nil, io.Discard, errOut, tt.options, false) tail.printStopping() if !bytes.Equal(tt.expected, errOut.Bytes()) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/tail_utils.go new/stern-1.33.0/stern/tail_utils.go --- old/stern-1.32.0/stern/tail_utils.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/tail_utils.go 2025-09-07 08:10:00.000000000 +0200 @@ -29,6 +29,12 @@ // ContainerName of the container ContainerName string `json:"containerName"` + // Labels of the pod + Labels map[string]string `json:"labels"` + + // Annotations of the pod + Annotations map[string]string `json:"annotations"` + PodColor *color.Color `json:"-"` ContainerColor *color.Color `json:"-"` } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/target.go new/stern-1.33.0/stern/target.go --- old/stern-1.32.0/stern/target.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/target.go 2025-09-07 08:10:00.000000000 +0200 @@ -25,15 +25,13 @@ // Target is a target to watch type Target struct { - Node string - Namespace string - Pod string + Pod *corev1.Pod Container string } // GetID returns the ID of the object func (t *Target) GetID() string { - return fmt.Sprintf("%s-%s-%s", t.Namespace, t.Pod, t.Container) + return fmt.Sprintf("%s-%s-%s", t.Pod.Namespace, t.Pod.Name, t.Container) } // targetState holds a last shown container ID @@ -112,9 +110,7 @@ } t := &Target{ - Node: pod.Spec.NodeName, - Namespace: pod.Namespace, - Pod: pod.Name, + Pod: pod, Container: c.Name, } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/target_test.go new/stern-1.33.0/stern/target_test.go --- old/stern-1.32.0/stern/target_test.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/target_test.go 2025-09-07 08:10:00.000000000 +0200 @@ -49,10 +49,9 @@ } genTarget := func(node, pod, container string) Target { + p := createPod(node, pod) return Target{ - Namespace: "ns1", - Node: node, - Pod: pod, + Pod: p, Container: container, } } @@ -346,12 +345,17 @@ }, } } - genTarget := func(container string) Target { + genTarget := func(containerName, containerID string) Target { + pod := createPod(corev1.ContainerStatus{ + Name: containerName, + ContainerID: containerID, + State: corev1.ContainerState{ + Running: &corev1.ContainerStateRunning{}, + }, + }) return Target{ - Namespace: "ns1", - Node: "node1", - Pod: "pod1", - Container: container, + Pod: pod, + Container: containerName, } } tests := []struct { @@ -374,7 +378,7 @@ Running: &corev1.ContainerStateRunning{}, }, }, - expected: []Target{genTarget("c1")}, + expected: []Target{genTarget("c1", "cid1")}, }, { name: "same container ID should be ignored", @@ -396,7 +400,7 @@ Running: &corev1.ContainerStateRunning{}, }, }, - expected: []Target{genTarget("c1")}, + expected: []Target{genTarget("c1", "cid2")}, }, { name: "forget() allows the same ID ", @@ -408,7 +412,7 @@ Running: &corev1.ContainerStateRunning{}, }, }, - expected: []Target{genTarget("c1")}, + expected: []Target{genTarget("c1", "cid2")}, }, } for _, tt := range tests { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/stern-1.32.0/stern/watch.go new/stern-1.33.0/stern/watch.go --- old/stern-1.32.0/stern/watch.go 2025-01-21 02:14:50.000000000 +0100 +++ new/stern-1.33.0/stern/watch.go 2025-09-07 08:10:00.000000000 +0200 @@ -35,7 +35,7 @@ // RetryWatcher will make sure that in case the underlying watcher is // closed (e.g. due to API timeout or etcd timeout) it will get restarted // from the last point without the consumer even knowing about it. - watcher, err := watchtools.NewRetryWatcher("1", &cache.ListWatch{ + watcher, err := watchtools.NewRetryWatcherWithContext(ctx, "1", &cache.ListWatch{ WatchFunc: func(options metav1.ListOptions) (watch.Interface, error) { return i.Watch(ctx, metav1.ListOptions{LabelSelector: labelSelector.String(), FieldSelector: fieldSelector.String()}) }, ++++++ stern.obsinfo ++++++ --- /var/tmp/diff_new_pack.QIR6nP/_old 2025-09-18 21:12:47.396773457 +0200 +++ /var/tmp/diff_new_pack.QIR6nP/_new 2025-09-18 21:12:47.404773793 +0200 @@ -1,5 +1,5 @@ name: stern -version: 1.32.0 -mtime: 1737422090 -commit: 5e06930fe21f951f079880ec2c13cd688aa5ca09 +version: 1.33.0 +mtime: 1757225400 +commit: f79098037d951aad53e13aff1f86854b291baf01 ++++++ vendor.tar.gz ++++++ /work/SRC/openSUSE:Factory/stern/vendor.tar.gz /work/SRC/openSUSE:Factory/.stern.new.27445/vendor.tar.gz differ: char 5, line 1
