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-18 21:38:58
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/linkerd-cli-edge (Old)
 and      /work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.11940 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "linkerd-cli-edge"

Sat Apr 18 21:38:58 2026 rev:72 rq:1347858 version:26.4.3

Changes:
--------
--- /work/SRC/openSUSE:Factory/linkerd-cli-edge/linkerd-cli-edge.changes        
2026-04-11 22:30:11.769769634 +0200
+++ 
/work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.11940/linkerd-cli-edge.changes 
    2026-04-18 21:39:00.104033972 +0200
@@ -1,0 +2,13 @@
+Fri Apr 17 20:01:19 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 26.4.3:
+  * build(deps): bump rand from 0.10.0 to 0.10.1 (#15162)
+  * build(deps): bump cc from 1.2.59 to 1.2.60 (#15161)
+  * build(deps): bump rustls-webpki from 0.103.10 to 0.103.11
+    (#15160)
+  * build(deps): bump golang.org/x/tools from 0.43.0 to 0.44.0
+    (#15153)
+  * build(deps): bump helm.sh/helm/v3 from 3.20.1 to 3.20.2
+    (#15154)
+
+-------------------------------------------------------------------

Old:
----
  linkerd-cli-edge-26.4.2.obscpio

New:
----
  linkerd-cli-edge-26.4.3.obscpio

++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Other differences:
------------------
++++++ linkerd-cli-edge.spec ++++++
--- /var/tmp/diff_new_pack.OwDmMt/_old  2026-04-18 21:39:03.756183529 +0200
+++ /var/tmp/diff_new_pack.OwDmMt/_new  2026-04-18 21:39:03.760183693 +0200
@@ -19,7 +19,7 @@
 %define linkerd_executable_name linkerd
 
 Name:           linkerd-cli-edge
-Version:        26.4.2
+Version:        26.4.3
 Release:        0
 Summary:        CLI for the linkerd service mesh for Kubernetes
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.OwDmMt/_old  2026-04-18 21:39:03.796185168 +0200
+++ /var/tmp/diff_new_pack.OwDmMt/_new  2026-04-18 21:39:03.800185331 +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.2</param>
+    <param name="revision">edge-26.4.3</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.OwDmMt/_old  2026-04-18 21:39:03.820186151 +0200
+++ /var/tmp/diff_new_pack.OwDmMt/_new  2026-04-18 21:39:03.824186314 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/linkerd/linkerd2</param>
-              <param 
name="changesrevision">cda7b5cbafb58d3aeab313e3f5fc51c0e63e1a5b</param></service></servicedata>
+              <param 
name="changesrevision">8ca8bbcfdc58e6433925c617529d39bf48b777c3</param></service></servicedata>
 (No newline at EOF)
 

++++++ linkerd-cli-edge-26.4.2.obscpio -> linkerd-cli-edge-26.4.3.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/.proxy-version 
new/linkerd-cli-edge-26.4.3/.proxy-version
--- old/linkerd-cli-edge-26.4.2/.proxy-version  2026-04-09 21:36:43.000000000 
+0200
+++ new/linkerd-cli-edge-26.4.3/.proxy-version  2026-04-15 19:26:10.000000000 
+0200
@@ -1 +1 @@
-v2.348.0
+v2.349.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/Cargo.lock 
new/linkerd-cli-edge-26.4.3/Cargo.lock
--- old/linkerd-cli-edge-26.4.2/Cargo.lock      2026-04-09 21:36:43.000000000 
+0200
+++ new/linkerd-cli-edge-26.4.3/Cargo.lock      2026-04-15 19:26:10.000000000 
+0200
@@ -219,9 +219,9 @@
 
 [[package]]
 name = "cc"
-version = "1.2.59"
+version = "1.2.60"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "b7a4d3ec6524d28a329fc53654bbadc9bdd7b0431f5d65f1a56ffb28a1ee5283"
+checksum = "43c5703da9466b66a946814e1adf53ea2c90f10063b86290cc9eb67ce3478a20"
 dependencies = [
  "find-msvc-tools",
  "jobserver",
@@ -1508,7 +1508,7 @@
  "linkerd-policy-controller-k8s-api",
  "linkerd2-proxy-api",
  "maplit",
- "rand 0.10.0",
+ "rand 0.10.1",
  "regex",
  "schemars",
  "serde",
@@ -1936,9 +1936,9 @@
 
 [[package]]
 name = "rand"
-version = "0.10.0"
+version = "0.10.1"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "bc266eb313df6c5c09c1c7b1fbe2510961e5bcd3add930c1e31f7ed9da0feff8"
+checksum = "d2e8e8bcc7961af1fdac401278c6a831614941f6164ee3bf4ce61b7edb162207"
 dependencies = [
  "chacha20",
  "getrandom 0.4.1",
@@ -2111,9 +2111,9 @@
 
 [[package]]
 name = "rustls-webpki"
-version = "0.103.10"
+version = "0.103.11"
 source = "registry+https://github.com/rust-lang/crates.io-index";
-checksum = "df33b2b81ac578cabaf06b89b0631153a3f416b0a886e8a7a1707fb51abbd1ef"
+checksum = "20a6af516fea4b20eccceaf166e8aa666ac996208e8a644ce3ef5aa783bc7cd4"
 dependencies = [
  "aws-lc-rs",
  "ring",
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/bin/_test-helpers.sh 
new/linkerd-cli-edge-26.4.3/bin/_test-helpers.sh
--- old/linkerd-cli-edge-26.4.2/bin/_test-helpers.sh    2026-04-09 
21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/bin/_test-helpers.sh    2026-04-15 
19:26:10.000000000 +0200
@@ -5,7 +5,7 @@
 set +e
 
 k8s_version_min='+v1.23'
-k8s_version_max='docker.io/rancher/k3s:v1.31.5-k3s1'
+k8s_version_max='docker.io/rancher/k3s:v1.35.3-k3s1'
 
 bindir=$( cd "${BASH_SOURCE[0]%/*}" && pwd )
 testdir=$bindir/../test/integration
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/cli/cmd/doc.go 
new/linkerd-cli-edge-26.4.3/cli/cmd/doc.go
--- old/linkerd-cli-edge-26.4.2/cli/cmd/doc.go  2026-04-09 21:36:43.000000000 
+0200
+++ new/linkerd-cli-edge-26.4.3/cli/cmd/doc.go  2026-04-15 19:26:10.000000000 
+0200
@@ -288,5 +288,9 @@
                        Name:        k8s.ProxyEnableNativeSidecarAnnotationBeta,
                        Description: "Enable KEP-753 native sidecars. This is a 
beta feature. It requires Kubernetes >= 1.29. If enabled, 
.proxy.waitBeforeExitSeconds should not be used.",
                },
+               {
+                       Name:        k8s.ProxyAdditionalEnvAnnotation,
+                       Description: "Set additional proxy environment 
variables via a JSON-encoded list of Kubernetes EnvVar objects. Env vars are 
merged by name across three layers with increasing precedence: Helm 
proxy.additionalEnv < namespace annotation < workload annotation. 
Higher-precedence layers override entries with the same env var name rather 
than replacing the entire list.",
+               },
        }
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/go.mod 
new/linkerd-cli-edge-26.4.3/go.mod
--- old/linkerd-cli-edge-26.4.2/go.mod  2026-04-09 21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/go.mod  2026-04-15 19:26:10.000000000 +0200
@@ -35,12 +35,12 @@
        github.com/spf13/cobra v1.10.2
        github.com/spf13/pflag v1.0.10
        go.opencensus.io v0.24.0
-       golang.org/x/tools v0.43.0
+       golang.org/x/tools v0.44.0
        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
-       helm.sh/helm/v3 v3.20.1
+       helm.sh/helm/v3 v3.20.2
        k8s.io/api v0.35.3
        k8s.io/apiextensions-apiserver v0.35.3
        k8s.io/apimachinery v0.35.3
@@ -56,7 +56,7 @@
 
 require (
        github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
-       golang.org/x/net v0.52.0 // indirect
+       golang.org/x/net v0.53.0 // indirect
 )
 
 require (
@@ -141,14 +141,14 @@
        go.opentelemetry.io/otel/trace v1.39.0 // indirect
        go.yaml.in/yaml/v2 v2.4.3 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
-       golang.org/x/crypto v0.49.0 // indirect
-       golang.org/x/mod v0.34.0 // indirect
+       golang.org/x/crypto v0.50.0 // indirect
+       golang.org/x/mod v0.35.0 // indirect
        golang.org/x/oauth2 v0.34.0 // indirect
        golang.org/x/sync v0.20.0 // indirect
-       golang.org/x/sys v0.42.0 // indirect
-       golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c // indirect
-       golang.org/x/term v0.41.0 // indirect
-       golang.org/x/text v0.35.0 // indirect
+       golang.org/x/sys v0.43.0 // indirect
+       golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
+       golang.org/x/term v0.42.0 // indirect
+       golang.org/x/text v0.36.0 // indirect
        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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/go.sum 
new/linkerd-cli-edge-26.4.3/go.sum
--- old/linkerd-cli-edge-26.4.2/go.sum  2026-04-09 21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/go.sum  2026-04-15 19:26:10.000000000 +0200
@@ -469,8 +469,8 @@
 golang.org/x/crypto v0.0.0-20190605123033-f99c8df09eb5/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20191011191535-87dc89f01550/go.mod 
h1:yigFU9vqHzYiE8UmvKecakEJjdnWj3jj499lnFckfCI=
 golang.org/x/crypto v0.0.0-20200622213623-75b288015ac9/go.mod 
h1:LzIPMQfyMNhhGPhUkYOs5KpL4U8rLKemX1yGLhDgUto=
-golang.org/x/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4=
-golang.org/x/crypto v0.49.0/go.mod 
h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA=
+golang.org/x/crypto v0.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
+golang.org/x/crypto v0.50.0/go.mod 
h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
 golang.org/x/exp v0.0.0-20190121172915-509febef88a4/go.mod 
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190306152737-a1d7652674e8/go.mod 
h1:CJ0aWSM057203Lf6IL+f9T1iT9GByDxfZKAQTCR3kQA=
 golang.org/x/exp v0.0.0-20190510132918-efd6b22b2522/go.mod 
h1:ZjyILWgesfNpC6sMxTJOJm9Kp84zZh5NQWvqDGG3Qr8=
@@ -500,8 +500,8 @@
 golang.org/x/mod v0.1.1-0.20191105210325-c90efee705ee/go.mod 
h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.1.1-0.20191107180719-034126e5016b/go.mod 
h1:QqPTAvyqsEbceGzBzNggFXnrqF1CaUcvgkdR5Ot7KZg=
 golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.34.0 h1:xIHgNUUnW6sYkcM5Jleh05DvLOtwc6RitGHbDk4akRI=
-golang.org/x/mod v0.34.0/go.mod h1:ykgH52iCZe79kzLLMhyCUzhMci+nQj+0XkbXpNYtVjY=
+golang.org/x/mod v0.35.0 h1:Ww1D637e6Pg+Zb2KrWfHQUnH2dQRLBQyAtpr/haaJeM=
+golang.org/x/mod v0.35.0/go.mod h1:+GwiRhIInF8wPm+4AoT6L0FA1QWAad3OMdTRx4tFYlU=
 golang.org/x/net v0.0.0-20180724234803-3673e40ba225/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20180826012351-8a410e7b638d/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
 golang.org/x/net v0.0.0-20190108225652-1e06a53dbb7e/go.mod 
h1:mL1N/T3taQHkDXs73rZJwtUhF3w3ftmwwsq0BUmARs4=
@@ -522,8 +522,8 @@
 golang.org/x/net v0.0.0-20200324143707-d3edc9973b7e/go.mod 
h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20200520182314-0ba52f642ac2/go.mod 
h1:qpuaurCH72eLCgpAm/N6yyVIVM9cpaDIP3A8BGJEC5A=
 golang.org/x/net v0.0.0-20201110031124-69a78807bb2b/go.mod 
h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
-golang.org/x/net v0.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
-golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
+golang.org/x/net v0.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
+golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
 golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod 
h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U=
 golang.org/x/oauth2 v0.0.0-20190226205417-e64efc72b421/go.mod 
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
 golang.org/x/oauth2 v0.0.0-20190604053449-0f29369cfe45/go.mod 
h1:gOpvHmFTYa4IltrdGE7lF6nIHvwfUNPOp7c8zoXwtLw=
@@ -562,19 +562,19 @@
 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.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=
-golang.org/x/telemetry v0.0.0-20260311193753-579e4da9a98c/go.mod 
h1:TpUTTEp9frx7rTdLpC9gFG9kdI7zVLFTFFlqaH2Cncw=
-golang.org/x/term v0.41.0 h1:QCgPso/Q3RTJx2Th4bDLqML4W6iJiaXFq2/ftQF13YU=
-golang.org/x/term v0.41.0/go.mod 
h1:3pfBgksrReYfZ5lvYM0kSO0LIkAl4Yl2bXOkKP7Ec2A=
+golang.org/x/sys v0.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
+golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa 
h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4=
+golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod 
h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE=
+golang.org/x/term v0.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
+golang.org/x/term v0.42.0/go.mod 
h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
 golang.org/x/text v0.0.0-20170915032832-14c0d48ead0c/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.0/go.mod h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.1-0.20180807135948-17ff2d5776d2/go.mod 
h1:NqM8EUOU14njkJ3fqMW+pc6Ldnwhi/IjpwHt7yyuwOQ=
 golang.org/x/text v0.3.2/go.mod h1:bEr9sfX3Q8Zfm5fL9x+3itogRgK3+ptLWKqgva+5dAk=
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
-golang.org/x/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=
-golang.org/x/text v0.35.0/go.mod 
h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=
+golang.org/x/text v0.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
+golang.org/x/text v0.36.0/go.mod 
h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
 golang.org/x/time v0.0.0-20181108054448-85acf8d2951c/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20190308202827-9d24e82272b4/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
 golang.org/x/time v0.0.0-20191024005414-555d28b269f0/go.mod 
h1:tRJNPiyCQ0inRvYxbN9jk5I+vvW/OXSQhTDSoE431IQ=
@@ -610,8 +610,8 @@
 golang.org/x/tools v0.0.0-20200212150539-ea181f53ac56/go.mod 
h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200224181240-023911ca70b2/go.mod 
h1:TB2adYChydJhpapKDTa4BR/hXlZSLoq2Wpct/0txZ28=
 golang.org/x/tools v0.0.0-20200331025713-a30bf2db82d4/go.mod 
h1:Sl4aGygMT6LrqrWclx+PTx3U+LnKx/seiNR+3G19Ar8=
-golang.org/x/tools v0.43.0 h1:12BdW9CeB3Z+J/I/wj34VMl8X+fEXBxVR90JeMX5E7s=
-golang.org/x/tools v0.43.0/go.mod 
h1:uHkMso649BX2cZK6+RpuIPXS3ho2hZo4FVwfoy1vIk0=
+golang.org/x/tools v0.44.0 h1:UP4ajHPIcuMjT1GqzDWRlalUEoY+uzoZKnhOjbIPD2c=
+golang.org/x/tools v0.44.0/go.mod 
h1:KA0AfVErSdxRZIsOVipbv3rQhVXTnlU6UhKxHd1seDI=
 golang.org/x/tools/go/expect v0.1.1-deprecated 
h1:jpBZDwmgPhXsKZC6WhL20P4b/wmnpsEAGHaNy0n/rJM=
 golang.org/x/tools/go/expect v0.1.1-deprecated/go.mod 
h1:eihoPOH+FgIqa3FpoTwguz/bVUSGBlGQU67vpBeOrBY=
 golang.org/x/tools/go/packages/packagestest v0.1.1-deprecated 
h1:1h2MnaIAIXISqTFKdENegdpAgUXz6NrPEsbIeWaBRvM=
@@ -710,8 +710,8 @@
 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=
-helm.sh/helm/v3 v3.20.1 h1:T8PodUaH1UwNvE+imUA2mIKjJItY8g7CVvLVP5g4NzI=
-helm.sh/helm/v3 v3.20.1/go.mod h1:Fl1kBaWCpkUrM6IYXPjQ3bdZQfFrogKArqptvueZ6Ww=
+helm.sh/helm/v3 v3.20.2 h1:binM4rvPx5DcNsa1sIt7UZi55lRbu3pZUFmQkSoRh48=
+helm.sh/helm/v3 v3.20.2/go.mod h1:Fl1kBaWCpkUrM6IYXPjQ3bdZQfFrogKArqptvueZ6Ww=
 honnef.co/go/tools v0.0.0-20190102054323-c2f93a96b099/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190106161140-3f1c8253044a/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 honnef.co/go/tools v0.0.0-20190418001031-e561f6794a2a/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/pkg/inject/inject.go 
new/linkerd-cli-edge-26.4.3/pkg/inject/inject.go
--- old/linkerd-cli-edge-26.4.2/pkg/inject/inject.go    2026-04-09 
21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/pkg/inject/inject.go    2026-04-15 
19:26:10.000000000 +0200
@@ -11,6 +11,7 @@
        "net"
        "reflect"
        "regexp"
+       "slices"
        "sort"
        "strconv"
        "strings"
@@ -79,6 +80,7 @@
                k8s.ProxyDisableOutboundProtocolDetectTimeout,
                k8s.ProxyDisableInboundProtocolDetectTimeout,
                k8s.ProxyEnableNativeSidecarAnnotationBeta,
+               k8s.ProxyAdditionalEnvAnnotation,
        }
        // ProxyAlphaConfigAnnotations is the list of all alpha configuration
        // (config.alpha prefix) that can be applied to a pod or namespace.
@@ -201,9 +203,67 @@
        }
 
        ApplyAnnotationOverrides(copyValues, rc.GetAnnotationOverrides(), 
rc.GetLabelOverrides(), namedPorts)
+       MergeAdditionalEnv(copyValues, rc.GetNsAnnotations(), 
rc.GetWorkloadAnnotations())
        return copyValues, nil
 }
 
+// parseAdditionalEnvAnnotation parses a JSON-encoded list of Kubernetes EnvVar
+// objects from the given annotation value. Returns nil if the value is empty.
+func parseAdditionalEnvAnnotation(value string) ([]corev1.EnvVar, error) {
+       if value == "" {
+               return nil, nil
+       }
+       var envVars []corev1.EnvVar
+       if err := json.Unmarshal([]byte(value), &envVars); err != nil {
+               return nil, fmt.Errorf("invalid JSON in %s annotation: %w", 
k8s.ProxyAdditionalEnvAnnotation, err)
+       }
+       return envVars, nil
+}
+
+// mergeEnvByName merges src into dst by env var name. Entries in src with
+// the same name as an entry in dst replace it; new entries are appended.
+func mergeEnvByName(dst, src []corev1.EnvVar) []corev1.EnvVar {
+       if len(src) == 0 {
+               return dst
+       }
+       result := slices.Clone(dst)
+       for _, s := range src {
+               if i := slices.IndexFunc(result, func(e corev1.EnvVar) bool { 
return e.Name == s.Name }); i >= 0 {
+                       result[i] = s
+               } else {
+                       result = append(result, s)
+               }
+       }
+       return result
+}
+
+// MergeAdditionalEnv merges proxy additional env vars from three layers:
+// 1. proxy.additionalEnv from Helm values (already in 
values.Proxy.AdditionalEnv)
+// 2. Namespace-level proxy-additional-env annotation
+// 3. Workload-level proxy-additional-env annotation
+// Higher-precedence layers override entries with the same env var name.
+func MergeAdditionalEnv(values *l5dcharts.Values, nsAnnotations 
map[string]string, workloadAnnotations map[string]string) {
+       nsEnvStr := nsAnnotations[k8s.ProxyAdditionalEnvAnnotation]
+       if nsEnvStr != "" {
+               nsEnv, err := parseAdditionalEnvAnnotation(nsEnvStr)
+               if err != nil {
+                       log.Warnf("%s", err)
+               } else {
+                       values.Proxy.AdditionalEnv = 
mergeEnvByName(values.Proxy.AdditionalEnv, nsEnv)
+               }
+       }
+
+       wlEnvStr := workloadAnnotations[k8s.ProxyAdditionalEnvAnnotation]
+       if wlEnvStr != "" {
+               wlEnv, err := parseAdditionalEnvAnnotation(wlEnvStr)
+               if err != nil {
+                       log.Warnf("%s", err)
+               } else {
+                       values.Proxy.AdditionalEnv = 
mergeEnvByName(values.Proxy.AdditionalEnv, wlEnv)
+               }
+       }
+}
+
 func ApplyAnnotationOverrides(values *l5dcharts.Values, annotations 
map[string]string, labels map[string]string, namedPorts map[string]int32) {
        if override, ok := annotations[k8s.ProxyInjectAnnotation]; ok {
                if override == k8s.ProxyInjectIngress {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/pkg/inject/inject_test.go 
new/linkerd-cli-edge-26.4.3/pkg/inject/inject_test.go
--- old/linkerd-cli-edge-26.4.2/pkg/inject/inject_test.go       2026-04-09 
21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/pkg/inject/inject_test.go       2026-04-15 
19:26:10.000000000 +0200
@@ -404,6 +404,118 @@
        }
 }
 
+func TestMergeAdditionalEnv(t *testing.T) {
+       testCases := []struct {
+               id                  string
+               helmAdditionalEnv   []corev1.EnvVar
+               nsAnnotations       map[string]string
+               workloadAnnotations map[string]string
+               expected            []corev1.EnvVar
+       }{
+               {
+                       id: "no annotations, helm only",
+                       helmAdditionalEnv: []corev1.EnvVar{
+                               {Name: "FOO", Value: "helm"},
+                       },
+                       nsAnnotations:       map[string]string{},
+                       workloadAnnotations: map[string]string{},
+                       expected: []corev1.EnvVar{
+                               {Name: "FOO", Value: "helm"},
+                       },
+               },
+               {
+                       id:                "namespace annotation adds env vars",
+                       helmAdditionalEnv: nil,
+                       nsAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"BAR","value":"ns"}]`,
+                       },
+                       workloadAnnotations: map[string]string{},
+                       expected: []corev1.EnvVar{
+                               {Name: "BAR", Value: "ns"},
+                       },
+               },
+               {
+                       id:                "workload overrides namespace by 
name",
+                       helmAdditionalEnv: nil,
+                       nsAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"BACKLOG","value":"4096"},{"name":"OTHER","value":"ns"}]`,
+                       },
+                       workloadAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"BACKLOG","value":"8192"}]`,
+                       },
+                       expected: []corev1.EnvVar{
+                               {Name: "BACKLOG", Value: "8192"},
+                               {Name: "OTHER", Value: "ns"},
+                       },
+               },
+               {
+                       id: "three-layer merge: helm < namespace < workload",
+                       helmAdditionalEnv: []corev1.EnvVar{
+                               {Name: "A", Value: "helm"},
+                               {Name: "B", Value: "helm"},
+                       },
+                       nsAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"B","value":"ns"},{"name":"C","value":"ns"}]`,
+                       },
+                       workloadAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"C","value":"wl"}]`,
+                       },
+                       expected: []corev1.EnvVar{
+                               {Name: "A", Value: "helm"},
+                               {Name: "B", Value: "ns"},
+                               {Name: "C", Value: "wl"},
+                       },
+               },
+               {
+                       id:                "invalid JSON in namespace is 
skipped",
+                       helmAdditionalEnv: nil,
+                       nsAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: `not-json`,
+                       },
+                       workloadAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"OK","value":"wl"}]`,
+                       },
+                       expected: []corev1.EnvVar{
+                               {Name: "OK", Value: "wl"},
+                       },
+               },
+               {
+                       id:                "invalid JSON in workload is 
skipped",
+                       helmAdditionalEnv: nil,
+                       nsAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"NS","value":"ok"}]`,
+                       },
+                       workloadAnnotations: map[string]string{
+                               k8s.ProxyAdditionalEnvAnnotation: `{bad`,
+                       },
+                       expected: []corev1.EnvVar{
+                               {Name: "NS", Value: "ok"},
+                       },
+               },
+               {
+                       id:                  "no annotations and no helm",
+                       helmAdditionalEnv:   nil,
+                       nsAnnotations:       map[string]string{},
+                       workloadAnnotations: map[string]string{},
+                       expected:            nil,
+               },
+       }
+
+       for _, tc := range testCases {
+               t.Run(tc.id, func(t *testing.T) {
+                       values := &l5dcharts.Values{
+                               Proxy: &l5dcharts.Proxy{
+                                       AdditionalEnv: tc.helmAdditionalEnv,
+                               },
+                       }
+                       MergeAdditionalEnv(values, tc.nsAnnotations, 
tc.workloadAnnotations)
+                       if diff := deep.Equal(values.Proxy.AdditionalEnv, 
tc.expected); diff != nil {
+                               t.Errorf("%+v", diff)
+                       }
+               })
+       }
+}
+
 func TestWholeCPUCores(t *testing.T) {
        for _, c := range []struct {
                v string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/pkg/k8s/labels.go 
new/linkerd-cli-edge-26.4.3/pkg/k8s/labels.go
--- old/linkerd-cli-edge-26.4.2/pkg/k8s/labels.go       2026-04-09 
21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/pkg/k8s/labels.go       2026-04-15 
19:26:10.000000000 +0200
@@ -323,6 +323,16 @@
        // graceful shutdowns in the proxy.
        ProxyShutdownGracePeriodAnnotation = ProxyConfigAnnotationsPrefix + 
"/shutdown-grace-period"
 
+       // ProxyAdditionalEnvAnnotation allows setting additional proxy 
environment
+       // variables via a JSON-encoded list of Kubernetes EnvVar objects.
+       // Unlike other override annotations, this annotation is not inherited
+       // wholesale from the namespace. Instead, env vars are merged by name
+       // across three layers with increasing precedence:
+       // Helm proxy.additionalEnv < namespace annotation < workload 
annotation.
+       // Entries from higher-precedence layers override entries with the same
+       // env var name rather than replacing the entire list.
+       ProxyAdditionalEnvAnnotation = ProxyConfigAnnotationsPrefix + 
"/proxy-additional-env"
+
        /*
         * Component Names
         */
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/linkerd-cli-edge-26.4.2/test/integration/install/inject/inject_test.go 
new/linkerd-cli-edge-26.4.3/test/integration/install/inject/inject_test.go
--- old/linkerd-cli-edge-26.4.2/test/integration/install/inject/inject_test.go  
2026-04-09 21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/test/integration/install/inject/inject_test.go  
2026-04-15 19:26:10.000000000 +0200
@@ -222,6 +222,7 @@
                k8s.ProxyInjectAnnotation:        k8s.ProxyInjectEnabled,
                k8s.ProxyCPURequestAnnotation:    nsProxyCPUReq,
                k8s.ProxyMemoryRequestAnnotation: nsProxyMemReq,
+               k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"NS_VAR","value":"ns_val"},{"name":"SHARED_VAR","value":"from_ns"}]`,
        }
 
        ctx := context.Background()
