Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package linkerd-cli-edge for
openSUSE:Factory checked in at 2026-04-11 22:25:54
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/linkerd-cli-edge (Old)
and /work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.21863 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "linkerd-cli-edge"
Sat Apr 11 22:25:54 2026 rev:71 rq:1346034 version:26.4.2
Changes:
--------
--- /work/SRC/openSUSE:Factory/linkerd-cli-edge/linkerd-cli-edge.changes
2026-04-04 19:08:12.331063799 +0200
+++
/work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.21863/linkerd-cli-edge.changes
2026-04-11 22:30:11.769769634 +0200
@@ -1,0 +2,37 @@
+Sat Apr 11 06:59:32 UTC 2026 - Johannes Kastl
<[email protected]>
+
+- Update to version 26.4.2:
+ * build(deps): bump github.com/mattn/go-runewidth from 0.0.22 to
+ 0.0.23 (#15145)
+ * build(deps-dev): bump webpack from 5.105.4 to 5.106.0 in
+ /web/app (#15148)
+ * chore(deps): ignore major lingui updates (#15135)
+ * build(deps): bump github.com/mattn/go-isatty from 0.0.20 to
+ 0.0.21 (#15146)
+ * build(deps): bump tokio from 1.51.0 to 1.51.1 (#15147)
+ * build(deps): bump tokio from 1.50.0 to 1.51.0 (#15139)
+ * build(deps): bump cc from 1.2.58 to 1.2.59 (#15140)
+ * build(deps): bump fastrand from 2.3.0 to 2.4.1 (#15137)
+ * build(deps): bump semver from 1.0.27 to 1.0.28 (#15138)
+ * build(deps): bump libc from 0.2.183 to 0.2.184 (#15117)
+ * build(deps): bump indexmap from 2.13.0 to 2.13.1 (#15121)
+ * build(deps): bump google.golang.org/grpc from 1.79.3 to 1.80.0
+ (#15115)
+ * build(deps): bump github.com/mattn/go-runewidth from 0.0.21 to
+ 0.0.22 (#15120)
+ * build(deps): bump lodash from 4.17.23 to 4.18.1 in /web/app
+ (#15127)
+ * build(deps-dev): bump jest-environment-jsdom in /web/app
+ (#15128)
+ * build(deps): bump github.com/clarketm/json from 1.15.7 to
+ 1.17.1 (#15116)
+ * build(deps): bump docker/login-action from 4.0.0 to 4.1.0
+ (#15122)
+ * build(deps-dev): bump webpack-bundle-analyzer in /web/app
+ (#15129)
+ * build(deps-dev): bump sinon from 21.0.2 to 21.0.3 in /web/app
+ (#15130)
+ * build(deps): bump extractions/setup-just from 3.1.0 to 4.0.0
+ (#15132)
+
+-------------------------------------------------------------------
Old:
----
linkerd-cli-edge-26.4.1.obscpio
New:
----
linkerd-cli-edge-26.4.2.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ linkerd-cli-edge.spec ++++++
--- /var/tmp/diff_new_pack.uPfifx/_old 2026-04-11 22:30:14.193868780 +0200
+++ /var/tmp/diff_new_pack.uPfifx/_new 2026-04-11 22:30:14.197868944 +0200
@@ -19,7 +19,7 @@
%define linkerd_executable_name linkerd
Name: linkerd-cli-edge
-Version: 26.4.1
+Version: 26.4.2
Release: 0
Summary: CLI for the linkerd service mesh for Kubernetes
License: Apache-2.0
++++++ _service ++++++
--- /var/tmp/diff_new_pack.uPfifx/_old 2026-04-11 22:30:14.465879906 +0200
+++ /var/tmp/diff_new_pack.uPfifx/_new 2026-04-11 22:30:14.501881378 +0200
@@ -3,7 +3,7 @@
<param name="url">https://github.com/linkerd/linkerd2</param>
<param name="scm">git</param>
<param name="exclude">.git</param>
- <param name="revision">edge-26.4.1</param>
+ <param name="revision">edge-26.4.2</param>
<param name="match-tag">edge-*.*.*</param>
<param name="versionformat">@PARENT_TAG@</param>
<param name="versionrewrite-pattern">edge-(.*)</param>
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.uPfifx/_old 2026-04-11 22:30:14.677888577 +0200
+++ /var/tmp/diff_new_pack.uPfifx/_new 2026-04-11 22:30:14.721890377 +0200
@@ -1,6 +1,6 @@
<servicedata>
<service name="tar_scm">
<param name="url">https://github.com/linkerd/linkerd2</param>
- <param
name="changesrevision">372abd361635ec27e4ba39b40776f93647e7fb13</param></service></servicedata>
+ <param
name="changesrevision">cda7b5cbafb58d3aeab313e3f5fc51c0e63e1a5b</param></service></servicedata>
(No newline at EOF)
++++++ linkerd-cli-edge-26.4.1.obscpio -> linkerd-cli-edge-26.4.2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.1/.proxy-version
new/linkerd-cli-edge-26.4.2/.proxy-version
--- old/linkerd-cli-edge-26.4.1/.proxy-version 2026-04-02 22:49:01.000000000
+0200
+++ new/linkerd-cli-edge-26.4.2/.proxy-version 2026-04-09 21:36:43.000000000
+0200
@@ -1 +1 @@
-v2.347.0
+v2.348.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.1/Cargo.lock
new/linkerd-cli-edge-26.4.2/Cargo.lock
--- old/linkerd-cli-edge-26.4.1/Cargo.lock 2026-04-02 22:49:01.000000000
+0200
+++ new/linkerd-cli-edge-26.4.2/Cargo.lock 2026-04-09 21:36:43.000000000
+0200
@@ -219,9 +219,9 @@
[[package]]
name = "cc"
-version = "1.2.58"
+version = "1.2.59"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e1e928d4b69e3077709075a938a05ffbedfa53a84c8f766efbf8220bb1ff60e1"
+checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
dependencies = [
"find-msvc-tools",
"jobserver",
@@ -535,7 +535,7 @@
checksum = "39cab71617ae0d63f51a36d69f866391735b51691dbda63cf6f96d042b63efeb"
dependencies = [
"libc",
- "windows-sys 0.52.0",
+ "windows-sys 0.61.0",
]
[[package]]
@@ -561,9 +561,9 @@
[[package]]
name = "fastrand"
-version = "2.3.0"
+version = "2.4.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "37909eebbb50d72f9059c3b6d82c0463f2ff062c9e95845c43a6c9c0355411be"
+checksum = "9f1f227452a390804cdb637b74a86990f2a7d7ba4b7d5693aac9b4dd6defd8d6"
[[package]]
name = "find-msvc-tools"
@@ -1035,9 +1035,9 @@
[[package]]
name = "indexmap"
-version = "2.13.0"
+version = "2.13.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7714e70437a7dc3ac8eb7e6f8df75fd8eb422675fc7678aff7364301092b1017"
+checksum = "45a8a2b9cb3e0b0c1803dbb0758ffac5de2f425b23c28f518faabd9d805342ff"
dependencies = [
"equivalent",
"hashbrown 0.16.1",
@@ -1343,9 +1343,9 @@
[[package]]
name = "libc"
-version = "0.2.183"
+version = "0.2.184"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b5b646652bf6661599e1da8901b3b9522896f01e736bad5f723fe7a3a27f899d"
+checksum = "48f5d2a454e16a5ea0f4ced81bd44e4cfc7bd3a507b61887c99fd3538b28e4af"
[[package]]
name = "linkerd-policy-controller"
@@ -2213,9 +2213,9 @@
[[package]]
name = "semver"
-version = "1.0.27"
+version = "1.0.28"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d767eb0aabc880b29956c35734170f26ed551a859dbd361d140cdbeca61ab1e2"
+checksum = "8a7852d02fc848982e0c167ef163aaff9cd91dc640ba85e263cb1ce46fae51cd"
[[package]]
name = "serde"
@@ -2443,9 +2443,9 @@
[[package]]
name = "tokio"
-version = "1.50.0"
+version = "1.51.1"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "27ad5e34374e03cfffefc301becb44e9dc3c17584f414349ebe29ed26661822d"
+checksum = "f66bf9585cda4b724d3e78ab34b73fb2bbaba9011b9bfdf69dc836382ea13b8c"
dependencies = [
"bytes",
"libc",
@@ -2460,9 +2460,9 @@
[[package]]
name = "tokio-macros"
-version = "2.6.1"
+version = "2.7.0"
source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5c55a2eff8b69ce66c84f85e1da1c233edc36ceb85a2058d11b0d6a3c7e7569c"
+checksum = "385a6cb71ab9ab790c5fe8d67f1645e6c450a7ce006a33de03daa956cf70a496"
dependencies = [
"proc-macro2",
"quote",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.1/go.mod
new/linkerd-cli-edge-26.4.2/go.mod
--- old/linkerd-cli-edge-26.4.1/go.mod 2026-04-02 22:49:01.000000000 +0200
+++ new/linkerd-cli-edge-26.4.2/go.mod 2026-04-09 21:36:43.000000000 +0200
@@ -8,7 +8,7 @@
github.com/AdaLogics/go-fuzz-headers v0.0.0-20230811130428-ced1acdcaa24
github.com/bombsimon/logrusr/v4 v4.1.0
github.com/briandowns/spinner v1.23.2
- github.com/clarketm/json v1.15.7
+ github.com/clarketm/json v1.17.1
github.com/emicklei/proto v1.14.3
github.com/evanphx/json-patch v5.9.11+incompatible
github.com/fatih/color v1.19.0
@@ -21,8 +21,8 @@
github.com/grpc-ecosystem/go-grpc-prometheus v1.2.0
github.com/julienschmidt/httprouter v1.3.0
github.com/linkerd/linkerd2-proxy-api v0.18.0
- github.com/mattn/go-isatty v0.0.20
- github.com/mattn/go-runewidth v0.0.21
+ github.com/mattn/go-isatty v0.0.21
+ github.com/mattn/go-runewidth v0.0.23
github.com/nsf/termbox-go v1.1.1
github.com/patrickmn/go-cache v2.1.0+incompatible
github.com/pkg/browser v0.0.0-20170505125900-c90ca0c84f15
@@ -36,7 +36,7 @@
github.com/spf13/pflag v1.0.10
go.opencensus.io v0.24.0
golang.org/x/tools v0.43.0
- google.golang.org/grpc v1.79.3
+ google.golang.org/grpc v1.80.0
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1
google.golang.org/protobuf v1.36.11
gopkg.in/yaml.v2 v2.4.0
@@ -152,8 +152,8 @@
golang.org/x/time v0.12.0 // indirect
golang.org/x/tools/godoc v0.1.0-deprecated // indirect
google.golang.org/api v0.143.0 // indirect
- google.golang.org/genproto/googleapis/api
v0.0.0-20251202230838-ff82c1b0f217 // indirect
- google.golang.org/genproto/googleapis/rpc
v0.0.0-20251202230838-ff82c1b0f217 // indirect
+ google.golang.org/genproto/googleapis/api
v0.0.0-20260120221211-b8f7ae30c516 // indirect
+ google.golang.org/genproto/googleapis/rpc
v0.0.0-20260120221211-b8f7ae30c516 // indirect
gopkg.in/evanphx/json-patch.v4 v4.13.0 // indirect
gopkg.in/inf.v0 v0.9.1 // indirect
gopkg.in/yaml.v3 v3.0.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.1/go.sum
new/linkerd-cli-edge-26.4.2/go.sum
--- old/linkerd-cli-edge-26.4.1/go.sum 2026-04-02 22:49:01.000000000 +0200
+++ new/linkerd-cli-edge-26.4.2/go.sum 2026-04-09 21:36:43.000000000 +0200
@@ -66,8 +66,8 @@
github.com/chzyer/logex v1.1.10/go.mod
h1:+Ywpsq7O8HXn0nuIou7OrIPyXbp3wmkHB+jjWRnGsAI=
github.com/chzyer/readline v0.0.0-20180603132655-2972be24d48e/go.mod
h1:nSuG5e5PlCu98SY8svDHJxuZscDgtXS6KTTbou5AhLI=
github.com/chzyer/test v0.0.0-20180213035817-a1ea475d72b1/go.mod
h1:Q3SI9o4m/ZMnBNeIyt5eFwwo7qiLfzFZmjNmxjkiQlU=
-github.com/clarketm/json v1.15.7
h1:zWsOtfj736/nP76KiS0HpcyO6W50ojEodx7T4LW4NMc=
-github.com/clarketm/json v1.15.7/go.mod
h1:ynr2LRfb0fQU34l07csRNBTcivjySLLiY1YzQqKVfdo=
+github.com/clarketm/json v1.17.1
h1:U1IxjqJkJ7bRK4L6dyphmoO840P6bdhPdbbLySourqI=
+github.com/clarketm/json v1.17.1/go.mod
h1:ynr2LRfb0fQU34l07csRNBTcivjySLLiY1YzQqKVfdo=
github.com/client9/misspell v0.3.4/go.mod
h1:qj6jICC3Q7zFZvVWo7KLAzC3yx5G7kyvSDkc90ppPyw=
github.com/clipperhouse/uax29/v2 v2.2.0
h1:ChwIKnQN3kcZteTXMgb1wztSgaU+ZemkgWdohwgs8tY=
github.com/clipperhouse/uax29/v2 v2.2.0/go.mod
h1:EFJ2TJMRUaplDxHKj1qAEhCtQPW2tJSwu5BF98AuoVM=
@@ -293,11 +293,11 @@
github.com/mailru/easyjson v0.7.7/go.mod
h1:xzfreul335JAWq5oZzymOObrkdz5UnU4kGfJJLY9Nlc=
github.com/mattn/go-colorable v0.1.14
h1:9A9LHSqF/7dyVVX6g0U9cwm9pG3kP9gSzcuIPHPsaIE=
github.com/mattn/go-colorable v0.1.14/go.mod
h1:6LmQG8QLFO4G5z1gPvYEzlUgJ2wF+stgPZH1UqBm1s8=
-github.com/mattn/go-isatty v0.0.20
h1:xfD0iDuEKnDkl03q4limB+vH+GxLEtL/jb4xVJSWWEY=
-github.com/mattn/go-isatty v0.0.20/go.mod
h1:W+V8PltTTMOvKvAeJH7IuucS94S2C6jfK/D7dTCTo3Y=
+github.com/mattn/go-isatty v0.0.21
h1:xYae+lCNBP7QuW4PUnNG61ffM4hVIfm+zUzDuSzYLGs=
+github.com/mattn/go-isatty v0.0.21/go.mod
h1:ZXfXG4SQHsB/w3ZeOYbR0PrPwLy+n6xiMrJlRFqopa4=
github.com/mattn/go-runewidth v0.0.9/go.mod
h1:H031xJmbD/WCDINGzjvQ9THkh0rPKHF+m2gUSrubnMI=
-github.com/mattn/go-runewidth v0.0.21
h1:jJKAZiQH+2mIinzCJIaIG9Be1+0NR+5sz/lYEEjdM8w=
-github.com/mattn/go-runewidth v0.0.21/go.mod
h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
+github.com/mattn/go-runewidth v0.0.23
h1:7ykA0T0jkPpzSvMS5i9uoNn2Xy3R383f9HDx3RybWcw=
+github.com/mattn/go-runewidth v0.0.23/go.mod
h1:XBkDxAl56ILZc9knddidhrOlY5R/pDhgLpndooCuJAs=
github.com/miekg/dns v1.1.57 h1:Jzi7ApEIzwEPLHWRcafCN9LZSBbqQpxjt/wpgvg7wcM=
github.com/miekg/dns v1.1.57/go.mod
h1:uqRjCRUuEAA6qsOiJvDd+CFo/vW+y5WR6SNmHE55hZk=
github.com/mitchellh/copystructure v1.2.0
h1:vpKXTN4ewci03Vljg/q9QvCGUDttBOGBIa15WveJJGw=
@@ -562,7 +562,6 @@
golang.org/x/sys v0.0.0-20200523222454-059865788121/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
golang.org/x/sys v0.0.0-20210616094352-59db8d763f22/go.mod
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
golang.org/x/sys v0.42.0 h1:omrd2nAlyT5ESRdCLYdm3+fMfNFE/+Rf4bDIQImRJeo=
golang.org/x/sys v0.42.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c
h1:6a8FdnNk6bTXBjR4AGKFgUKuo+7GnR3FX5L7CbveeZc=
@@ -622,8 +621,8 @@
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=
-gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
-gonum.org/v1/gonum v0.16.0/go.mod
h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
+gonum.org/v1/gonum v0.17.0 h1:VbpOemQlsSMrYmn7T2OUvQ4dqxQXU+ouZFQsZOx50z4=
+gonum.org/v1/gonum v0.17.0/go.mod
h1:El3tOrEuMpv2UdMrbNlKEh9vd86bmQ6vqIcDwxEOc1E=
google.golang.org/api v0.4.0/go.mod
h1:8k5glujaEP+g9n7WNsDg8QP6cUVNI86fCNMcbazEtwE=
google.golang.org/api v0.7.0/go.mod
h1:WtwebWUNSVBH/HAw79HIFXZNqEvBhG+Ra+ax0hx3E3M=
google.golang.org/api v0.8.0/go.mod
h1:o4eAsZoiT+ibD93RtjEohWalFOjRDx6CVaqeizhEnKg=
@@ -663,10 +662,10 @@
google.golang.org/genproto v0.0.0-20200513103714-09dca8ec2884/go.mod
h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
google.golang.org/genproto v0.0.0-20200526211855-cb27e3aa2013/go.mod
h1:NbSheEEYHJ7i3ixzK3sjbqSGDJWnxyFXZblF3eUsNvo=
google.golang.org/genproto v0.0.0-20200527145253-8367513e4ece/go.mod
h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
-google.golang.org/genproto/googleapis/api v0.0.0-20251202230838-ff82c1b0f217
h1:fCvbg86sFXwdrl5LgVcTEvNC+2txB5mgROGmRL5mrls=
-google.golang.org/genproto/googleapis/api
v0.0.0-20251202230838-ff82c1b0f217/go.mod
h1:+rXWjjaukWZun3mLfjmVnQi18E1AsFbDN9QdJ5YXLto=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251202230838-ff82c1b0f217
h1:gRkg/vSppuSQoDjxyiGfN4Upv/h/DQmIR10ZU8dh4Ww=
-google.golang.org/genproto/googleapis/rpc
v0.0.0-20251202230838-ff82c1b0f217/go.mod
h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
+google.golang.org/genproto/googleapis/api v0.0.0-20260120221211-b8f7ae30c516
h1:vmC/ws+pLzWjj/gzApyoZuSVrDtF1aod4u/+bbj8hgM=
+google.golang.org/genproto/googleapis/api
v0.0.0-20260120221211-b8f7ae30c516/go.mod
h1:p3MLuOwURrGBRoEyFHBT3GjUwaCQVKeNqqWxlcISGdw=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20260120221211-b8f7ae30c516
h1:sNrWoksmOyF5bvJUcnmbeAmQi8baNhqg5IWaI3llQqU=
+google.golang.org/genproto/googleapis/rpc
v0.0.0-20260120221211-b8f7ae30c516/go.mod
h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
google.golang.org/grpc v1.19.0/go.mod
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
google.golang.org/grpc v1.20.1/go.mod
h1:10oTOabMzJvdu6/UiuZezV6QK5dSlG84ov/aaiqXj38=
google.golang.org/grpc v1.21.1/go.mod
h1:oYelfM1adQP15Ek0mdvEgi9Df8B9CZIaU1084ijfRaM=
@@ -678,8 +677,8 @@
google.golang.org/grpc v1.28.0/go.mod
h1:rpkK4SK4GF4Ach/+MFLZUBavHOvF2JJB5uozKKal+60=
google.golang.org/grpc v1.29.1/go.mod
h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
google.golang.org/grpc v1.33.2/go.mod
h1:JMHMWHQWaTccqQQlmk3MJZS+GWXOdAesneDmEnv2fbc=
-google.golang.org/grpc v1.79.3 h1:sybAEdRIEtvcD68Gx7dmnwjZKlyfuc61Dyo9pGXXkKE=
-google.golang.org/grpc v1.79.3/go.mod
h1:KmT0Kjez+0dde/v2j9vzwoAScgEPx/Bw1CYChhHLrHQ=
+google.golang.org/grpc v1.80.0 h1:Xr6m2WmWZLETvUNvIUmeD5OAagMw3FiKmMlTdViWsHM=
+google.golang.org/grpc v1.80.0/go.mod
h1:ho/dLnxwi3EDJA4Zghp7k2Ec1+c2jqup0bFkw07bwF4=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1
h1:/WILD1UcXj/ujCxgoL/DvRgt2CP3txG8+FwkUbb9110=
google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.1/go.mod
h1:YNKnb2OAApgYn2oYY47Rn7alMr1zWjb2U8Q0aoGWiNc=
google.golang.org/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/linkerd-cli-edge-26.4.1/test/integration/deep/endpoints/destination_api_test.go
new/linkerd-cli-edge-26.4.2/test/integration/deep/endpoints/destination_api_test.go
---
old/linkerd-cli-edge-26.4.1/test/integration/deep/endpoints/destination_api_test.go
1970-01-01 01:00:00.000000000 +0100
+++
new/linkerd-cli-edge-26.4.2/test/integration/deep/endpoints/destination_api_test.go
2026-04-09 21:36:43.000000000 +0200
@@ -0,0 +1,654 @@
+package endpoints
+
+import (
+ "context"
+ "encoding/json"
+ "errors"
+ "fmt"
+ "io"
+ "maps"
+ "slices"
+ "sort"
+ "strings"
+ "sync"
+ "testing"
+ "time"
+
+ destinationpb "github.com/linkerd/linkerd2-proxy-api/go/destination"
+ "github.com/linkerd/linkerd2/controller/api/destination"
+ pkgaddr "github.com/linkerd/linkerd2/pkg/addr"
+ "github.com/linkerd/linkerd2/pkg/k8s"
+ "github.com/linkerd/linkerd2/testutil"
+)
+
+func TestDestinationAPIStreamTracksRolloutEndpoints(t *testing.T) {
+ ctx := context.Background()
+
+ TestHelper.WithDataPlaneNamespace(ctx, "destination-api-rollout",
map[string]string{}, t, func(t *testing.T, ns string) {
+ const deployName = "rollout-echo"
+ const serviceName = "rollout-echo"
+
+ // Create a simple meshed workload and service, then wait for
rollout so we
+ // don't race destination watches against Kubernetes scheduling.
+ applyDeploymentAndService(t, ns, deployName, serviceName, 1)
+ TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+ deployName: {
+ Namespace: ns,
+ Replicas: 1,
+ },
+ })
+
+ authority := serviceAuthority(serviceName, ns)
+ client, conn := newDestinationClient(t, ctx)
+ defer conn.Close()
+
+ // Start a long-lived destination stream and verify it
converges on the
+ // same initial endpoint set reported by Kubernetes Endpoints.
+ sub := newSubscriber(t, client, authority, "")
+
+ initialEndpoints := waitForServiceEndpoints(t, ns, serviceName,
60*time.Second)
+ sub.WaitForExact(t, initialEndpoints, 60*time.Second)
+
+ // Trigger a rollout and assert the same stream eventually
delivers the
+ // new endpoint set, including Add/Remove updates as pods
change.
+ if _, err := TestHelper.Kubectl("", "-n", ns, "rollout",
"restart", "deployment", deployName); err != nil {
+ testutil.AnnotatedFatalf(t, "failed to restart
deployment", "failed to restart deployment %s: %v", deployName, err)
+ }
+ TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+ deployName: {
+ Namespace: ns,
+ Replicas: 1,
+ },
+ })
+
+ updatedEndpoints := waitForChangedServiceEndpoints(t, ns,
serviceName, initialEndpoints, 60*time.Second)
+ sub.WaitForExact(t, updatedEndpoints, 60*time.Second)
+ })
+}
+
+func TestDestinationAPIConcurrentSubscribers(t *testing.T) {
+ ctx := context.Background()
+
+ TestHelper.WithDataPlaneNamespace(ctx, "destination-api-subscribers",
map[string]string{}, t, func(t *testing.T, ns string) {
+ const (
+ serviceA = "subscriber-a"
+ serviceB = "subscriber-b"
+ deployA = "subscriber-a"
+ deployB = "subscriber-b"
+ )
+
+ applyDeploymentAndService(t, ns, deployA, serviceA, 2)
+ applyDeploymentAndService(t, ns, deployB, serviceB, 1)
+ TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+ deployA: {
+ Namespace: ns,
+ Replicas: 2,
+ },
+ deployB: {
+ Namespace: ns,
+ Replicas: 1,
+ },
+ })
+
+ authorityA := serviceAuthority(serviceA, ns)
+ authorityB := serviceAuthority(serviceB, ns)
+
+ client, conn := newDestinationClient(t, ctx)
+ defer conn.Close()
+
+ // Create multiple concurrent subscribers to the same authority
and one
+ // subscriber for a different authority.
+ subA1 := newSubscriber(t, client, authorityA, "")
+ subA2 := newSubscriber(t, client, authorityA, "")
+ subA3 := newSubscriber(t, client, authorityA, "")
+ subB := newSubscriber(t, client, authorityB, "")
+
+ expectedA := waitForServiceEndpoints(t, ns, serviceA,
60*time.Second)
+ expectedB := waitForServiceEndpoints(t, ns, serviceB,
60*time.Second)
+
+ subA1.WaitForExact(t, expectedA, 60*time.Second)
+ subA2.WaitForExact(t, expectedA, 60*time.Second)
+ subA3.WaitForExact(t, expectedA, 60*time.Second)
+ subB.WaitForExact(t, expectedB, 60*time.Second)
+
+ if _, err := TestHelper.Kubectl("", "-n", ns, "scale",
"deployment", deployA, "--replicas=3"); err != nil {
+ testutil.AnnotatedFatalf(t, "failed to scale
deployment", "failed to scale deployment %s: %v", deployA, err)
+ }
+ TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+ deployA: {
+ Namespace: ns,
+ Replicas: 3,
+ },
+ })
+
+ expectedAAfterScale := waitForChangedServiceEndpoints(t, ns,
serviceA, expectedA, 60*time.Second)
+ subA1.WaitForExact(t, expectedAAfterScale, 60*time.Second)
+ subA2.WaitForExact(t, expectedAAfterScale, 60*time.Second)
+ subA3.WaitForExact(t, expectedAAfterScale, 60*time.Second)
+
+ // The unrelated authority should remain stable and not receive
updates
+ // caused by changes to service A.
+ subB.WaitForExact(t, expectedB, 60*time.Second)
+ })
+}
+
+func TestDestinationAPIForZonesSourceNodeFiltering(t *testing.T) {
+ ctx := context.Background()
+
+ TestHelper.WithDataPlaneNamespace(ctx, "destination-api-zones",
map[string]string{}, t, func(t *testing.T, ns string) {
+ const deployName = "zone-endpoints"
+ const appName = "zone-endpoints"
+ const serviceName = "zone-endpoints"
+ const port = 8080
+
+ applyDeploymentOnly(t, ns, deployName, appName, 2)
+ TestHelper.WaitRollout(t, map[string]testutil.DeploySpec{
+ deployName: {
+ Namespace: ns,
+ Replicas: 2,
+ },
+ })
+
+ pods := waitForPods(t, ns, "app="+appName, 2, 60*time.Second)
+ sort.Slice(pods, func(i, j int) bool {
+ return pods[i].Name < pods[j].Name
+ })
+
+ // Use the first pod's node as the source node and ensure it
has a zone
+ // label; if absent, add one for this test and clean it up
afterwards.
+ nodeName := pods[0].NodeName
+ localZone, labelCleanup := ensureNodeZoneLabel(t, nodeName)
+ if labelCleanup != nil {
+ t.Cleanup(labelCleanup)
+ }
+ remoteZone := localZone + "-remote"
+
+ applySelectorlessServiceAndEndpointSlice(t, ns, serviceName,
port, []endpointSliceEntry{
+ {Address: pods[0].IP, ZoneHint: localZone},
+ {Address: pods[1].IP, ZoneHint: remoteZone},
+ })
+
+ authority := serviceAuthority(serviceName, ns)
+ client, conn := newDestinationClient(t, ctx)
+ defer conn.Close()
+
+ contextToken := fmt.Sprintf(`{"ns":"%s","nodeName":"%s"}`+"\n",
ns, nodeName)
+ filteredSub := newSubscriber(t, client, authority, contextToken)
+ allSub := newSubscriber(t, client, authority, "")
+
+ expectedFiltered := map[string]struct{}{fmt.Sprintf("%s:%d",
pods[0].IP, port): {}}
+ expectedAll := map[string]struct{}{
+ fmt.Sprintf("%s:%d", pods[0].IP, port): {},
+ fmt.Sprintf("%s:%d", pods[1].IP, port): {},
+ }
+
+ // Subscriber with a source-node context token should see only
local-zone
+ // endpoints; subscriber without token should receive all
endpoints.
+ filteredSub.WaitForExact(t, expectedFiltered, 60*time.Second)
+ allSub.WaitForExact(t, expectedAll, 60*time.Second)
+ })
+}
+
+type subscriber struct {
+ cancel context.CancelFunc
+ events chan struct{}
+ errCh chan error
+ mu sync.RWMutex
+ endpoints map[string]struct{}
+}
+
+func newSubscriber(t *testing.T, client destinationpb.DestinationClient,
authority, contextToken string) *subscriber {
+ t.Helper()
+
+ ctx, cancel := context.WithCancel(context.Background())
+ stream, err := client.Get(ctx, &destinationpb.GetDestination{
+ Scheme: "k8s",
+ Path: authority,
+ ContextToken: contextToken,
+ })
+ if err != nil {
+ cancel()
+ testutil.AnnotatedFatalf(t, "failed to create destination
stream", "failed to create destination stream for %s: %v", authority, err)
+ }
+
+ s := &subscriber{
+ cancel: cancel,
+ events: make(chan struct{}, 1),
+ errCh: make(chan error, 1),
+ endpoints: map[string]struct{}{},
+ }
+ go s.readUpdates(stream)
+ t.Cleanup(s.cancel)
+ return s
+}
+
+func (s *subscriber) readUpdates(stream destinationpb.Destination_GetClient) {
+ for {
+ update, err := stream.Recv()
+ if err != nil {
+ // A canceled stream context is expected during test
cleanup.
+ if errors.Is(stream.Context().Err(), context.Canceled)
|| errors.Is(err, context.Canceled) {
+ return
+ }
+ // EOF without cancellation means the server closed the
stream
+ // unexpectedly before the test reached a terminal
assertion.
+ if errors.Is(err, io.EOF) {
+ err = fmt.Errorf("destination stream closed
unexpectedly: %w", err)
+ }
+ select {
+ case s.errCh <- err:
+ default:
+ }
+ return
+ }
+
+ s.mu.Lock()
+ if add := update.GetAdd(); add != nil {
+ for _, addr := range add.GetAddrs() {
+ addrStr :=
pkgaddr.ProxyAddressToString(addr.Addr)
+ s.endpoints[addrStr] = struct{}{}
+ }
+ }
+ if remove := update.GetRemove(); remove != nil {
+ for _, addr := range remove.GetAddrs() {
+ addrStr := pkgaddr.ProxyAddressToString(addr)
+ delete(s.endpoints, addrStr)
+ }
+ }
+ s.mu.Unlock()
+
+ select {
+ case s.events <- struct{}{}:
+ default:
+ }
+ }
+}
+
+func (s *subscriber) WaitForExact(t *testing.T, expected map[string]struct{},
timeout time.Duration) {
+ t.Helper()
+
+ // Fast path for already-converged state.
+ if exactSetEqual(expected, s.snapshot()) {
+ return
+ }
+
+ timer := time.NewTimer(timeout)
+ defer timer.Stop()
+
+ for {
+ select {
+ case err := <-s.errCh:
+ testutil.AnnotatedFatalf(t, "destination stream
failed", "destination stream failed: %v", err)
+ case <-s.events:
+ // The stream can emit multiple incremental updates;
keep waiting until
+ // the complete expected set is observed.
+ if exactSetEqual(expected, s.snapshot()) {
+ return
+ }
+ case <-timer.C:
+ actual := s.snapshot()
+ testutil.AnnotatedFatalf(t,
+ "timed out waiting for destination state",
+ "timed out waiting for destination
state\nexpected: %v\nactual: %v",
+ slices.Sorted(maps.Keys(expected)),
+ slices.Sorted(maps.Keys(actual)),
+ )
+ }
+ }
+}
+
+func (s *subscriber) snapshot() map[string]struct{} {
+ s.mu.RLock()
+ defer s.mu.RUnlock()
+
+ copy := make(map[string]struct{}, len(s.endpoints))
+ for endpoint := range s.endpoints {
+ copy[endpoint] = struct{}{}
+ }
+ return copy
+}
+
+func newDestinationClient(t *testing.T, ctx context.Context)
(destinationpb.DestinationClient, io.Closer) {
+ t.Helper()
+
+ k8sAPI, err := k8s.NewAPI("", "", "", []string{}, 0)
+ if err != nil {
+ testutil.AnnotatedFatalf(t, "failed to create kubernetes api",
"failed to create kubernetes api: %v", err)
+ }
+ client, conn, err := destination.NewExternalClient(ctx,
TestHelper.GetLinkerdNamespace(), k8sAPI, "")
+ if err != nil {
+ testutil.AnnotatedFatalf(t, "failed to create destination
client", "failed to create destination client: %v", err)
+ }
+ return client, conn
+}
+
+func serviceAuthority(serviceName, namespace string) string {
+ return fmt.Sprintf("%s.%s.svc.%s:8080", serviceName, namespace,
TestHelper.GetClusterDomain())
+}
+
+func applyDeploymentAndService(t *testing.T, namespace, deploymentName,
serviceName string, replicas int) {
+ t.Helper()
+
+ manifest := fmt.Sprintf(`
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: %s
+ labels:
+ app: %s
+spec:
+ replicas: %d
+ selector:
+ matchLabels:
+ app: %s
+ template:
+ metadata:
+ annotations:
+ linkerd.io/inject: enabled
+ labels:
+ app: %s
+ spec:
+ containers:
+ - name: app
+ image: nginx:alpine
+---
+apiVersion: v1
+kind: Service
+metadata:
+ name: %s
+spec:
+ ports:
+ - name: service
+ port: 8080
+ selector:
+ app: %s
+`, deploymentName, deploymentName, replicas, deploymentName, deploymentName,
serviceName, deploymentName)
+
+ if _, err := TestHelper.KubectlApply(manifest, namespace); err != nil {
+ testutil.AnnotatedFatalf(t, "failed to apply
deployment/service", "failed to apply deployment/service for %s: %v",
deploymentName, err)
+ }
+}
+
+func applyDeploymentOnly(t *testing.T, namespace, deploymentName, app string,
replicas int) {
+ t.Helper()
+
+ manifest := fmt.Sprintf(`
+apiVersion: apps/v1
+kind: Deployment
+metadata:
+ name: %s
+ labels:
+ app: %s
+spec:
+ replicas: %d
+ selector:
+ matchLabels:
+ app: %s
+ template:
+ metadata:
+ annotations:
+ linkerd.io/inject: enabled
+ labels:
+ app: %s
+ spec:
+ containers:
+ - name: app
+ image: nginx:alpine
+`, deploymentName, app, replicas, app, app)
+
+ if _, err := TestHelper.KubectlApply(manifest, namespace); err != nil {
+ testutil.AnnotatedFatalf(t, "failed to apply deployment",
"failed to apply deployment for %s: %v", deploymentName, err)
+ }
+}
+
+type endpointSliceEntry struct {
+ Address string
+ ZoneHint string
+}
+
+func applySelectorlessServiceAndEndpointSlice(t *testing.T, namespace,
serviceName string, port int, entries []endpointSliceEntry) {
+ t.Helper()
+
+ endpointsYAML := make([]string, 0, len(entries))
+ for _, entry := range entries {
+ endpointsYAML = append(endpointsYAML, fmt.Sprintf(`
+ - addresses:
+ - %s
+ conditions:
+ ready: true
+ hints:
+ forZones:
+ - name: %s`, entry.Address, entry.ZoneHint))
+ }
+
+ manifest := fmt.Sprintf(`
+apiVersion: v1
+kind: Service
+metadata:
+ name: %s
+spec:
+ ports:
+ - name: service
+ port: %d
+---
+apiVersion: discovery.k8s.io/v1
+kind: EndpointSlice
+metadata:
+ name: %s-manual
+ labels:
+ kubernetes.io/service-name: %s
+ endpointslice.kubernetes.io/managed-by: destination-api-test
+addressType: IPv4
+ports:
+- name: service
+ protocol: TCP
+ port: %d
+endpoints:%s
+`, serviceName, port, serviceName, serviceName, port,
strings.Join(endpointsYAML, ""))
+
+ if _, err := TestHelper.KubectlApply(manifest, namespace); err != nil {
+ testutil.AnnotatedFatalf(t, "failed to apply
service/endpointslice", "failed to apply service/endpointslice for %s: %v",
serviceName, err)
+ }
+}
+
+type podEntry struct {
+ Name string `json:"name"`
+ IP string `json:"ip"`
+ NodeName string `json:"nodeName"`
+}
+
+type podsResponse struct {
+ Items []struct {
+ Metadata struct {
+ Name string `json:"name"`
+ } `json:"metadata"`
+ Spec struct {
+ NodeName string `json:"nodeName"`
+ } `json:"spec"`
+ Status struct {
+ PodIP string `json:"podIP"`
+ } `json:"status"`
+ } `json:"items"`
+}
+
+func waitForPods(t *testing.T, namespace, labelSelector string, minCount int,
timeout time.Duration) []podEntry {
+ t.Helper()
+
+ var pods []podEntry
+ err := testutil.RetryFor(timeout, func() error {
+ out, err := TestHelper.Kubectl("", "-n", namespace, "get",
"pods", "-l", labelSelector, "-o", "json")
+ if err != nil {
+ return err
+ }
+
+ var response podsResponse
+ if err := json.Unmarshal([]byte(out), &response); err != nil {
+ return err
+ }
+
+ pods = pods[:0]
+ for _, item := range response.Items {
+ if item.Status.PodIP == "" || item.Spec.NodeName == "" {
+ continue
+ }
+ pods = append(pods, podEntry{
+ Name: item.Metadata.Name,
+ IP: item.Status.PodIP,
+ NodeName: item.Spec.NodeName,
+ })
+ }
+
+ if len(pods) < minCount {
+ return fmt.Errorf("expected at least %d ready pods, got
%d", minCount, len(pods))
+ }
+ return nil
+ })
+ if err != nil {
+ testutil.AnnotatedFatalf(t, "failed waiting for pods", "failed
waiting for pods with selector %s: %v", labelSelector, err)
+ }
+
+ return append([]podEntry(nil), pods...)
+}
+
+type nodeListResponse struct {
+ Items []struct {
+ Metadata struct {
+ Name string `json:"name"`
+ Labels map[string]string `json:"labels"`
+ } `json:"metadata"`
+ } `json:"items"`
+}
+
+func ensureNodeZoneLabel(t *testing.T, nodeName string) (string, func()) {
+ t.Helper()
+
+ out, err := TestHelper.Kubectl("", "get", "nodes", "-o", "json")
+ if err != nil {
+ testutil.AnnotatedFatalf(t, "failed to get nodes", "failed to
get nodes: %v", err)
+ }
+
+ var nodes nodeListResponse
+ if err := json.Unmarshal([]byte(out), &nodes); err != nil {
+ testutil.AnnotatedFatalf(t, "failed to decode nodes", "failed
to decode nodes: %v", err)
+ }
+
+ for _, item := range nodes.Items {
+ if item.Metadata.Name != nodeName {
+ continue
+ }
+
+ if zone, ok :=
item.Metadata.Labels["topology.kubernetes.io/zone"]; ok && zone != "" {
+ return zone, nil
+ }
+
+ zone := "destination-api-test-zone"
+ if _, err := TestHelper.Kubectl("", "label", "node", nodeName,
fmt.Sprintf("topology.kubernetes.io/zone=%s", zone), "--overwrite"); err != nil
{
+ testutil.AnnotatedFatalf(t, "failed to label node
zone", "failed to label node %s: %v", nodeName, err)
+ }
+ cleanup := func() {
+ _, _ = TestHelper.Kubectl("", "label", "node",
nodeName, "topology.kubernetes.io/zone-")
+ }
+ return zone, cleanup
+ }
+
+ testutil.AnnotatedFatalf(t, "node not found", "node %s not found in
cluster", nodeName)
+ return "", nil
+}
+
+type endpointsResponse struct {
+ Subsets []struct {
+ Addresses []struct {
+ IP string `json:"ip"`
+ } `json:"addresses"`
+ Ports []struct {
+ Port int `json:"port"`
+ } `json:"ports"`
+ } `json:"subsets"`
+}
+
+func waitForServiceEndpoints(t *testing.T, namespace, service string, timeout
time.Duration) map[string]struct{} {
+ t.Helper()
+
+ var endpoints map[string]struct{}
+ // Poll Endpoints until at least one address is present. This avoids
races
+ // where the service exists but endpoint publication is still in flight.
+ err := testutil.RetryFor(timeout, func() error {
+ // in k8s 1.35+ this call returns a warning about Endpoints
being deprecated, that we ignore here
+ out, _, err := TestHelper.KubectlRun("", "-n", namespace,
"get", "endpoints", service, "-o", "json")
+ if err != nil {
+ return err
+ }
+
+ set, err := parseEndpointSet(out)
+ if err != nil {
+ return err
+ }
+ if len(set) == 0 {
+ return fmt.Errorf("no endpoints available for service
%s", service)
+ }
+ endpoints = set
+ return nil
+ })
+ if err != nil {
+ testutil.AnnotatedFatalf(t, "failed waiting for service
endpoints", "failed waiting for endpoints for service %s: %v", service, err)
+ }
+
+ return endpoints
+}
+
+func waitForChangedServiceEndpoints(t *testing.T, namespace, service string,
old map[string]struct{}, timeout time.Duration) map[string]struct{} {
+ t.Helper()
+
+ var updated map[string]struct{}
+ // Poll until the endpoint set differs from the old set, accounting for
+ // eventual consistency during rollouts.
+ err := testutil.RetryFor(timeout, func() error {
+ set := waitForServiceEndpoints(t, namespace, service, timeout)
+ if exactSetEqual(old, set) {
+ return fmt.Errorf("service endpoints have not changed
yet")
+ }
+ updated = set
+ return nil
+ })
+ if err != nil {
+ testutil.AnnotatedFatalf(t,
+ "service endpoints did not change",
+ "service %s endpoints did not change within timeout;
old=%v new=%v err=%v",
+ service,
+ slices.Sorted(maps.Keys(old)),
+ slices.Sorted(maps.Keys(updated)),
+ err,
+ )
+ }
+
+ return updated
+}
+
+func parseEndpointSet(raw string) (map[string]struct{}, error) {
+ var response endpointsResponse
+ if err := json.Unmarshal([]byte(raw), &response); err != nil {
+ return nil, err
+ }
+
+ set := map[string]struct{}{}
+ for _, subset := range response.Subsets {
+ for _, addr := range subset.Addresses {
+ for _, port := range subset.Ports {
+ set[fmt.Sprintf("%s:%d", addr.IP, port.Port)] =
struct{}{}
+ }
+ }
+ }
+ return set, nil
+}
+
+func exactSetEqual(a, b map[string]struct{}) bool {
+ if len(a) != len(b) {
+ return false
+ }
+ for endpoint := range a {
+ if _, ok := b[endpoint]; !ok {
+ return false
+ }
+ }
+ return true
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/linkerd-cli-edge-26.4.1/testutil/kubernetes_helper.go
new/linkerd-cli-edge-26.4.2/testutil/kubernetes_helper.go
--- old/linkerd-cli-edge-26.4.1/testutil/kubernetes_helper.go 2026-04-02
22:49:01.000000000 +0200
+++ new/linkerd-cli-edge-26.4.2/testutil/kubernetes_helper.go 2026-04-09
21:36:43.000000000 +0200
@@ -162,6 +162,7 @@
}
// Kubectl executes an arbitrary Kubectl command
+// Deprecated: use KubectlRun instead
func (h *KubernetesHelper) Kubectl(stdin string, arg ...string) (string,
error) {
withContext := append([]string{"--context=" + h.k8sContext}, arg...)
cmd := exec.Command("kubectl", withContext...)
@@ -170,6 +171,12 @@
return string(out), err
}
+// KubectlRun executes an arbitrary kubectl command and returns stdout and
stderr separately
+func (h *KubernetesHelper) KubectlRun(stdin string, arg ...string) (string,
string, error) {
+ withContext := append([]string{"--context=" + h.k8sContext}, arg...)
+ return combinedOutput(stdin, "kubectl", withContext...)
+}
+
// KubectlApplyWithContext applies a given configuration with the given flags
func (h *KubernetesHelper) KubectlApplyWithContext(stdin string, context
string, arg ...string) (string, error) {
args := append([]string{"apply"}, arg...)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.1/web/app/package.json
new/linkerd-cli-edge-26.4.2/web/app/package.json
--- old/linkerd-cli-edge-26.4.1/web/app/package.json 2026-04-02
22:49:01.000000000 +0200
+++ new/linkerd-cli-edge-26.4.2/web/app/package.json 2026-04-09
21:36:43.000000000 +0200
@@ -25,7 +25,7 @@
"date-fns": "4.1.0",
"jest-progress-bar-reporter": "^1.0.25",
"locales-detector": "3.0.2",
- "lodash": "4.17.23",
+ "lodash": "4.18.1",
"make-plural": "^7.4.0",
"path": "0.12.7",
"prop-types": "15.8.1",
@@ -71,15 +71,15 @@
"history": "5.3.0",
"html-webpack-plugin": "^5.6.6",
"jest": "^30.3.0",
- "jest-environment-jsdom": "^30.2.0",
+ "jest-environment-jsdom": "^30.3.0",
"lodash-webpack-plugin": "^0.11.6",
"react-test-renderer": "16.14.0",
- "sinon": "21.0.2",
+ "sinon": "21.0.3",
"sinon-stub-promise": "4.0.0",
"style-loader": "^4.0.0",
"url-loader": "^4.1.1",
- "webpack": "^5.105.4",
- "webpack-bundle-analyzer": "5.2.0",
+ "webpack": "^5.106.0",
+ "webpack-bundle-analyzer": "5.3.0",
"webpack-cli": "7.0.2",
"webpack-dev-server": "5.2.3"
},
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.1/web/app/yarn.lock
new/linkerd-cli-edge-26.4.2/web/app/yarn.lock
--- old/linkerd-cli-edge-26.4.1/web/app/yarn.lock 2026-04-02
22:49:01.000000000 +0200
+++ new/linkerd-cli-edge-26.4.2/web/app/yarn.lock 2026-04-09
21:36:43.000000000 +0200
@@ -1147,10 +1147,10 @@
resolved
"https://registry.yarnpkg.com/@csstools/css-tokenizer/-/css-tokenizer-3.0.4.tgz#333fedabc3fd1a8e5d0100013731cf19e6a8c5d3"
integrity
sha512-Vd/9EVDiu6PPJt9yAh6roZP6El1xHrdvIVGjyBsHR0RYwNHgL7FJPyIIW4fANJNG6FtyZfvlRPpFI4ZM/lubvw==
-"@discoveryjs/[email protected]":
- version "0.5.7"
- resolved
"https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.5.7.tgz#1d572bfbbe14b7704e0ba0f39b74815b84870d70"
- integrity
sha512-dBVuXR082gk3jsFp7Rd/JI4kytwGHecnCoTtXFb7DB6CNHp4rg5k1bhg0nWdLGLnOV71lmDzGQaLMy8iPLY0pw==
+"@discoveryjs/json-ext@^0.6.3":
+ version "0.6.3"
+ resolved
"https://registry.yarnpkg.com/@discoveryjs/json-ext/-/json-ext-0.6.3.tgz#f13c7c205915eb91ae54c557f5e92bddd8be0e83"
+ integrity
sha512-4B4OijXeVNOPZlYA2oEwWOTkzyltLao+xbotHQeqN++Rv27Y6s818+n2Qkp8q+Fxhn0t/5lA5X1Mxktud8eayQ==
"@discoveryjs/json-ext@^1.0.0":
version "1.0.0"
@@ -1346,28 +1346,18 @@
resolved
"https://registry.yarnpkg.com/@jest/diff-sequences/-/diff-sequences-30.3.0.tgz#25b0818d3d83f00b9c7b04e069b8810f9014b143"
integrity
sha512-cG51MVnLq1ecVUaQ3fr6YuuAOitHK1S4WUJHnsPFE/quQr33ADUx1FfrTCpMCRxvy0Yr9BThKpDjSlcTi91tMA==
-"@jest/[email protected]":
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.2.0.tgz#1313f9b3b509c31298c241203161b36622865181"
- integrity
sha512-kazxw2L9IPuZpQ0mEt9lu9Z98SqR74xcagANmMBU16X0lS23yPc0+S6hGLUz8kVRlomZEs/5S/Zlpqwf5yu6OQ==
+"@jest/[email protected]":
+ version "30.3.0"
+ resolved
"https://registry.yarnpkg.com/@jest/environment-jsdom-abstract/-/environment-jsdom-abstract-30.3.0.tgz#c97b2bf3ec35336d543c174a758f3dc07478c172"
+ integrity
sha512-0hNFs5N6We3DMCwobzI0ydhkY10sT1tZSC0AAiy+0g2Dt/qEWgrcV5BrMxPczhe41cxW4qm6X+jqZaUdpZIajA==
dependencies:
- "@jest/environment" "30.2.0"
- "@jest/fake-timers" "30.2.0"
- "@jest/types" "30.2.0"
+ "@jest/environment" "30.3.0"
+ "@jest/fake-timers" "30.3.0"
+ "@jest/types" "30.3.0"
"@types/jsdom" "^21.1.7"
"@types/node" "*"
- jest-mock "30.2.0"
- jest-util "30.2.0"
-
-"@jest/[email protected]":
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/@jest/environment/-/environment-30.2.0.tgz#1e673cdb8b93ded707cf6631b8353011460831fa"
- integrity
sha512-/QPTL7OBJQ5ac09UDRa3EQes4gt1FTEG/8jZ/4v5IVzx+Cv7dLxlVIvfvSVRiiX2drWyXeBjkMSR8hvOWSog5g==
- dependencies:
- "@jest/fake-timers" "30.2.0"
- "@jest/types" "30.2.0"
- "@types/node" "*"
- jest-mock "30.2.0"
+ jest-mock "30.3.0"
+ jest-util "30.3.0"
"@jest/[email protected]":
version "30.3.0"
@@ -1394,18 +1384,6 @@
expect "30.3.0"
jest-snapshot "30.3.0"
-"@jest/[email protected]":
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-30.2.0.tgz#0941ddc28a339b9819542495b5408622dc9e94ec"
- integrity
sha512-HI3tRLjRxAbBy0VO8dqqm7Hb2mIa8d5bg/NJkyQcOk7V118ObQML8RC5luTF/Zsg4474a+gDvhce7eTnP4GhYw==
- dependencies:
- "@jest/types" "30.2.0"
- "@sinonjs/fake-timers" "^13.0.0"
- "@types/node" "*"
- jest-message-util "30.2.0"
- jest-mock "30.2.0"
- jest-util "30.2.0"
-
"@jest/[email protected]":
version "30.3.0"
resolved
"https://registry.yarnpkg.com/@jest/fake-timers/-/fake-timers-30.3.0.tgz#2b2868130c1d28233a79566874c42cae1c5a70bc"
@@ -1543,19 +1521,6 @@
slash "^3.0.0"
write-file-atomic "^5.0.1"
-"@jest/[email protected]":
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/@jest/types/-/types-30.2.0.tgz#1c678a7924b8f59eafd4c77d56b6d0ba976d62b8"
- integrity
sha512-H9xg1/sfVvyfU7o3zMfBEjQ1gcsdeTMgqHoYdN79tuLqfTtuu7WckRA1R5whDwOzxaZAeMKTYWqP+WCAi0CHsg==
- dependencies:
- "@jest/pattern" "30.0.1"
- "@jest/schemas" "30.0.5"
- "@types/istanbul-lib-coverage" "^2.0.6"
- "@types/istanbul-reports" "^3.0.4"
- "@types/node" "*"
- "@types/yargs" "^17.0.33"
- chalk "^4.1.2"
-
"@jest/[email protected]":
version "30.3.0"
resolved
"https://registry.yarnpkg.com/@jest/types/-/types-30.3.0.tgz#cada800d323cb74945c24ac74615fdb312a6c85f"
@@ -2078,13 +2043,6 @@
dependencies:
type-detect "4.0.8"
-"@sinonjs/fake-timers@^13.0.0":
- version "13.0.5"
- resolved
"https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-13.0.5.tgz#36b9dbc21ad5546486ea9173d6bea063eb1717d5"
- integrity
sha512-36/hTbH2uaWuGVERyC6da9YwGWnzUZXuPro/F2LfsdOsLnCojz/iSH8MxUt/FD2S5XBSVPhmArFUXcpCQ2Hkiw==
- dependencies:
- "@sinonjs/commons" "^3.0.1"
-
"@sinonjs/fake-timers@^15.0.0", "@sinonjs/fake-timers@^15.1.1":
version "15.1.1"
resolved
"https://registry.yarnpkg.com/@sinonjs/fake-timers/-/fake-timers-15.1.1.tgz#e1a6f7171941aadcc31d2cea1744264d58b8b34c"
@@ -2092,10 +2050,10 @@
dependencies:
"@sinonjs/commons" "^3.0.1"
-"@sinonjs/samsam@^9.0.2":
- version "9.0.2"
- resolved
"https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-9.0.2.tgz#ff0ad0e50e41942891588989615fbc4df569b76b"
- integrity
sha512-H/JSxa4GNKZuuU41E3b8Y3tbSEx8y4uq4UH1C56ONQac16HblReJomIvv3Ud7ANQHQmkeSowY49Ij972e/pGxQ==
+"@sinonjs/samsam@^9.0.3":
+ version "9.0.3"
+ resolved
"https://registry.yarnpkg.com/@sinonjs/samsam/-/samsam-9.0.3.tgz#da4cad6ee24ca0c9c205da16676f7d540df71f12"
+ integrity
sha512-ZgYY7Dc2RW+OUdnZ1DEHg00lhRt+9BjymPKHog4PRFzr1U3MbK57+djmscWyKxzO1qfunHqs4N45WWyKIFKpiQ==
dependencies:
"@sinonjs/commons" "^3.0.1"
type-detect "^4.1.0"
@@ -3269,7 +3227,7 @@
dependencies:
balanced-match "^1.0.0"
-braces@^3.0.1, braces@^3.0.2, braces@^3.0.3, braces@~3.0.2:
+braces@^3.0.1, braces@^3.0.2, braces@~3.0.2:
version "3.0.3"
resolved
"https://registry.yarnpkg.com/braces/-/braces-3.0.3.tgz#490332f40919452272d55a8480adc0c441358789"
integrity
sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==
@@ -3650,7 +3608,7 @@
resolved
"https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
integrity sha1-BDP0TYCWgP3rYO0mDxsMJi6CpAs=
-commander@*, commander@^14.0.3:
+commander@*, commander@^14.0.2, commander@^14.0.3:
version "14.0.3"
resolved
"https://registry.yarnpkg.com/commander/-/commander-14.0.3.tgz#425d79b48f9af82fcd9e4fc1ea8af6c5ec07bbc2"
integrity
sha512-H+y0Jo/T1RZ9qPP4Eh1pkcQcLRglraJaSLoyOtHxu6AapkjWVCy2Sit1QQ4x3Dng8qDlSsZEet7g5Pq06MvTgw==
@@ -3665,11 +3623,6 @@
resolved
"https://registry.yarnpkg.com/commander/-/commander-6.2.1.tgz#0792eb682dfbc325999bb2b84fddddba110ac73c"
integrity
sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==
-commander@^7.2.0:
- version "7.2.0"
- resolved
"https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7"
- integrity
sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==
-
commander@^8.1.0:
version "8.2.0"
resolved
"https://registry.yarnpkg.com/commander/-/commander-8.2.0.tgz#37fe2bde301d87d47a53adeff8b5915db1381ca8"
@@ -3988,11 +3941,6 @@
dependencies:
"@babel/runtime" "^7.21.0"
-debounce@^1.2.1:
- version "1.2.1"
- resolved
"https://registry.yarnpkg.com/debounce/-/debounce-1.2.1.tgz#38881d8f4166a5c5848020c11827b834bcb3e0a5"
- integrity
sha512-XRRe6Glud4rd/ZGQfiV1ruXSfbvfJedlV9Y6zOlP+2K04vBYiJEte6stfFkCP03aMnY5tsipamumUjL14fofug==
-
[email protected]:
version "2.6.9"
resolved
"https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f"
@@ -4833,6 +4781,11 @@
resolved
"https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34"
integrity
sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==
+escape-string-regexp@^5.0.0:
+ version "5.0.0"
+ resolved
"https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-5.0.0.tgz#4683126b500b61762f2dbebace1806e8be31b1c8"
+ integrity
sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==
+
eslint-config-airbnb-base@^15.0.0:
version "15.0.0"
resolved
"https://registry.yarnpkg.com/eslint-config-airbnb-base/-/eslint-config-airbnb-base-15.0.0.tgz#6b09add90ac79c2f8d723a2580e07f3925afd236"
@@ -5813,11 +5766,16 @@
dependencies:
whatwg-encoding "^3.1.1"
-html-escaper@^2.0.0, html-escaper@^2.0.2:
+html-escaper@^2.0.0:
version "2.0.2"
resolved
"https://registry.yarnpkg.com/html-escaper/-/html-escaper-2.0.2.tgz#dfd60027da36a36dfcbe236262c00a5822681453"
integrity
sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==
+html-escaper@^3.0.3:
+ version "3.0.3"
+ resolved
"https://registry.yarnpkg.com/html-escaper/-/html-escaper-3.0.3.tgz#4d336674652beb1dcbc29ef6b6ba7f6be6fdfed6"
+ integrity
sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ==
+
html-minifier-terser@^6.0.2:
version "6.0.2"
resolved
"https://registry.yarnpkg.com/html-minifier-terser/-/html-minifier-terser-6.0.2.tgz#14059ad64b69bf9f8b8a33f25b53411d8321e75d"
@@ -6736,15 +6694,13 @@
jest-util "30.3.0"
pretty-format "30.3.0"
-jest-environment-jsdom@^30.2.0:
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-30.2.0.tgz#e95e0921ed22be974f1d8a324766d12b1844cb2c"
- integrity
sha512-zbBTiqr2Vl78pKp/laGBREYzbZx9ZtqPjOK4++lL4BNDhxRnahg51HtoDrk9/VjIy9IthNEWdKVd7H5bqBhiWQ==
+jest-environment-jsdom@^30.3.0:
+ version "30.3.0"
+ resolved
"https://registry.yarnpkg.com/jest-environment-jsdom/-/jest-environment-jsdom-30.3.0.tgz#6bf80519643333ae2faa07b5660d80451d328578"
+ integrity
sha512-RLEOJy6ip1lpw0yqJ8tB3i88FC7VBz7i00Zvl2qF71IdxjS98gC9/0SPWYIBVXHm5hgCYK0PAlSlnHGGy9RoMg==
dependencies:
- "@jest/environment" "30.2.0"
- "@jest/environment-jsdom-abstract" "30.2.0"
- "@types/jsdom" "^21.1.7"
- "@types/node" "*"
+ "@jest/environment" "30.3.0"
+ "@jest/environment-jsdom-abstract" "30.3.0"
jsdom "^26.1.0"
[email protected]:
@@ -6801,21 +6757,6 @@
jest-diff "30.3.0"
pretty-format "30.3.0"
[email protected]:
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.2.0.tgz#fc97bf90d11f118b31e6131e2b67fc4f39f92152"
- integrity
sha512-y4DKFLZ2y6DxTWD4cDe07RglV88ZiNEdlRfGtqahfbIjfsw1nMCPx49Uev4IA/hWn3sDKyAnSPwoYSsAEdcimw==
- dependencies:
- "@babel/code-frame" "^7.27.1"
- "@jest/types" "30.2.0"
- "@types/stack-utils" "^2.0.3"
- chalk "^4.1.2"
- graceful-fs "^4.2.11"
- micromatch "^4.0.8"
- pretty-format "30.2.0"
- slash "^3.0.0"
- stack-utils "^2.0.6"
-
[email protected]:
version "30.3.0"
resolved
"https://registry.yarnpkg.com/jest-message-util/-/jest-message-util-30.3.0.tgz#4d723544d36890ba862ac3961db52db5b0d1ba39"
@@ -6831,15 +6772,6 @@
slash "^3.0.0"
stack-utils "^2.0.6"
[email protected]:
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.2.0.tgz#69f991614eeb4060189459d3584f710845bff45e"
- integrity
sha512-JNNNl2rj4b5ICpmAcq+WbLH83XswjPbjH4T7yvGzfAGCPh1rw+xVNbtk+FnRslvt9lkCcdn9i1oAoKUuFsOxRw==
- dependencies:
- "@jest/types" "30.2.0"
- "@types/node" "*"
- jest-util "30.2.0"
-
[email protected]:
version "30.3.0"
resolved
"https://registry.yarnpkg.com/jest-mock/-/jest-mock-30.3.0.tgz#e0fa4184a596a6c4fdec53d4f412158418923747"
@@ -6973,18 +6905,6 @@
semver "^7.7.2"
synckit "^0.11.8"
[email protected]:
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/jest-util/-/jest-util-30.2.0.tgz#5142adbcad6f4e53c2776c067a4db3c14f913705"
- integrity
sha512-QKNsM0o3Xe6ISQU869e+DhG+4CK/48aHYdJZGlFQVTjnbvgpcKyxpzk29fGiO7i/J8VENZ+d2iGnSsvmuHywlA==
- dependencies:
- "@jest/types" "30.2.0"
- "@types/node" "*"
- chalk "^4.1.2"
- ci-info "^4.2.0"
- graceful-fs "^4.2.11"
- picomatch "^4.0.2"
-
[email protected]:
version "30.3.0"
resolved
"https://registry.yarnpkg.com/jest-util/-/jest-util-30.3.0.tgz#95a4fbacf2dac20e768e2f1744b70519f2ba7980"
@@ -7400,10 +7320,10 @@
resolved
"https://registry.yarnpkg.com/lodash.merge/-/lodash.merge-4.6.2.tgz#558aa53b43b661e1925a0afdfa36a9a1085fe57a"
integrity
sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==
[email protected], lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
- version "4.17.23"
- resolved
"https://registry.yarnpkg.com/lodash/-/lodash-4.17.23.tgz#f113b0378386103be4f6893388c73d0bde7f2c5a"
- integrity
sha512-LgVTMpQtIopCi79SJeDiP0TfWi5CNEc/L/aRdTh3yIvmZXTnheWpKjSZhnvMl8iXbC1tFg9gdHHDMLoV7CnG+w==
[email protected], lodash@^4.17.19, lodash@^4.17.20, lodash@^4.17.21:
+ version "4.18.1"
+ resolved
"https://registry.yarnpkg.com/lodash/-/lodash-4.18.1.tgz#ff2b66c1f6326d59513de2407bf881439812771c"
+ integrity
sha512-dMInicTPVE8d1e5otfwmmjlxkZoUpiVLwyeTdUsi/Caj/gfzzblBcCE5sRHV/AsjuCmxWrte2TNGSYuCeCq+0Q==
log-symbols@^4.1.0:
version "4.1.0"
@@ -7518,14 +7438,6 @@
braces "^3.0.2"
picomatch "^2.3.1"
-micromatch@^4.0.8:
- version "4.0.8"
- resolved
"https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.8.tgz#d66fa18f3a47076789320b9b1af32bd86d9fa202"
- integrity
sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==
- dependencies:
- braces "^3.0.3"
- picomatch "^2.3.1"
-
[email protected]:
version "1.52.0"
resolved
"https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70"
@@ -8131,11 +8043,6 @@
resolved
"https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42"
integrity
sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==
-picomatch@^4.0.2:
- version "4.0.2"
- resolved
"https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.2.tgz#77c742931e8f3b8820946c76cd0c1f13730d1dab"
- integrity
sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==
-
picomatch@^4.0.3:
version "4.0.3"
resolved
"https://registry.yarnpkg.com/picomatch/-/picomatch-4.0.3.tgz#796c76136d1eead715db1e7bad785dedd695a042"
@@ -8277,15 +8184,6 @@
lodash "^4.17.20"
renderkid "^3.0.0"
[email protected]:
- version "30.2.0"
- resolved
"https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.2.0.tgz#2d44fe6134529aed18506f6d11509d8a62775ebe"
- integrity
sha512-9uBdv/B4EefsuAL+pWqueZyZS2Ba+LxfFeQ9DN14HU4bN8bhaxKdkpjpB6fs9+pSjIBu+FXQHImEg8j/Lw0+vA==
- dependencies:
- "@jest/schemas" "30.0.5"
- ansi-styles "^5.2.0"
- react-is "^18.3.1"
-
[email protected]:
version "30.3.0"
resolved
"https://registry.yarnpkg.com/pretty-format/-/pretty-format-30.3.0.tgz#e977eed4bcd1b6195faed418af8eac68b9ea1f29"
@@ -9235,14 +9133,14 @@
resolved
"https://registry.yarnpkg.com/sinon-stub-promise/-/sinon-stub-promise-4.0.0.tgz#6d498ba1198557cd01e3466af92dc7df725192c2"
integrity sha1-bUmLoRmFV80B40Zq+S3H33JRksI=
[email protected]:
- version "21.0.2"
- resolved
"https://registry.yarnpkg.com/sinon/-/sinon-21.0.2.tgz#2dca6fc59eca5288d9f2284925e9ae586085f917"
- integrity
sha512-VHV4UaoxIe5jrMd89Y9duI76T5g3Lp+ET+ctLhLDaZtSznDPah1KKpRElbdBV4RwqWSw2vadFiVs9Del7MbVeQ==
[email protected]:
+ version "21.0.3"
+ resolved
"https://registry.yarnpkg.com/sinon/-/sinon-21.0.3.tgz#fd3a2387ffe4fdbbfbbf3a0858f18d46c4acb34e"
+ integrity
sha512-0x8TQFr8EjADhSME01u1ZK31yv2+bd6Z5NrBCHVM+n4qL1wFqbxftmeyi3bwlr49FbbzRfrqSFOpyHCOh/YmYA==
dependencies:
"@sinonjs/commons" "^3.0.1"
"@sinonjs/fake-timers" "^15.1.1"
- "@sinonjs/samsam" "^9.0.2"
+ "@sinonjs/samsam" "^9.0.3"
diff "^8.0.3"
supports-color "^7.2.0"
@@ -10175,18 +10073,17 @@
resolved
"https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-7.0.0.tgz#256b4e1882be7debbf01d05f0aa2039778ea080a"
integrity
sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==
[email protected]:
- version "5.2.0"
- resolved
"https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.2.0.tgz#9bcf0e7cc8c86632a96bf7092300287dc284c3d7"
- integrity
sha512-Etrauj1wYO/xjiz/Vfd6bW1lG9fEhrJpNmu10tv0X9kv+gyY3qiE09uYepqg1Xd0PxOvllRXwWYWjtQYoO/glQ==
[email protected]:
+ version "5.3.0"
+ resolved
"https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.3.0.tgz#ca289e08f2f5e39964a9988c38ff3090559392bf"
+ integrity
sha512-PEhAoqiJ+47d0uLMx/+zo5XOvaU+Vk6N2ZLht7H3n09QLy/fhyvqGNwjdRUHJDgMN8crBR2ZwVHkIswT3Xuawg==
dependencies:
- "@discoveryjs/json-ext" "0.5.7"
+ "@discoveryjs/json-ext" "^0.6.3"
acorn "^8.0.4"
acorn-walk "^8.0.0"
- commander "^7.2.0"
- debounce "^1.2.1"
- escape-string-regexp "^4.0.0"
- html-escaper "^2.0.2"
+ commander "^14.0.2"
+ escape-string-regexp "^5.0.0"
+ html-escaper "^3.0.3"
opener "^1.5.2"
picocolors "^1.0.0"
sirv "^3.0.2"
@@ -10267,10 +10164,10 @@
resolved
"https://registry.yarnpkg.com/webpack-sources/-/webpack-sources-3.3.4.tgz#a338b95eb484ecc75fbb196cbe8a2890618b4891"
integrity
sha512-7tP1PdV4vF+lYPnkMR0jMY5/la2ub5Fc/8VQrrU+lXkiM6C4TjVfGw7iKfyhnTQOsD+6Q/iKw0eFciziRgD58Q==
-webpack@^5.105.4:
- version "5.105.4"
- resolved
"https://registry.yarnpkg.com/webpack/-/webpack-5.105.4.tgz#1b77fcd55a985ac7ca9de80a746caffa38220169"
- integrity
sha512-jTywjboN9aHxFlToqb0K0Zs9SbBoW4zRUlGzI2tYNxVYcEi/IPpn+Xi4ye5jTLvX2YeLuic/IvxNot+Q1jMoOw==
+webpack@^5.106.0:
+ version "5.106.0"
+ resolved
"https://registry.yarnpkg.com/webpack/-/webpack-5.106.0.tgz#ee374da5573eef1e47b2650d6be8e40fb928d697"
+ integrity
sha512-Pkx5joZ9RrdgO5LBkyX1L2ZAJeK/Taz3vqZ9CbcP0wS5LEMx5QkKsEwLl29QJfihZ+DKRBFldzy1O30pJ1MDpA==
dependencies:
"@types/eslint-scope" "^3.7.7"
"@types/estree" "^1.0.8"
++++++ linkerd-cli-edge.obsinfo ++++++
--- /var/tmp/diff_new_pack.uPfifx/_old 2026-04-11 22:30:19.422082614 +0200
+++ /var/tmp/diff_new_pack.uPfifx/_new 2026-04-11 22:30:19.462084250 +0200
@@ -1,5 +1,5 @@
name: linkerd-cli-edge
-version: 26.4.1
-mtime: 1775162941
-commit: 372abd361635ec27e4ba39b40776f93647e7fb13
+version: 26.4.2
+mtime: 1775763403
+commit: cda7b5cbafb58d3aeab313e3f5fc51c0e63e1a5b
++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/linkerd-cli-edge/vendor.tar.gz
/work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.21863/vendor.tar.gz differ:
char 13, line 1