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-01-15 16:47:49
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/linkerd-cli-edge (Old)
 and      /work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.1928 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "linkerd-cli-edge"

Thu Jan 15 16:47:49 2026 rev:63 rq:1327323 version:26.1.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/linkerd-cli-edge/linkerd-cli-edge.changes        
2026-01-12 10:34:44.922645997 +0100
+++ 
/work/SRC/openSUSE:Factory/.linkerd-cli-edge.new.1928/linkerd-cli-edge.changes  
    2026-01-15 16:49:19.019854427 +0100
@@ -1,0 +2,12 @@
+Thu Jan 15 05:57:07 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 26.1.2:
+  No CLI-related changes in the changelog
+  Dependencies
+  * build(deps-dev): bump webpack-bundle-analyzer in /web/app
+    (#14845)
+  * build(deps): bump golang.org/x/tools from 0.40.0 to 0.41.0
+    (#14847)
+  * build(deps): bump actions/setup-go from 6.1.0 to 6.2.0 (#14848)
+
+-------------------------------------------------------------------
@@ -4,0 +17,2 @@
+  No CLI-related changes in the changelog
+  Dependencies

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

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

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

Other differences:
------------------
++++++ linkerd-cli-edge.spec ++++++
--- /var/tmp/diff_new_pack.Cwouyy/_old  2026-01-15 16:49:20.819927420 +0100
+++ /var/tmp/diff_new_pack.Cwouyy/_new  2026-01-15 16:49:20.835928069 +0100
@@ -19,7 +19,7 @@
 %define linkerd_executable_name linkerd
 
 Name:           linkerd-cli-edge
-Version:        26.1.1
+Version:        26.1.2
 Release:        0
 Summary:        CLI for the linkerd service mesh for Kubernetes
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Cwouyy/_old  2026-01-15 16:49:21.043936504 +0100
+++ /var/tmp/diff_new_pack.Cwouyy/_new  2026-01-15 16:49:21.067937477 +0100
@@ -3,8 +3,8 @@
     <param name="url">https://github.com/linkerd/linkerd2</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">edge-26.1.1</param>
-    <param name="match-tag">edge-26.1.1</param>
+    <param name="revision">edge-26.1.2</param>
+    <param name="match-tag">edge-*.*.*</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">edge-(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Cwouyy/_old  2026-01-15 16:49:21.231944128 +0100
+++ /var/tmp/diff_new_pack.Cwouyy/_new  2026-01-15 16:49:21.247944777 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param name="url">https://github.com/linkerd/linkerd2</param>
-              <param 
name="changesrevision">d22fbc715226f3836a39bb20ba8b7ad5e112027c</param></service></servicedata>
+              <param 
name="changesrevision">a2b1189358ba9ff413c8421506a93b400be91c48</param></service></servicedata>
 (No newline at EOF)
 

++++++ linkerd-cli-edge-26.1.1.obscpio -> linkerd-cli-edge-26.1.2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/.proxy-version 
new/linkerd-cli-edge-26.1.2/.proxy-version
--- old/linkerd-cli-edge-26.1.1/.proxy-version  2026-01-06 15:35:53.000000000 
+0100
+++ new/linkerd-cli-edge-26.1.2/.proxy-version  2026-01-14 15:45:20.000000000 
+0100
@@ -1 +1 @@
-v2.335.0
+v2.336.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/go.mod 
new/linkerd-cli-edge-26.1.2/go.mod
--- old/linkerd-cli-edge-26.1.1/go.mod  2026-01-06 15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/go.mod  2026-01-14 15:45:20.000000000 +0100
@@ -35,7 +35,7 @@
        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.40.0
+       golang.org/x/tools v0.41.0
        google.golang.org/grpc v1.78.0
        google.golang.org/grpc/cmd/protoc-gen-go-grpc v1.6.0
        google.golang.org/protobuf v1.36.11
@@ -56,7 +56,7 @@
 
 require (
        github.com/golang-jwt/jwt/v5 v5.3.0 // indirect
-       golang.org/x/net v0.48.0 // indirect
+       golang.org/x/net v0.49.0 // indirect
 )
 
 require (
@@ -141,14 +141,14 @@
        go.opentelemetry.io/otel/trace v1.38.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.46.0 // indirect
-       golang.org/x/mod v0.31.0 // indirect
+       golang.org/x/crypto v0.47.0 // indirect
+       golang.org/x/mod v0.32.0 // indirect
        golang.org/x/oauth2 v0.34.0 // indirect
        golang.org/x/sync v0.19.0 // indirect
-       golang.org/x/sys v0.39.0 // indirect
-       golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect
-       golang.org/x/term v0.38.0 // indirect
-       golang.org/x/text v0.32.0 // indirect
+       golang.org/x/sys v0.40.0 // indirect
+       golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 // indirect
+       golang.org/x/term v0.39.0 // indirect
+       golang.org/x/text v0.33.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.1.1/go.sum 
new/linkerd-cli-edge-26.1.2/go.sum
--- old/linkerd-cli-edge-26.1.1/go.sum  2026-01-06 15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/go.sum  2026-01-14 15:45:20.000000000 +0100
@@ -470,8 +470,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.46.0 h1:cKRW/pmt1pKAfetfu+RCEvjvZkA9RimPbh7bhFjGVBU=
-golang.org/x/crypto v0.46.0/go.mod 
h1:Evb/oLKmMraqjZ2iQTwDwvCtJkczlDuTmdJXoZVzqU0=
+golang.org/x/crypto v0.47.0 h1:V6e3FRj+n4dbpw86FJ8Fv7XVOql7TEwpHapKoMJ/GO8=
+golang.org/x/crypto v0.47.0/go.mod 
h1:ff3Y9VzzKbwSSEzWqJsJVBnWmRwRSHt/6Op5n9bQc4A=
 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=
@@ -501,8 +501,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.31.0 h1:HaW9xtz0+kOcWKwli0ZXy79Ix+UW/vOfmWI5QVd2tgI=
-golang.org/x/mod v0.31.0/go.mod h1:43JraMp9cGx1Rx3AqioxrbrhNsLl2l/iNAvuBkrezpg=
+golang.org/x/mod v0.32.0 h1:9F4d3PHLljb6x//jOyokMv3eX+YDeepZSEo3mFJy93c=
+golang.org/x/mod v0.32.0/go.mod h1:SgipZ/3h2Ci89DlEtEXWUk/HteuRin+HHhN+WbNhguU=
 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=
@@ -523,8 +523,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.48.0 h1:zyQRTTrjc33Lhh0fBgT/H3oZq9WuvRR5gPC70xpDiQU=
-golang.org/x/net v0.48.0/go.mod h1:+ndRgGjkh8FGtu1w1FGbEC31if4VrNVMuKTgcAAnQRY=
+golang.org/x/net v0.49.0 h1:eeHFmOGUTtaaPSGNmjBKpbng9MulQsJURQUAfUwY++o=
+golang.org/x/net v0.49.0/go.mod h1:/ysNB2EvaqvesRkuLAyjI1ycPZlQHM3q01F02UY/MV8=
 golang.org/x/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=
@@ -566,19 +566,19 @@
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.0.0-20220811171246-fbc7d0a398ab/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.39.0 h1:CvCKL8MeisomCi6qNZ+wbb0DN9E5AATixKsvNtMoMFk=
-golang.org/x/sys v0.39.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
-golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc 
h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA=
-golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod 
h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ=
-golang.org/x/term v0.38.0 h1:PQ5pkm/rLO6HnxFR7N2lJHOZX6Kez5Y1gDSJla6jo7Q=
-golang.org/x/term v0.38.0/go.mod 
h1:bSEAKrOT1W+VSu9TSCMtoGEOUcKxOKgl3LE5QEF/xVg=
+golang.org/x/sys v0.40.0 h1:DBZZqJ2Rkml6QMQsZywtnjnnGvHza6BTfYFWY9kjEWQ=
+golang.org/x/sys v0.40.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks=
+golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2 
h1:O1cMQHRfwNpDfDJerqRoE2oD+AFlyid87D40L/OkkJo=
+golang.org/x/telemetry v0.0.0-20260109210033-bd525da824e2/go.mod 
h1:b7fPSJ0pKZ3ccUh8gnTONJxhn3c/PS6tyzQvyqw4iA8=
+golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
+golang.org/x/term v0.39.0/go.mod 
h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
 golang.org/x/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.32.0 h1:ZD01bjUt1FQ9WJ0ClOL5vxgxOI/sVCNgX1YtKwcY0mU=
-golang.org/x/text v0.32.0/go.mod 
h1:o/rUWzghvpD5TXrTIBuJU77MTaN0ljMWE47kxGJQ7jY=
+golang.org/x/text v0.33.0 h1:B3njUFyqtHDUI5jMn1YIr5B0IE2U0qck04r6d4KPAxE=
+golang.org/x/text v0.33.0/go.mod 
h1:LuMebE6+rBincTi9+xWTY8TztLzKHc/9C1uBCG27+q8=
 golang.org/x/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=
@@ -614,8 +614,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.40.0 h1:yLkxfA+Qnul4cs9QA3KnlFu0lVmd8JJfoq+E41uSutA=
-golang.org/x/tools v0.40.0/go.mod 
h1:Ik/tzLRlbscWpqqMRjyWYDisX8bG13FrdXp3o4Sr9lc=
+golang.org/x/tools v0.41.0 h1:a9b8iMweWG+S0OBnlU36rzLp20z1Rp10w+IY2czHTQc=
+golang.org/x/tools v0.41.0/go.mod 
h1:XSY6eDqxVNiYgezAVqqCeihT4j1U2CCsqvH3WhQpnlg=
 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=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/linkerd-cli-edge-26.1.1/policy-controller/runtime/src/args.rs 
new/linkerd-cli-edge-26.1.2/policy-controller/runtime/src/args.rs
--- old/linkerd-cli-edge-26.1.1/policy-controller/runtime/src/args.rs   
2026-01-06 15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/policy-controller/runtime/src/args.rs   
2026-01-14 15:45:20.000000000 +0100
@@ -10,8 +10,10 @@
 use anyhow::{bail, Result};
 use clap::Parser;
 use futures::prelude::*;
-use kube::runtime::watcher;
+use kube::{core::DeserializeGuard, runtime::watcher, ResourceExt};
 use prometheus_client::registry::Registry;
+use serde::de::DeserializeOwned;
+use std::fmt::Debug;
 use std::{net::SocketAddr, sync::Arc};
 use tokio::{sync::mpsc, time::Duration};
 use tonic::transport::Server;
@@ -200,21 +202,26 @@
 
         // Spawn resource watches.
 
-        let pods = runtime.watch_all::<k8s::Pod>(
+        let pods = guarded_watch::<k8s::Pod, _>(
+            &mut runtime,
             watcher::Config::default().labels("linkerd.io/control-plane-ns"),
         );
+
         tokio::spawn(
             kubert::index::namespaced(inbound_index.clone(), 
pods).instrument(info_span!("pods")),
         );
 
-        let external_workloads = runtime
-            
.watch_all::<k8s::external_workload::ExternalWorkload>(watcher::Config::default());
+        let external_workloads = 
guarded_watch::<k8s::external_workload::ExternalWorkload, _>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         tokio::spawn(
             kubert::index::namespaced(inbound_index.clone(), 
external_workloads)
                 .instrument(info_span!("external_workloads")),
         );
 
-        let servers = 
runtime.watch_all::<k8s::policy::Server>(watcher::Config::default());
+        let servers =
+            guarded_watch::<k8s::policy::Server, _>(&mut runtime, 
watcher::Config::default());
         let servers_indexes = IndexList::new(inbound_index.clone())
             .push(status_index.clone())
             .shared();
@@ -222,36 +229,46 @@
             kubert::index::namespaced(servers_indexes, 
servers).instrument(info_span!("servers")),
         );
 
-        let server_authzs =
-            
runtime.watch_all::<k8s::policy::ServerAuthorization>(watcher::Config::default());
+        let server_authzs = guarded_watch::<k8s::policy::ServerAuthorization, 
_>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         tokio::spawn(
             kubert::index::namespaced(inbound_index.clone(), server_authzs)
                 .instrument(info_span!("serverauthorizations")),
         );
 
-        let authz_policies =
-            
runtime.watch_all::<k8s::policy::AuthorizationPolicy>(watcher::Config::default());
+        let authz_policies = guarded_watch::<k8s::policy::AuthorizationPolicy, 
_>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         tokio::spawn(
             kubert::index::namespaced(inbound_index.clone(), authz_policies)
                 .instrument(info_span!("authorizationpolicies")),
         );
 
-        let mtls_authns =
-            
runtime.watch_all::<k8s::policy::MeshTLSAuthentication>(watcher::Config::default());
+        let mtls_authns = guarded_watch::<k8s::policy::MeshTLSAuthentication, 
_>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         tokio::spawn(
             kubert::index::namespaced(inbound_index.clone(), mtls_authns)
                 .instrument(info_span!("meshtlsauthentications")),
         );
 
-        let network_authns =
-            
runtime.watch_all::<k8s::policy::NetworkAuthentication>(watcher::Config::default());
+        let network_authns = 
guarded_watch::<k8s::policy::NetworkAuthentication, _>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         tokio::spawn(
             kubert::index::namespaced(inbound_index.clone(), network_authns)
                 .instrument(info_span!("networkauthentications")),
         );
 
-        let ratelimit_policies =
-            
runtime.watch_all::<k8s::policy::HttpLocalRateLimitPolicy>(watcher::Config::default());
+        let ratelimit_policies = 
guarded_watch::<k8s::policy::HttpLocalRateLimitPolicy, _>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         let ratelimit_policies_indexes = IndexList::new(inbound_index.clone())
             .push(status_index.clone())
             .shared();
@@ -266,8 +283,10 @@
             .shared();
 
         if 
api_resource_exists::<k8s::policy::HttpRoute>(&runtime.client()).await {
-            let http_routes =
-                
runtime.watch_all::<k8s::policy::HttpRoute>(watcher::Config::default());
+            let http_routes = guarded_watch::<k8s::policy::HttpRoute, _>(
+                &mut runtime,
+                watcher::Config::default(),
+            );
 
             tokio::spawn(
                 kubert::index::namespaced(http_routes_indexes.clone(), 
http_routes)
@@ -281,7 +300,7 @@
 
         if api_resource_exists::<gateway::HTTPRoute>(&runtime.client()).await {
             let gateway_http_routes =
-                
runtime.watch_all::<gateway::HTTPRoute>(watcher::Config::default());
+                guarded_watch::<gateway::HTTPRoute, _>(&mut runtime, 
watcher::Config::default());
             tokio::spawn(
                 kubert::index::namespaced(http_routes_indexes, 
gateway_http_routes)
                     
.instrument(info_span!("httproutes.gateway.networking.k8s.io")),
@@ -294,7 +313,7 @@
 
         if api_resource_exists::<gateway::GRPCRoute>(&runtime.client()).await {
             let gateway_grpc_routes =
-                
runtime.watch_all::<gateway::GRPCRoute>(watcher::Config::default());
+                guarded_watch::<gateway::GRPCRoute, _>(&mut runtime, 
watcher::Config::default());
             let gateway_grpc_routes_indexes = 
IndexList::new(outbound_index.clone())
                 .push(inbound_index.clone())
                 .push(status_index.clone())
@@ -310,7 +329,8 @@
         }
 
         if api_resource_exists::<gateway::TLSRoute>(&runtime.client()).await {
-            let tls_routes = 
runtime.watch_all::<gateway::TLSRoute>(watcher::Config::default());
+            let tls_routes =
+                guarded_watch::<gateway::TLSRoute, _>(&mut runtime, 
watcher::Config::default());
             let tls_routes_indexes = IndexList::new(status_index.clone())
                 .push(outbound_index.clone())
                 .shared();
@@ -325,7 +345,8 @@
         }
 
         if api_resource_exists::<gateway::TCPRoute>(&runtime.client()).await {
-            let tcp_routes = 
runtime.watch_all::<gateway::TCPRoute>(watcher::Config::default());
+            let tcp_routes =
+                guarded_watch::<gateway::TCPRoute, _>(&mut runtime, 
watcher::Config::default());
             let tcp_routes_indexes = IndexList::new(status_index.clone())
                 .push(outbound_index.clone())
                 .shared();
@@ -339,7 +360,7 @@
             );
         }
 
-        let services = 
runtime.watch_all::<k8s::Service>(watcher::Config::default());
+        let services = guarded_watch::<k8s::Service, _>(&mut runtime, 
watcher::Config::default());
         let services_indexes = IndexList::new(outbound_index.clone())
             .push(status_index.clone())
             .shared();
@@ -348,8 +369,10 @@
                 .instrument(info_span!("services")),
         );
 
-        let egress_networks =
-            
runtime.watch_all::<k8s::policy::EgressNetwork>(watcher::Config::default());
+        let egress_networks = guarded_watch::<k8s::policy::EgressNetwork, _>(
+            &mut runtime,
+            watcher::Config::default(),
+        );
         let egress_networks_indexes = IndexList::new(status_index.clone())
             .push(outbound_index.clone())
             .shared();
@@ -477,3 +500,46 @@
         .flat_map(|r| r.resources.iter())
         .any(|r| r.kind == T::kind(&dt))
 }
+
+// A watch that uses DeserializeGuard to skip resources which fail to 
deserialize.
+// Any deserialization errors are logged as warnings and the event is skipped.
+fn guarded_watch<R, T>(
+    runtime: &mut kubert::Runtime<T>,
+    watcher_config: watcher::Config,
+) -> impl Stream<Item = watcher::Event<R>>
+where
+    R: Resource + DeserializeOwned + Clone + Debug + Send + 'static,
+    R::DynamicType: Default,
+{
+    runtime
+        .watch_all::<DeserializeGuard<R>>(watcher_config)
+        .filter_map(async |item| {
+            let log_warning = |t: &DeserializeGuard<R>| {
+                if let Err(ref err) = t.0 {
+                    tracing::warn!(
+                        "skipping invalid {} resource {}/{}: {}",
+                        R::kind(&Default::default()),
+                        t.namespace().unwrap_or("<cluster>".to_string()),
+                        t.name_any(),
+                        err,
+                    );
+                }
+            };
+            match item {
+                watcher::Event::Apply(t) => {
+                    log_warning(&t);
+                    t.0.ok().map(watcher::Event::Apply)
+                }
+                watcher::Event::Delete(t) => {
+                    log_warning(&t);
+                    t.0.ok().map(watcher::Event::Delete)
+                }
+                watcher::Event::Init => Some(watcher::Event::<R>::Init),
+                watcher::Event::InitApply(t) => {
+                    log_warning(&t);
+                    t.0.ok().map(watcher::Event::InitApply)
+                }
+                watcher::Event::InitDone => 
Some(watcher::Event::<R>::InitDone),
+            }
+        })
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/policy-test/src/curl.rs 
new/linkerd-cli-edge-26.1.2/policy-test/src/curl.rs
--- old/linkerd-cli-edge-26.1.1/policy-test/src/curl.rs 2026-01-06 
15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/policy-test/src/curl.rs 2026-01-14 
15:45:20.000000000 +0100
@@ -338,12 +338,17 @@
             |pod: Option<&k8s::Pod>| -> bool {
                 if let Some(pod) = pod {
                     if let Some(status) = pod.status.as_ref() {
-                        return 
status.init_container_statuses.iter().flatten().all(|init| {
-                            init.state
-                                .as_ref()
-                                .map(|s| s.terminated.is_some())
-                                .unwrap_or(false)
-                        });
+                        return status
+                            .init_container_statuses
+                            .iter()
+                            .flatten()
+                            .filter(|init| init.name != "linkerd-proxy")
+                            .all(|init| {
+                                init.state
+                                    .as_ref()
+                                    .map(|s| s.terminated.is_some())
+                                    .unwrap_or(false)
+                            });
                     }
                 }
                 false
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/linkerd-cli-edge-26.1.1/test/integration/install/inject/inject_test.go 
new/linkerd-cli-edge-26.1.2/test/integration/install/inject/inject_test.go
--- old/linkerd-cli-edge-26.1.1/test/integration/install/inject/inject_test.go  
2026-01-06 15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/test/integration/install/inject/inject_test.go  
2026-01-14 15:45:20.000000000 +0100
@@ -55,7 +55,7 @@
 
 func TestInjectManualParams(t *testing.T) {
        reg := "cr.l5d.io/linkerd"
-       if override := os.Getenv(flags.EnvOverrideDockerRegistry); reg != "" {
+       if override := os.Getenv(flags.EnvOverrideDockerRegistry); override != 
"" {
                reg = override
        }
 
@@ -78,28 +78,35 @@
                LogLevel:               "off",
                EnableExternalProfiles: true,
        }
-       flags, _ := injectionValidator.GetFlagsAndAnnotations()
 
-       // TODO: test config.linkerd.io/proxy-version
-       cmd := append([]string{"inject",
-               "--manual",
-       }, flags...)
+       for _, nativeSidecar := range []bool{false, true} {
+               t.Run(fmt.Sprintf("Testing manual injection with 
nativeSidecar=%v", nativeSidecar), func(t *testing.T) {
+                       injectionValidator.NativeSidecar = nativeSidecar
 
-       cmd = append(cmd, "testdata/inject_test.yaml")
+                       flags, _ := injectionValidator.GetFlagsAndAnnotations()
 
-       out, err := TestHelper.LinkerdRun(cmd...)
-       if err != nil {
-               testutil.AnnotatedFatal(t, "unexpected error", err)
-       }
+                       // TODO: test config.linkerd.io/proxy-version
+                       cmd := append([]string{"inject",
+                               "--manual",
+                       }, flags...)
 
-       deploy, err := parseDeployment(out)
-       if err != nil {
-               testutil.AnnotatedFatalf(t, "failed parsing deployment", 
"failed parsing deployment\n%s", err.Error())
-       }
+                       cmd = append(cmd, "testdata/inject_test.yaml")
 
-       err = injectionValidator.ValidatePod(&deploy.Spec.Template.Spec)
-       if err != nil {
-               testutil.AnnotatedFatalf(t, "received unexpected output", 
"received unexpected output\n%s", err.Error())
+                       out, err := TestHelper.LinkerdRun(cmd...)
+                       if err != nil {
+                               testutil.AnnotatedFatal(t, "unexpected error", 
err)
+                       }
+
+                       deploy, err := parseDeployment(out)
+                       if err != nil {
+                               testutil.AnnotatedFatalf(t, "failed parsing 
deployment", "failed parsing deployment\n%s", err.Error())
+                       }
+
+                       err = 
injectionValidator.ValidatePod(&deploy.Spec.Template.Spec)
+                       if err != nil {
+                               testutil.AnnotatedFatalf(t, "received 
unexpected output", "received unexpected output\n%s", err.Error())
+                       }
+               })
        }
 }
 
@@ -114,78 +121,88 @@
 
        ctx := context.Background()
 
-       TestHelper.WithDataPlaneNamespace(ctx, injectNS, map[string]string{}, 
t, func(t *testing.T, ns string) {
-               injectionValidator := testutil.InjectValidator{
-                       NoInitContainer:         TestHelper.CNI() || 
TestHelper.Calico(),
-                       AutoInject:              true,
-                       AdminPort:               8888,
-                       ControlPort:             8881,
-                       EnableExternalProfiles:  true,
-                       EnableDebug:             true,
-                       ImagePullPolicy:         "Never",
-                       InboundPort:             8882,
-                       OutboundPort:            8883,
-                       CPULimit:                "160m",
-                       CPURequest:              "150m",
-                       MemoryLimit:             "150Mi",
-                       MemoryRequest:           "100Mi",
-                       EphemeralStorageLimit:   "50Mi",
-                       EphemeralStorageRequest: "10Mi",
-                       Image:                   "proxy-image",
-                       LogLevel:                "proxy-log-level",
-                       UID:                     10,
-                       Version:                 "proxy-version",
-                       RequireIdentityOnPorts:  "8884,8885",
-                       OpaquePorts:             "8888,8889",
-                       OutboundConnectTimeout:  "888ms",
-                       InboundConnectTimeout:   "999ms",
-                       SkipOutboundPorts:       "1111,2222,3333",
-                       SkipInboundPorts:        "4444,5555,6666",
-                       WaitBeforeExitSeconds:   10,
-               }
+       injectionValidator := testutil.InjectValidator{
+               NoInitContainer:         TestHelper.CNI() || 
TestHelper.Calico(),
+               AutoInject:              true,
+               AdminPort:               8888,
+               ControlPort:             8881,
+               EnableExternalProfiles:  true,
+               EnableDebug:             true,
+               ImagePullPolicy:         "Never",
+               InboundPort:             8882,
+               OutboundPort:            8883,
+               CPULimit:                "160m",
+               CPURequest:              "150m",
+               MemoryLimit:             "150Mi",
+               MemoryRequest:           "100Mi",
+               EphemeralStorageLimit:   "50Mi",
+               EphemeralStorageRequest: "10Mi",
+               Image:                   "proxy-image",
+               LogLevel:                "proxy-log-level",
+               UID:                     10,
+               Version:                 "proxy-version",
+               RequireIdentityOnPorts:  "8884,8885",
+               OpaquePorts:             "8888,8889",
+               OutboundConnectTimeout:  "888ms",
+               InboundConnectTimeout:   "999ms",
+               SkipOutboundPorts:       "1111,2222,3333",
+               SkipInboundPorts:        "4444,5555,6666",
+               WaitBeforeExitSeconds:   10,
+       }
+
+       for _, nativeSidecar := range []bool{false, true} {
+               TestHelper.WithDataPlaneNamespace(ctx, fmt.Sprintf("%s-%v", 
injectNS, nativeSidecar), map[string]string{}, t, func(t *testing.T, ns string) 
{
+                       t.Run(fmt.Sprintf("Testing injection via webhook with 
nativeSidecar=%v", nativeSidecar), func(t *testing.T) {
+                               injectionValidator.NativeSidecar = nativeSidecar
+                               // proxy.nativeSidecar and 
waitBeforeExitSeconds cannot be used simultaneously
+                               if nativeSidecar {
+                                       
injectionValidator.WaitBeforeExitSeconds = 0
+                               }
 
-               _, annotations := injectionValidator.GetFlagsAndAnnotations()
+                               _, annotations := 
injectionValidator.GetFlagsAndAnnotations()
 
-               patchedYAML, err := testutil.PatchDeploy(injectYAML, 
deployName, annotations)
-               if err != nil {
-                       testutil.AnnotatedFatalf(t, "failed to patch inject 
test YAML",
-                               "failed to patch inject test YAML in namespace 
%s for deploy/%s: %s", ns, deployName, err)
-               }
+                               patchedYAML, err := 
testutil.PatchDeploy(injectYAML, deployName, annotations)
+                               if err != nil {
+                                       testutil.AnnotatedFatalf(t, "failed to 
patch inject test YAML",
+                                               "failed to patch inject test 
YAML in namespace %s for deploy/%s: %s", ns, deployName, err)
+                               }
 
-               o, err := TestHelper.Kubectl(patchedYAML, "--namespace", ns, 
"create", "-f", "-")
-               if err != nil {
-                       testutil.AnnotatedFatalf(t, "failed to create 
deployment", "failed to create deploy/%s in namespace %s for  %s: %s", 
deployName, ns, err, o)
-               }
+                               o, err := TestHelper.Kubectl(patchedYAML, 
"--namespace", ns, "create", "-f", "-")
+                               if err != nil {
+                                       testutil.AnnotatedFatalf(t, "failed to 
create deployment", "failed to create deploy/%s in namespace %s for  %s: %s", 
deployName, ns, err, o)
+                               }
 
-               var pod *v1.Pod
-               err = testutil.RetryFor(30*time.Second, func() error {
-                       pods, err := TestHelper.GetPodsForDeployment(ctx, ns, 
deployName)
-                       if err != nil {
-                               return fmt.Errorf("failed to get pods for 
namespace %s", ns)
-                       }
+                               var pod *v1.Pod
+                               err = testutil.RetryFor(30*time.Second, func() 
error {
+                                       pods, err := 
TestHelper.GetPodsForDeployment(ctx, ns, deployName)
+                                       if err != nil {
+                                               return fmt.Errorf("failed to 
get pods for namespace %s", ns)
+                                       }
 
-                       for _, p := range pods {
-                               p := p // pin
-                               creator, ok := 
p.Annotations[k8s.CreatedByAnnotation]
-                               if ok && strings.Contains(creator, 
"proxy-injector") {
-                                       pod = &p
-                                       break
-                               }
-                       }
-                       if pod == nil {
-                               return fmt.Errorf("failed to find auto injected 
pod for deployment %s", deployName)
-                       }
-                       return nil
-               })
+                                       for _, p := range pods {
+                                               p := p // pin
+                                               creator, ok := 
p.Annotations[k8s.CreatedByAnnotation]
+                                               if ok && 
strings.Contains(creator, "proxy-injector") {
+                                                       pod = &p
+                                                       break
+                                               }
+                                       }
+                                       if pod == nil {
+                                               return fmt.Errorf("failed to 
find auto injected pod for deployment %s", deployName)
+                                       }
+                                       return nil
+                               })
 
-               if err != nil {
-                       testutil.AnnotatedFatal(t, "failed to find autoinjected 
pod: ", err.Error())
-               }
+                               if err != nil {
+                                       testutil.AnnotatedFatal(t, "failed to 
find autoinjected pod: ", err.Error())
+                               }
 
-               if err := injectionValidator.ValidatePod(&pod.Spec); err != nil 
{
-                       testutil.AnnotatedFatal(t, "failed to validate auto 
injection", err.Error())
-               }
-       })
+                               if err := 
injectionValidator.ValidatePod(&pod.Spec); err != nil {
+                                       testutil.AnnotatedFatal(t, "failed to 
validate auto injection", err.Error())
+                               }
+                       })
+               })
+       }
 }
 
 func TestInjectAutoNamespaceOverrideAnnotations(t *testing.T) {
@@ -239,8 +256,7 @@
                                "failed to get pods for namespace %s: %s", ns, 
err)
                }
 
-               containers := pods[0].Spec.Containers
-               proxyContainer := testutil.GetProxyContainer(containers)
+               proxyContainer := testutil.GetProxyContainer(pods[0].Spec)
 
                // Match the pod configuration with the namespace level 
overrides
                if proxyContainer.Resources.Requests["memory"] != 
resource.MustParse(nsProxyMemReq) {
@@ -254,117 +270,6 @@
        })
 }
 
-func TestInjectAutoAnnotationPermutations(t *testing.T) {
-       injectYAML, err := testutil.ReadFile("testdata/inject_test.yaml")
-       if err != nil {
-               testutil.AnnotatedFatalf(t, "failed to read inject test file", 
"failed to read inject test file: %s", err)
-       }
-
-       injectNS := "inject-test"
-       deployName := "inject-test-terminus"
-       containerName := "bb-terminus"
-       injectAnnotations := []string{"", k8s.ProxyInjectDisabled, 
k8s.ProxyInjectEnabled}
-
-       // deploy
-       ctx := context.Background()
-       for _, nsAnnotation := range injectAnnotations {
-               nsAnnotation := nsAnnotation // pin
-               nsPrefix := injectNS
-               nsAnnotations := map[string]string{}
-               if nsAnnotation != "" {
-                       nsAnnotations[k8s.ProxyInjectAnnotation] = nsAnnotation
-                       nsPrefix = fmt.Sprintf("%s-%s", nsPrefix, nsAnnotation)
-               }
-
-               TestHelper.WithDataPlaneNamespace(ctx, nsPrefix, nsAnnotations, 
t, func(t *testing.T, ns string) {
-                       for _, podAnnotation := range injectAnnotations {
-                               // patch injectYAML with unique name and pod 
annotations
-                               name := deployName
-                               podAnnotations := map[string]string{}
-                               if podAnnotation != "" {
-                                       
podAnnotations[k8s.ProxyInjectAnnotation] = podAnnotation
-                                       name = fmt.Sprintf("%s-%s", name, 
podAnnotation)
-                               }
-
-                               patchedYAML, err := 
testutil.PatchDeploy(injectYAML, name, podAnnotations)
-                               if err != nil {
-                                       testutil.AnnotatedFatalf(t, 
fmt.Sprintf("failed to patch inject test YAML in namespace %s for deploy/%s", 
ns, name),
-                                               "failed to patch inject test 
YAML in namespace %s for deploy/%s: %s", ns, name, err)
-                               }
-
-                               o, err := TestHelper.Kubectl(patchedYAML, 
"--namespace", ns, "create", "-f", "-")
-                               if err != nil {
-                                       testutil.AnnotatedFatalf(t, 
fmt.Sprintf("failed to create deploy/%s in namespace %s", name, ns),
-                                               "failed to create deploy/%s in 
namespace %s for %s: %s", name, ns, err, o)
-                               }
-
-                               // check for successful deploy
-                               o, err = TestHelper.Kubectl("", "--namespace", 
ns, "wait", "--for=condition=available", "--timeout=120s", "deploy/"+name)
-                               if err != nil {
-                                       testutil.AnnotatedFatalf(t, 
fmt.Sprintf("failed to wait for condition=available for deploy/%s in namespace 
%s", name, ns),
-                                               "failed to wait for 
condition=available for deploy/%s in namespace %s: %s: %s", name, ns, err, o)
-                               }
-
-                               pods, err := 
TestHelper.GetPodsForDeployment(ctx, ns, name)
-                               if err != nil {
-                                       testutil.AnnotatedFatalf(t, 
fmt.Sprintf("failed to get pods for namespace %s", ns),
-                                               "failed to get pods for 
namespace %s: %s", ns, err)
-                               }
-
-                               if len(pods) != 1 {
-                                       testutil.Fatalf(t, "expected 1 pod for 
namespace %s, got %d", ns, len(pods))
-                               }
-
-                               shouldBeInjected := false
-                               switch nsAnnotation {
-                               case "", k8s.ProxyInjectDisabled:
-                                       switch podAnnotation {
-                                       case k8s.ProxyInjectEnabled:
-                                               shouldBeInjected = true
-                                       }
-                               case k8s.ProxyInjectEnabled:
-                                       switch podAnnotation {
-                                       case "", k8s.ProxyInjectEnabled:
-                                               shouldBeInjected = true
-                                       }
-                               }
-
-                               containers := pods[0].Spec.Containers
-                               initContainers := pods[0].Spec.InitContainers
-
-                               if shouldBeInjected {
-                                       if len(containers) != 2 {
-                                               testutil.Fatalf(t, "expected 2 
containers for pod %s/%s, got %d", ns, pods[0].GetName(), len(containers))
-                                       }
-                                       if containers[0].Name != containerName 
&& containers[1].Name != containerName {
-                                               testutil.Fatalf(t, "expected 
bb-terminus container in pod %s/%s, got %+v", ns, pods[0].GetName(), 
containers[0])
-                                       }
-                                       if containers[0].Name != 
k8s.ProxyContainerName && containers[1].Name != k8s.ProxyContainerName {
-                                               testutil.Fatalf(t, "expected %s 
container in pod %s/%s, got %+v", ns, pods[0].GetName(), 
k8s.ProxyContainerName, containers[0])
-                                       }
-                                       if !TestHelper.CNI() && 
len(initContainers) != 1 {
-                                               testutil.Fatalf(t, "expected 1 
init container for pod %s/%s, got %d", ns, pods[0].GetName(), 
len(initContainers))
-                                       }
-                                       if !TestHelper.CNI() && 
initContainers[0].Name != k8s.InitContainerName {
-                                               testutil.Fatalf(t, "expected %s 
init container in pod %s/%s, got %+v", ns, pods[0].GetName(), 
k8s.InitContainerName, initContainers[0])
-                                       }
-                               } else {
-                                       if len(containers) != 1 {
-                                               testutil.Fatalf(t, "expected 1 
container for pod %s/%s, got %d", ns, pods[0].GetName(), len(containers))
-                                       }
-                                       if containers[0].Name != containerName {
-                                               testutil.Fatalf(t, "expected 
bb-terminus container in pod %s/%s, got %s", ns, pods[0].GetName(), 
containers[0].Name)
-                                       }
-                                       if len(initContainers) != 0 {
-                                               testutil.Fatalf(t, "expected 0 
init containers for pod %s/%s, got %d", ns, pods[0].GetName(), 
len(initContainers))
-                                       }
-                               }
-                       }
-               })
-
-       }
-}
-
 func TestInjectAutoPod(t *testing.T) {
        podsYAML, err := testutil.ReadFile("testdata/pods.yaml")
        if err != nil {
@@ -472,8 +377,7 @@
                        testutil.Fatalf(t, "expected pod in namespace %s to 
have %s opaque ports, but it had %s", ns, manualOpaquePorts, annotation)
                }
 
-               containers := pods[0].Spec.Containers
-               if proxyContainer := testutil.GetProxyContainer(containers); 
proxyContainer == nil {
+               if proxyContainer := testutil.GetProxyContainer(pods[0].Spec); 
proxyContainer == nil {
                        testutil.Fatalf(t, "pod in namespace %s wasn't injected 
with the proxy container", ns)
                }
 
@@ -489,7 +393,7 @@
                        // Removed token volume name from comparison because it 
contains a random string
                        initContainer.VolumeMounts[1].Name = ""
                        // Expect the init container image to use the proxy 
container image
-                       expectedInitContainer.Image = 
testutil.GetProxyContainer(pods[0].Spec.Containers).Image
+                       expectedInitContainer.Image = 
testutil.GetProxyContainer(pods[0].Spec).Image
                        if diff := deep.Equal(expectedInitContainer, 
initContainer); diff != nil {
                                testutil.AnnotatedFatalf(t, "malformed init 
container", "malformed init container:\n%v", diff)
                        }
@@ -555,8 +459,7 @@
                        testutil.Fatalf(t, "expected pod in namespace %s to 
have %s opaque ports, but it had %s", ns, manualOpaquePorts, annotation)
                }
 
-               containers := pods[0].Spec.Containers
-               if proxyContainer := testutil.GetProxyContainer(containers); 
proxyContainer != nil {
+               if proxyContainer := testutil.GetProxyContainer(pods[0].Spec); 
proxyContainer != nil {
                        testutil.Fatalf(t, "pod in namespace %s should not have 
been injected", ns)
                }
        })
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/testutil/inject.go 
new/linkerd-cli-edge-26.1.2/testutil/inject.go
--- old/linkerd-cli-edge-26.1.1/testutil/inject.go      2026-01-06 
15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/testutil/inject.go      2026-01-14 
15:45:20.000000000 +0100
@@ -49,8 +49,8 @@
 }
 
 // GetProxyContainer get the proxy containers
-func GetProxyContainer(containers []v1.Container) *v1.Container {
-       for _, c := range containers {
+func GetProxyContainer(spec v1.PodSpec) *v1.Container {
+       for _, c := range append(spec.InitContainers, spec.Containers...) {
                container := c
                if container.Name == k8s.ProxyContainerName {
                        return &container
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/testutil/inject_validator.go 
new/linkerd-cli-edge-26.1.2/testutil/inject_validator.go
--- old/linkerd-cli-edge-26.1.1/testutil/inject_validator.go    2026-01-06 
15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/testutil/inject_validator.go    2026-01-14 
15:45:20.000000000 +0100
@@ -18,6 +18,7 @@
 // injected pods
 type InjectValidator struct {
        NoInitContainer         bool
+       NativeSidecar           bool
        AutoInject              bool
        AdminPort               int
        ControlPort             int
@@ -62,6 +63,21 @@
        return nil
 }
 
+func (iv *InjectValidator) getPodContainer(pod *v1.PodSpec) *v1.Container {
+       var containers []v1.Container
+       if iv.NativeSidecar {
+               containers = pod.InitContainers
+       } else {
+               containers = pod.Containers
+       }
+       for _, container := range containers {
+               if container.Name == k8s.ProxyContainerName {
+                       return &container
+               }
+       }
+       return nil
+}
+
 func (iv *InjectValidator) validateEnvVar(container *v1.Container, envName, 
expectedValue string) error {
        for _, env := range container.Env {
                if env.Name == envName {
@@ -99,9 +115,9 @@
 }
 
 func (iv *InjectValidator) validateProxyContainer(pod *v1.PodSpec) error {
-       proxyContainer := iv.getContainer(pod, k8s.ProxyContainerName, false)
+       proxyContainer := iv.getPodContainer(pod)
        if proxyContainer == nil {
-               return fmt.Errorf("container %s missing", 
k8s.ProxyContainerName)
+               return fmt.Errorf("proxy container %s missing", 
k8s.ProxyContainerName)
        }
 
        if iv.AdminPort != 0 {
@@ -413,6 +429,15 @@
        annotations := make(map[string]string)
        var flags []string
 
+       // native sidecar annotation and flag are set explicitly to avoid 
relying on defaults that might change
+       if iv.NativeSidecar {
+               annotations[k8s.ProxyEnableNativeSidecarAnnotationBeta] = 
enabled
+               flags = append(flags, "--native-sidecar")
+       } else {
+               annotations[k8s.ProxyEnableNativeSidecarAnnotationBeta] = 
"false"
+               flags = append(flags, "--native-sidecar=false")
+       }
+
        if iv.AutoInject {
                annotations[k8s.ProxyInjectAnnotation] = k8s.ProxyInjectEnabled
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/web/app/package.json 
new/linkerd-cli-edge-26.1.2/web/app/package.json
--- old/linkerd-cli-edge-26.1.1/web/app/package.json    2026-01-06 
15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/web/app/package.json    2026-01-14 
15:45:20.000000000 +0100
@@ -79,7 +79,7 @@
     "style-loader": "^4.0.0",
     "url-loader": "^4.1.1",
     "webpack": "^5.104.1",
-    "webpack-bundle-analyzer": "5.1.0",
+    "webpack-bundle-analyzer": "5.1.1",
     "webpack-cli": "6.0.1",
     "webpack-dev-server": "5.2.2"
   },
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/linkerd-cli-edge-26.1.1/web/app/yarn.lock 
new/linkerd-cli-edge-26.1.2/web/app/yarn.lock
--- old/linkerd-cli-edge-26.1.1/web/app/yarn.lock       2026-01-06 
15:35:53.000000000 +0100
+++ new/linkerd-cli-edge-26.1.2/web/app/yarn.lock       2026-01-14 
15:45:20.000000000 +0100
@@ -9992,10 +9992,10 @@
   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.1.0"
-  resolved 
"https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.1.0.tgz#f5f2af23eeb4558c506eec27ea6dc3a3d3d70115";
-  integrity 
sha512-WAWwIoIUx4yC2AEBqXbDkcmh/LzAaenv0+nISBflP5l+XIXO9/x6poWarGA3RTrfavk9H3oWQ64Wm0z26/UGKA==
[email protected]:
+  version "5.1.1"
+  resolved 
"https://registry.yarnpkg.com/webpack-bundle-analyzer/-/webpack-bundle-analyzer-5.1.1.tgz#39273f584a234960158fd9a56ca79e739ae06062";
+  integrity 
sha512-UzoaIA0Aigo5lUvoUkIkSoHtUK5rBJh9e2vW3Eqct0jc/L8hcruBCz/jsXEvB1hDU1G3V94jo2EJqPcFKeSSeQ==
   dependencies:
     "@discoveryjs/json-ext" "0.5.7"
     acorn "^8.0.4"

++++++ linkerd-cli-edge.obsinfo ++++++
--- /var/tmp/diff_new_pack.Cwouyy/_old  2026-01-15 16:49:23.320028801 +0100
+++ /var/tmp/diff_new_pack.Cwouyy/_new  2026-01-15 16:49:23.328029126 +0100
@@ -1,5 +1,5 @@
 name: linkerd-cli-edge
-version: 26.1.1
-mtime: 1767710153
-commit: d22fbc715226f3836a39bb20ba8b7ad5e112027c
+version: 26.1.2
+mtime: 1768401920
+commit: a2b1189358ba9ff413c8421506a93b400be91c48
 

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

Reply via email to