@@ -230,7 +231,8 @@
                // Pod Level proxy configuration override
                podProxyCPUReq := "600m"
                podAnnotations := map[string]string{
-                       k8s.ProxyCPURequestAnnotation: podProxyCPUReq,
+                       k8s.ProxyCPURequestAnnotation:    podProxyCPUReq,
+                       k8s.ProxyAdditionalEnvAnnotation: 
`[{"name":"POD_VAR","value":"pod_val"},{"name":"SHARED_VAR","value":"from_pod"}]`,
                }
 
                patchedYAML, err := testutil.PatchDeploy(injectYAML, 
deployName, podAnnotations)
@@ -267,6 +269,22 @@
                if proxyContainer.Resources.Requests["cpu"] != 
resource.MustParse(podProxyCPUReq) {
                        testutil.Fatalf(t, "proxy cpu resource request failed 
to match with pod level override")
                }
+
+               // Match proxy-additional-env merge semantics: ns sets 
NS_VAR+SHARED_VAR,
+               // pod sets POD_VAR+SHARED_VAR; pod takes precedence for 
SHARED_VAR
+               envMap := make(map[string]string)
+               for _, e := range proxyContainer.Env {
+                       envMap[e.Name] = e.Value
+               }
+               if envMap["NS_VAR"] != "ns_val" {
+                       testutil.Fatalf(t, "proxy NS_VAR failed to match 
namespace-level proxy-additional-env annotation")
+               }
+               if envMap["POD_VAR"] != "pod_val" {
+                       testutil.Fatalf(t, "proxy POD_VAR failed to match 
pod-level proxy-additional-env annotation")
+               }
+               if envMap["SHARED_VAR"] != "from_pod" {
+                       testutil.Fatalf(t, "proxy SHARED_VAR failed to be 
overridden by pod-level proxy-additional-env annotation")
+               }
        })
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.4.2/testutil/inject.go 
new/linkerd-cli-edge-26.4.3/testutil/inject.go
--- old/linkerd-cli-edge-26.4.2/testutil/inject.go      2026-04-09 
21:36:43.000000000 +0200
+++ new/linkerd-cli-edge-26.4.3/testutil/inject.go      2026-04-15 
19:26:10.000000000 +0200
@@ -38,7 +38,7 @@
                ops = append(ops, `{"op": "add", "path": 
"/spec/template/metadata/annotations", "value": {}}`)
                for k, v := range annotations {
                        ops = append(ops,
-                               fmt.Sprintf(`{"op": "add", "path": 
"/spec/template/metadata/annotations/%s", "value": "%s"}`, 
strings.ReplaceAll(k, "/", "~1"), v),
+                               fmt.Sprintf(`{"op": "add", "path": 
"/spec/template/metadata/annotations/%s", "value": %q}`, strings.ReplaceAll(k, 
"/", "~1"), v),
                        )
                }
        }

++++++ linkerd-cli-edge.obsinfo ++++++
--- /var/tmp/diff_new_pack.OwDmMt/_old  2026-04-18 21:39:05.316247415 +0200
+++ /var/tmp/diff_new_pack.OwDmMt/_new  2026-04-18 21:39:05.324247742 +0200
@@ -1,5 +1,5 @@
 name: linkerd-cli-edge
-version: 26.4.2
-mtime: 1775763403
-commit: cda7b5cbafb58d3aeab313e3f5fc51c0e63e1a5b
+version: 26.4.3
+mtime: 1776273970
+commit: 8ca8bbcfdc58e6433925c617529d39bf48b777c3
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/linkerd-cli-edge/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.11940/vendor.tar.gz differ: 
char 13, line 1

Reply via email to