Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package google-osconfig-agent for 
openSUSE:Factory checked in at 2026-05-13 17:22:29
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-osconfig-agent (Old)
 and      /work/SRC/openSUSE:Factory/.google-osconfig-agent.new.1966 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "google-osconfig-agent"

Wed May 13 17:22:29 2026 rev:52 rq:1352950 version:20260511.00

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/google-osconfig-agent/google-osconfig-agent.changes  
    2026-05-04 17:24:36.895150414 +0200
+++ 
/work/SRC/openSUSE:Factory/.google-osconfig-agent.new.1966/google-osconfig-agent.changes
    2026-05-13 17:24:45.924798590 +0200
@@ -1,0 +2,25 @@
+Wed May 13 07:43:51 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to version 20260511.00
+  * switch to t2a-standard-2 on ARM package build (#977)
+- from version 20260505.03
+  * Cover zypper_patch by unit tests (#958)
+- from version 20260505.02
+  * Remove unused functions DisableAutoUpdates (#970)
+- from version 20260505.01
+  * Bump 
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
(#966)
+- from version 20260505.00
+  * Upgrade a few dependencies across the repo (#968)
+    + github.com/go-git/go-git/v5 5.16.2->5.18.0 (bsc#1264923, CVE-2026-41506)
+    + github.com/go-jose/go-jose/v4 4.1.3->4.1.4 (bsc#1262926, CVE-2026-34986)
+    + github.com/go-viper/mapstructure/v2 2.3.0->2.4.0
+    + go.opentelemetry.io/otel 1.40.0->1.41.0
+    + go.opentelemetry.io/otel/sdk 1.39.0->1.43.0
+- from version 20260504.01
+  * bump github.com/docker/cli to 29.2.0 (#962)
+- from version 20260504.00
+  * Bump github.com/opencontainers/selinux (#960)
+- Add missing CVE reference to previous changelog entry
+- Drop CVE-2026-34986.patch, merged upstream
+
+-------------------------------------------------------------------
@@ -11,0 +37 @@
+    (bsc#1260264, CVE-2026-33186)

Old:
----
  CVE-2026-34986.patch
  osconfig-20260428.00.tar.gz

New:
----
  osconfig-20260511.00.tar.gz

----------(Old B)----------
  Old:- Add missing CVE reference to previous changelog entry
- Drop CVE-2026-34986.patch, merged upstream
----------(Old E)----------

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

Other differences:
------------------
++++++ google-osconfig-agent.spec ++++++
--- /var/tmp/diff_new_pack.Dy6iBM/_old  2026-05-13 17:24:49.468945603 +0200
+++ /var/tmp/diff_new_pack.Dy6iBM/_new  2026-05-13 17:24:49.472945769 +0200
@@ -24,7 +24,7 @@
 %global import_path     %{provider_prefix}
 
 Name:           google-osconfig-agent
-Version:        20260428.00
+Version:        20260511.00
 Release:        0
 Summary:        Google Cloud Guest Agent
 License:        Apache-2.0
@@ -33,8 +33,6 @@
 Source0:        %{repo}-%{version}.tar.gz
 Source1:        vendor.tar.gz
 Source2:        rpmlintrc
-# PATCH-FIX-UPSTREAM - Fix crafted JWE input with a missing encrypted key can 
lead to a denial of service
-Patch0:         CVE-2026-34986.patch
 BuildRequires:  golang(API) >= 1.24.5
 BuildRequires:  golang-packaging
 Requires:       google-guest-configs
@@ -51,9 +49,6 @@
 %prep
 %setup -q -n %{repo}-%{version}
 %setup -q -D -T -a 1 -n %{repo}-%{version}
-pushd vendor/github.com/go-jose/go-jose/v4
-%patch -P0 -p1
-popd
 
 %build
 %goprep %{import_path}

++++++ _service ++++++
--- /var/tmp/diff_new_pack.Dy6iBM/_old  2026-05-13 17:24:49.560949419 +0200
+++ /var/tmp/diff_new_pack.Dy6iBM/_new  2026-05-13 17:24:49.568949751 +0200
@@ -3,8 +3,8 @@
     <param name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="versionformat">20260428.00</param>
-    <param name="revision">20260428.00</param>
+    <param name="versionformat">20260511.00</param>
+    <param name="revision">20260511.00</param>
     <param name="changesgenerate">enable</param>
   </service>
   <service name="recompress" mode="disabled">
@@ -15,7 +15,7 @@
     <param name="basename">osconfig</param>
   </service>
   <service name="go_modules" mode="disabled">
-    <param name="archive">osconfig-20260428.00.tar.gz</param>
+    <param name="archive">osconfig-20260511.00.tar.gz</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.Dy6iBM/_old  2026-05-13 17:24:49.608951411 +0200
+++ /var/tmp/diff_new_pack.Dy6iBM/_new  2026-05-13 17:24:49.624952074 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
-              <param 
name="changesrevision">5b7da888d9b39bd8dded65f94078b0e29b94b78c</param></service></servicedata>
+              <param 
name="changesrevision">ce895ae780529f489dbc26bac76392c5734b13d2</param></service></servicedata>
 (No newline at EOF)
 

++++++ osconfig-20260428.00.tar.gz -> osconfig-20260511.00.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260428.00/go.mod 
new/osconfig-20260511.00/go.mod
--- old/osconfig-20260428.00/go.mod     2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/go.mod     2026-05-11 23:09:03.000000000 +0200
@@ -1,8 +1,6 @@
 module github.com/GoogleCloudPlatform/osconfig
 
-go 1.24.6
-
-toolchain go1.24.13
+go 1.25.0
 
 require (
        cloud.google.com/go/compute/metadata v0.9.0
@@ -14,19 +12,19 @@
        github.com/go-ole/go-ole v1.3.0
        github.com/golang/mock v1.6.0
        github.com/google/go-cmp v0.7.0
-       github.com/google/osv-scalibr v0.4.3
+       github.com/google/osv-scalibr v0.4.5
        github.com/googleapis/gax-go/v2 v2.16.0
        github.com/kr/pretty v0.3.1
        github.com/package-url/packageurl-go v0.1.3
        github.com/tarm/serial v0.0.0-20180830185346-98f6abe2eb07
        github.com/ulikunitz/xz v0.5.15
-       golang.org/x/crypto v0.47.0
+       golang.org/x/crypto v0.49.0
        golang.org/x/oauth2 v0.34.0
-       golang.org/x/sys v0.40.0
+       golang.org/x/sys v0.42.0
        google.golang.org/api v0.259.0
        google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217
-       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251222181119-0a764e51fe1b
-       google.golang.org/grpc v1.79.3
+       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260406210006-6f92a3bedf2d
+       google.golang.org/grpc v1.80.0
        google.golang.org/protobuf v1.36.11
 )
 
@@ -39,6 +37,7 @@
        cloud.google.com/go/logging v1.13.1 // indirect
        cloud.google.com/go/longrunning v0.8.0 // indirect
        cloud.google.com/go/monitoring v1.24.3 // indirect
+       cyphar.com/go-pathrs v0.2.1 // indirect
        deps.dev/api/v3 v3.0.0-20250903005441-604c45d5b44b // indirect
        deps.dev/api/v3alpha v0.0.0-20250903005441-604c45d5b44b // indirect
        deps.dev/util/maven v0.0.0-20251104021112-20ad94767ddf // indirect
@@ -50,14 +49,16 @@
        github.com/BurntSushi/toml v1.5.0 // indirect
        github.com/CycloneDX/cyclonedx-go v0.9.2 // indirect
        github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5 // 
indirect
-       
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.30.0 // indirect
+       
github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.31.0 // indirect
        
github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric 
v0.54.0 // indirect
        
github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/resourcemapping
 v0.54.0 // indirect
        github.com/Microsoft/go-winio v0.6.2 // indirect
        github.com/Microsoft/hcsshim v0.13.0 // indirect
+       github.com/aead/serpent v0.0.0-20160714141033-fba169763ea6 // indirect
        github.com/agext/levenshtein v1.2.3 // indirect
        github.com/anchore/go-lzo v0.1.0 // indirect
        github.com/anchore/go-struct-converter v0.1.0 // indirect
+       github.com/bazelbuild/buildtools v0.0.0-20250826111327-4006b543a694 // 
indirect
        github.com/cespare/xxhash/v2 v2.3.0 // indirect
        github.com/cncf/xds/go v0.0.0-20251210132809-ee656c7534f5 // indirect
        github.com/compose-spec/compose-go/v2 v2.8.1 // indirect
@@ -73,12 +74,13 @@
        github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
        github.com/containerd/ttrpc v1.2.7 // indirect
        github.com/containerd/typeurl/v2 v2.2.3 // indirect
+       github.com/cyphar/filepath-securejoin v0.6.0 // indirect
        github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // 
indirect
        github.com/deitch/magic v0.0.0-20240306090643-c67ab88f10cb // indirect
        github.com/diskfs/go-diskfs v1.7.0 // indirect
        github.com/distribution/reference v0.6.0 // indirect
        github.com/djherbis/times v1.6.0 // indirect
-       github.com/docker/cli v28.2.2+incompatible // indirect
+       github.com/docker/cli v29.2.0+incompatible // indirect
        github.com/docker/distribution v2.8.3+incompatible // indirect
        github.com/docker/docker v28.2.2+incompatible // indirect
        github.com/docker/docker-credential-helpers v0.9.3 // indirect
@@ -96,13 +98,13 @@
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/go-errors/errors v1.0.2 // indirect
        github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
-       github.com/go-git/go-billy/v5 v5.6.2 // indirect
-       github.com/go-git/go-git/v5 v5.16.2 // indirect
-       github.com/go-jose/go-jose/v4 v4.1.3 // indirect
+       github.com/go-git/go-billy/v5 v5.8.0 // indirect
+       github.com/go-git/go-git/v5 v5.18.0 // indirect
+       github.com/go-jose/go-jose/v4 v4.1.4 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/go-logr/stdr v1.2.2 // indirect
        github.com/go-restruct/restruct v1.2.0-alpha // indirect
-       github.com/go-viper/mapstructure/v2 v2.3.0 // indirect
+       github.com/go-viper/mapstructure/v2 v2.4.0 // indirect
        github.com/gobwas/glob v0.2.3 // indirect
        github.com/gogo/protobuf v1.3.2 // indirect
        github.com/golang/glog v1.2.5 // indirect
@@ -136,7 +138,7 @@
        github.com/opencontainers/go-digest v1.0.0 // indirect
        github.com/opencontainers/image-spec v1.1.1 // indirect
        github.com/opencontainers/runtime-spec v1.2.1 // indirect
-       github.com/opencontainers/selinux v1.12.0 // indirect
+       github.com/opencontainers/selinux v1.13.0 // indirect
        github.com/ossf/osv-schema/bindings/go 
v0.0.0-20260129002236-09a17f85b44a // indirect
        github.com/pierrec/lz4/v4 v4.1.17 // indirect
        github.com/pkg/errors v0.9.1 // indirect
@@ -169,30 +171,30 @@
        go.opencensus.io v0.24.0 // indirect
        go.opentelemetry.io/auto/sdk v1.2.1 // indirect
        go.opentelemetry.io/contrib/detectors/gcp v1.39.0 // indirect
-       
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.63.0 // indirect
+       
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.68.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 
// indirect
-       go.opentelemetry.io/otel v1.40.0 // indirect
-       go.opentelemetry.io/otel/metric v1.40.0 // indirect
-       go.opentelemetry.io/otel/sdk v1.39.0 // indirect
-       go.opentelemetry.io/otel/sdk/metric v1.39.0 // indirect
-       go.opentelemetry.io/otel/trace v1.40.0 // indirect
+       go.opentelemetry.io/otel v1.43.0 // indirect
+       go.opentelemetry.io/otel/metric v1.43.0 // indirect
+       go.opentelemetry.io/otel/sdk v1.43.0 // indirect
+       go.opentelemetry.io/otel/sdk/metric v1.43.0 // indirect
+       go.opentelemetry.io/otel/trace v1.43.0 // indirect
        go.uber.org/atomic v1.7.0 // indirect
        go.uber.org/multierr v1.11.0 // indirect
        go.uber.org/zap v1.17.0 // indirect
        go.yaml.in/yaml/v2 v2.4.2 // indirect
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20250408133849-7e4ce0ab07d0 // indirect
-       golang.org/x/mod v0.31.0 // indirect
-       golang.org/x/net v0.48.0 // indirect
-       golang.org/x/sync v0.19.0 // indirect
-       golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc // indirect
-       golang.org/x/text v0.33.0 // indirect
+       golang.org/x/mod v0.33.0 // indirect
+       golang.org/x/net v0.52.0 // indirect
+       golang.org/x/sync v0.20.0 // indirect
+       golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4 // indirect
+       golang.org/x/text v0.35.0 // indirect
        golang.org/x/time v0.14.0 // indirect
-       golang.org/x/tools v0.40.0 // indirect
+       golang.org/x/tools v0.42.0 // indirect
        golang.org/x/tools/go/expect v0.1.1-deprecated // indirect
        golang.org/x/vuln v1.1.4 // indirect
        golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 // indirect
-       google.golang.org/genproto/googleapis/api 
v0.0.0-20251222181119-0a764e51fe1b // indirect
+       google.golang.org/genproto/googleapis/api 
v0.0.0-20260120221211-b8f7ae30c516 // indirect
        gopkg.in/ini.v1 v1.67.0 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
        gopkg.in/yaml.v3 v3.0.1 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260428.00/go.sum 
new/osconfig-20260511.00/go.sum
--- old/osconfig-20260428.00/go.sum     2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/go.sum     2026-05-11 23:09:03.000000000 +0200
@@ -59,6 +59,8 @@
 cloud.google.com/go/trace v1.11.7/go.mod 
h1:TNn9d5V3fQVf6s4SCveVMIBS2LJUqo73GACmq/Tky0s=
 cos.googlesource.com/cos/tools.git v0.0.0-20210329212435-a349a79f950d 
h1:qj1jlxRkQblujpwNPW4BOEWmGkrWP+Y5ADIoSKBxO5s=
 cos.googlesource.com/cos/tools.git v0.0.0-20210329212435-a349a79f950d/go.mod 
h1:1TJafpZtNmYwNzCwoWQRHfBDl59dxO6l/YW88HezBuk=
+cyphar.com/go-pathrs v0.2.1 h1:9nx1vOgwVvX1mNBWDu93+vaceedpbsDqo+XuBGL40b8=
+cyphar.com/go-pathrs v0.2.1/go.mod 
h1:y8f1EMG7r+hCuFf/rXsKqMJrJAUoADZGNh5/vZPKcGc=
 deps.dev/api/v3 v3.0.0-20250903005441-604c45d5b44b 
h1:4f6EeZ4EexJUGBtmyMaxptWMoBw/pAVshOtvzTH6dj8=
 deps.dev/api/v3 v3.0.0-20250903005441-604c45d5b44b/go.mod 
h1:BWOjjNq4+j4makGArvrtyFhzBi5TXU7AGH2nDnRORk8=
 deps.dev/api/v3alpha v0.0.0-20250903005441-604c45d5b44b 
h1:iXre7CzhkmdmzAdiOi+u/Yk1iDMI9SYlFEnXgJd5Rnk=
@@ -88,8 +90,8 @@
 github.com/GehirnInc/crypt v0.0.0-20230320061759-8cc1b52080c5/go.mod 
h1:exZ0C/1emQJAw5tHOaUDyY1ycttqBAPcxuzf7QbY6ec=
 github.com/GoogleCloudPlatform/guest-logging-go 
v0.0.0-20221216194522-f549ad6a1730 
h1:l4Hin8i/7I1R0cvWBP+z6JdRxU4yJWFbcXvJ8mKKC70=
 github.com/GoogleCloudPlatform/guest-logging-go 
v0.0.0-20221216194522-f549ad6a1730/go.mod 
h1:3F/urXs15KEI7RBGoOsK9/jCCJPBKHxyZH/Nzc7uldo=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.30.0 h1:sBEjpZlNHzK1voKq9695PJSX2o5NEXl7/OL3coiIY0c=
-github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.30.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.31.0 h1:DHa2U07rk8syqvCge0QIGMCE1WxGj9njT44GH7zNJLQ=
+github.com/GoogleCloudPlatform/opentelemetry-operations-go/detectors/gcp 
v1.31.0/go.mod h1:P4WPRUkOhJC13W//jWpyfJNDAIpvRbAUIYLX/4jtlE0=
 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric 
v0.54.0 h1:lhhYARPUu3LmHysQ/igznQphfzynnqI3D75oUyw1HXk=
 github.com/GoogleCloudPlatform/opentelemetry-operations-go/exporter/metric 
v0.54.0/go.mod h1:l9rva3ApbBpEJxSNYnwT9N4CDLrWgtq3u8736C5hyJw=
 github.com/GoogleCloudPlatform/opentelemetry-operations-go/internal/cloudmock 
v0.54.0 h1:xfK3bbi6F2RDtaZFtUdKO3osOBIhNb+xTs8lFW6yx9o=
@@ -102,6 +104,8 @@
 github.com/Microsoft/hcsshim v0.13.0/go.mod 
h1:9KWJ/8DgU+QzYGupX4tzMhRQE8h6w90lH6HAaclpEok=
 github.com/StackExchange/wmi v1.2.1 
h1:VIkavFPXSjcnS+O8yTq7NI32k0R5Aj+v39y29VYDOSA=
 github.com/StackExchange/wmi v1.2.1/go.mod 
h1:rcmrprowKIVzvc+NUiLncP2uuArMWLCbu9SBzvHz7e8=
+github.com/aead/serpent v0.0.0-20160714141033-fba169763ea6 
h1:5L8Mj9Co9sJVgW3TpYk2gxGJnDjsYuboNTcRmbtGKGs=
+github.com/aead/serpent v0.0.0-20160714141033-fba169763ea6/go.mod 
h1:3HgLJ9d18kXMLQlJvIY3+FszZYMxCz8WfE2MQ7hDY0w=
 github.com/agext/levenshtein v1.2.3 
h1:YB2fHEn0UJagG8T1rrWknE3ZQzWM06O8AMAatNn7lmo=
 github.com/agext/levenshtein v1.2.3/go.mod 
h1:JEDfjyjHDjOF/1e4FlBE/PkbqA9OfWu2ki2W0IB5558=
 github.com/alecthomas/assert v1.0.0 
h1:3XmGh/PSuLzDbK3W2gUbRXwgW5lqPkuqvRgeQ30FI5o=
@@ -115,6 +119,8 @@
 github.com/anchore/go-struct-converter v0.1.0 
h1:2rDRssAl6mgKBSLNiVCMADgZRhoqtw9dedlWa0OhD30=
 github.com/anchore/go-struct-converter v0.1.0/go.mod 
h1:rYqSE9HbjzpHTI74vwPvae4ZVYZd1lue2ta6xHPdblA=
 github.com/andygrunwald/go-gerrit v0.0.0-20201231163137-46815e48bfe0/go.mod 
h1:soxaYLbAFToS0OelBriItCts/mtUZOuLBkCk1Xv4ZSo=
+github.com/bazelbuild/buildtools v0.0.0-20250826111327-4006b543a694 
h1:LiKs9FsSfMx3NomNclXYkv9enY77oft5Mc/vX/AKHgI=
+github.com/bazelbuild/buildtools v0.0.0-20250826111327-4006b543a694/go.mod 
h1:PLNUetjLa77TCCziPsz0EI8a6CUxgC+1jgmWv0H25tg=
 github.com/beevik/etree v1.1.0 h1:T0xke/WvNtMoCqgzPhkX2r4rjY3GDZFi+FjpRZY2Jbs=
 github.com/beevik/etree v1.1.0/go.mod 
h1:r8Aw8JqVegEf0w2fDnATrX9VpkMcyFeM0FhwO62wh+A=
 github.com/bradleyjkemp/cupaloy/v2 v2.8.0 
h1:any4BmKE+jGIaMpnU8YgH/I2LPiLBufr6oMMlVBbn9M=
@@ -159,6 +165,8 @@
 github.com/containerd/typeurl/v2 v2.2.3/go.mod 
h1:95ljDnPfD3bAbDJRugOiShd/DlAAsxGtUBhJxIn7SCk=
 github.com/cpuguy83/go-md2man/v2 v2.0.0-20190314233015-f79a8a8ca69d/go.mod 
h1:maD7wRr/U5Z6m/iR4s+kqSMx2CaBsrgA7czyZG/E6dU=
 github.com/creack/pty v1.1.9/go.mod 
h1:oKZEueFk5CKHvIhNR5MUki03XCEU+Q6VDXinZuGJ33E=
+github.com/cyphar/filepath-securejoin v0.6.0 
h1:BtGB77njd6SVO6VztOHfPxKitJvd/VPT+OFBFMOi1Is=
+github.com/cyphar/filepath-securejoin v0.6.0/go.mod 
h1:A8hd4EnAeyujCJRrICiOWqjS1AX0a9kM5XL+NwKoYSc=
 github.com/davecgh/go-spew v1.1.0/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.1/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc 
h1:U9qPSI2PIWSS1VwoXQT9A3Wy9MM3WgvqSxFWenqJduM=
@@ -173,8 +181,8 @@
 github.com/djherbis/times v1.6.0/go.mod 
h1:gOHeRAz2h+VJNZ5Gmc/o7iD9k4wW7NMVqieYCY99oc0=
 github.com/dlclark/regexp2 v1.11.0 
h1:G/nrcoOa7ZXlpoa/91N3X7mM3r8eIlMBBJZvsz/mxKI=
 github.com/dlclark/regexp2 v1.11.0/go.mod 
h1:DHkYz0B9wPfa6wondMfaivmHpzrQ3v9q8cnmRbL6yW8=
-github.com/docker/cli v28.2.2+incompatible 
h1:qzx5BNUDFqlvyq4AHzdNB7gSyVTmU4cgsyN9SdInc1A=
-github.com/docker/cli v28.2.2+incompatible/go.mod 
h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v29.2.0+incompatible 
h1:9oBd9+YM7rxjZLfyMGxjraKBKE4/nVyvVfN4qNl9XRM=
+github.com/docker/cli v29.2.0+incompatible/go.mod 
h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
 github.com/docker/distribution v2.8.3+incompatible 
h1:AtKxIZ36LoNK51+Z6RpzLpddBirtxJnzDrHLEKxTAYk=
 github.com/docker/distribution v2.8.3+incompatible/go.mod 
h1:J2gT2udsDAN96Uj4KfcMRqY0/ypR+oyYUYmja8H+y+w=
 github.com/docker/docker v28.2.2+incompatible 
h1:CjwRSksz8Yo4+RmQ339Dp/D2tGO5JxwYeqtMOEe0LDw=
@@ -222,15 +230,15 @@
 github.com/go-errors/errors v1.0.2/go.mod 
h1:psDX2osz5VnTOnFWbDeWwS7yejl+uV3FEWEp4lssFEs=
 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 
h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod 
h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
-github.com/go-git/go-billy/v5 v5.6.2 
h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
-github.com/go-git/go-billy/v5 v5.6.2/go.mod 
h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
-github.com/go-git/go-git/v5 v5.16.2 
h1:fT6ZIOjE5iEnkzKyxTHK1W4HGAsPhqEqiSAssSO77hM=
-github.com/go-git/go-git/v5 v5.16.2/go.mod 
h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
+github.com/go-git/go-billy/v5 v5.8.0 
h1:I8hjc3LbBlXTtVuFNJuwYuMiHvQJDq1AT6u4DwDzZG0=
+github.com/go-git/go-billy/v5 v5.8.0/go.mod 
h1:RpvI/rw4Vr5QA+Z60c6d6LXH0rYJo0uD5SqfmrrheCY=
+github.com/go-git/go-git/v5 v5.18.0 
h1:O831KI+0PR51hM2kep6T8k+w0/LIAD490gvqMCvL5hM=
+github.com/go-git/go-git/v5 v5.18.0/go.mod 
h1:pW/VmeqkanRFqR6AljLcs7EA7FbZaN5MQqO7oZADXpo=
 github.com/go-gl/glfw v0.0.0-20190409004039-e6da0acd62b1/go.mod 
h1:vR7hzQXu2zJy9AVAgeJqvqgH9Q5CA+iKCZ2gyEVpxRU=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20191125211704-12ad95a8df72/go.mod 
h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
 github.com/go-gl/glfw/v3.3/glfw v0.0.0-20200222043503-6f7a984d4dc4/go.mod 
h1:tQ2UAYgL5IevRw8kRxooKSPJfGvJ9fJQFa0TUsXzTg8=
-github.com/go-jose/go-jose/v4 v4.1.3 
h1:CVLmWDhDVRa6Mi/IgCgaopNosCaHz7zrMeF9MlZRkrs=
-github.com/go-jose/go-jose/v4 v4.1.3/go.mod 
h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
+github.com/go-jose/go-jose/v4 v4.1.4 
h1:moDMcTHmvE6Groj34emNPLs/qtYXRVcd6S7NHbHz3kA=
+github.com/go-jose/go-jose/v4 v4.1.4/go.mod 
h1:x4oUasVrzR7071A4TnHLGSPpNOm2a21K9Kf04k1rs08=
 github.com/go-logr/logr v1.2.2/go.mod 
h1:jdQByPbusPIv2/zmleS9BjJVeZ6kBagPoEUsqbVz/1A=
 github.com/go-logr/logr v1.4.3 h1:CjnDlHq8ikf6E492q6eKboGOC0T8CDaOvkHCIg8idEI=
 github.com/go-logr/logr v1.4.3/go.mod 
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
@@ -245,8 +253,8 @@
 github.com/go-restruct/restruct v1.2.0-alpha/go.mod 
h1:KqrpKpn4M8OLznErihXTGLlsXFGeLxHUrLRRI/1YjGk=
 github.com/go-test/deep v1.0.8 h1:TDsG77qcSprGbC6vTN8OuXp5g+J+b5Pcguhf7Zt61VM=
 github.com/go-test/deep v1.0.8/go.mod 
h1:5C2ZWiW0ErCdrYzpqxLbTX7MG14M9iiw8DgHncVwcsE=
-github.com/go-viper/mapstructure/v2 v2.3.0 
h1:27XbWsHIqhbdR5TIC911OfYvgSaW93HM+dX7970Q7jk=
-github.com/go-viper/mapstructure/v2 v2.3.0/go.mod 
h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
+github.com/go-viper/mapstructure/v2 v2.4.0 
h1:EBsztssimR/CONLSZZ04E8qAkxNYq4Qp9LvH92wZUgs=
+github.com/go-viper/mapstructure/v2 v2.4.0/go.mod 
h1:oJDH3BJKyqBA2TXFhDsKDGDTlndYOZ6rGS0BRZIxGhM=
 github.com/gobwas/glob v0.2.3 h1:A4xDbljILXROh+kObIiy5kIaPYD8e96x1tgBhUI5J+Y=
 github.com/gobwas/glob v0.2.3/go.mod 
h1:d3Ez4x06l9bZtSvzIay5+Yzi0fmZzPgnTbPcKjJAkT8=
 github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
@@ -307,8 +315,8 @@
 github.com/google/martian v2.1.0+incompatible/go.mod 
h1:9I4somxYTbIHy5NJKHRl3wXiIaQGbYVAs8BPL6v8lEs=
 github.com/google/martian/v3 v3.3.3 
h1:DIhPTQrbPkgs2yJYdXU/eNACCG5DVQjySNRNlflZ9Fc=
 github.com/google/martian/v3 v3.3.3/go.mod 
h1:iEPrYcgCF7jA9OtScMFQyAlZZ4YXTKEtJ1E6RWzmBA0=
-github.com/google/osv-scalibr v0.4.3 
h1:s4WxDumtvkdI63/QxUBlbQSGNW8otbZmywCf4RRHwgY=
-github.com/google/osv-scalibr v0.4.3/go.mod 
h1:+4bTgeaPiKtZrJqYEnVB//YJw95dUXMjeqW+HKEWEkM=
+github.com/google/osv-scalibr v0.4.5 
h1:fiJWZg0jXKzFmJiYKs/BhIzUMYUGs0HT2oUZOoKSL+Q=
+github.com/google/osv-scalibr v0.4.5/go.mod 
h1:cNGl//rZ1OcOiFkLXY5DNrhFN7JKMGf4ieQrENUfEZw=
 github.com/google/pprof v0.0.0-20181206194817-3ea8567a2e57/go.mod 
h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20190515194954-54271f7e092f/go.mod 
h1:zfwlbNMJ+OItoe0UupaVj+oy1omPYYDuagoSzA8v9mc=
 github.com/google/pprof v0.0.0-20191218002539-d4f498aebedc/go.mod 
h1:ZgVRPoUq/hfqzAqh7sHMqb3I9Rq5C59dIz2SbBwJ4eM=
@@ -409,8 +417,8 @@
 github.com/opencontainers/image-spec v1.1.1/go.mod 
h1:qpqAh3Dmcf36wStyyWU+kCeDgrGnAve2nCC8+7h8Q0M=
 github.com/opencontainers/runtime-spec v1.2.1 
h1:S4k4ryNgEpxW1dzyqffOmhI1BHYcjzU8lpJfSlR0xww=
 github.com/opencontainers/runtime-spec v1.2.1/go.mod 
h1:jwyrGlmzljRJv/Fgzds9SsS/C5hL+LL3ko9hs6T5lQ0=
-github.com/opencontainers/selinux v1.12.0 
h1:6n5JV4Cf+4y0KNXW48TLj5DwfXpvWlxXplUkdTrmPb8=
-github.com/opencontainers/selinux v1.12.0/go.mod 
h1:BTPX+bjVbWGXw7ZZWUbdENt8w0htPSrlgOOysQaU62U=
+github.com/opencontainers/selinux v1.13.0 
h1:Zza88GWezyT7RLql12URvoxsbLfjFx988+LGaWfbL84=
+github.com/opencontainers/selinux v1.13.0/go.mod 
h1:XxWTed+A/s5NNq4GmYScVy+9jzXhGBVEOAyucdRUY8s=
 github.com/ossf/osv-schema/bindings/go v0.0.0-20260129002236-09a17f85b44a 
h1:XHKiGf7vsACh43gFCBb5lOxDjnY6CQYNoQXsO/SlI6k=
 github.com/ossf/osv-schema/bindings/go 
v0.0.0-20260129002236-09a17f85b44a/go.mod 
h1:Eo7R19vlnflsCRdHW1ynyNUyoRwxdaTmTWD9MtKnJTc=
 github.com/package-url/packageurl-go v0.1.3 
h1:4juMED3hHiz0set3Vq3KeQ75KD1avthoXLtmE3I0PLs=
@@ -536,26 +544,26 @@
 go.opentelemetry.io/auto/sdk v1.2.1/go.mod 
h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
 go.opentelemetry.io/contrib/detectors/gcp v1.39.0 
h1:kWRNZMsfBHZ+uHjiH4y7Etn2FK26LAGkNFw7RHv1DhE=
 go.opentelemetry.io/contrib/detectors/gcp v1.39.0/go.mod 
h1:t/OGqzHBa5v6RHZwrDBJ2OirWc+4q/w2fTbLZwAKjTk=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.63.0 h1:YH4g8lQroajqUwWbq/tr2QX1JFmEXaDLgG+ew9bLMWo=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.63.0/go.mod h1:fvPi2qXDqFs8M4B4fmJhE92TyQs9Ydjlg3RvfUp+NbQ=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.68.0 h1:0Qx7VGBacMm9ZENQ7TnNObTYI4ShC+lHI16seduaxZo=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.68.0/go.mod h1:Sje3i3MjSPKTSPvVWCaL8ugBzJwik3u4smCjUeuupqg=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0 
h1:F7Jx+6hwnZ41NSFTO5q4LYDtJRXBf2PD0rNBkeB/lus=
 go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.61.0/go.mod 
h1:UHB22Z8QsdRDrnAtX4PntOl36ajSxcdUMt1sF7Y6E7Q=
-go.opentelemetry.io/otel v1.40.0 
h1:oA5YeOcpRTXq6NN7frwmwFR0Cn3RhTVZvXsP4duvCms=
-go.opentelemetry.io/otel v1.40.0/go.mod 
h1:IMb+uXZUKkMXdPddhwAHm6UfOwJyh4ct1ybIlV14J0g=
+go.opentelemetry.io/otel v1.43.0 
h1:mYIM03dnh5zfN7HautFE4ieIig9amkNANT+xcVxAj9I=
+go.opentelemetry.io/otel v1.43.0/go.mod 
h1:JuG+u74mvjvcm8vj8pI5XiHy1zDeoCS2LB1spIq7Ay0=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0 
h1:1fTNlAIJZGWLP5FVu0fikVry1IsiUnXjf7QFvoNN3Xw=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.35.0/go.mod 
h1:zjPK58DtkqQFn+YUMbx0M2XV3QgKU0gS9LeGohREyK4=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0 
h1:xJ2qHD0C1BeYVTLLR9sX12+Qb95kfeD/byKj6Ky1pXg=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.35.0/go.mod 
h1:u5BF1xyjstDowA1R5QAO9JHzqK+ublenEW/dyqTjBVk=
 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0 
h1:wm/Q0GAAykXv83wzcKzGGqAnnfLFyFe7RslekZuv+VI=
 go.opentelemetry.io/otel/exporters/stdout/stdoutmetric v1.38.0/go.mod 
h1:ra3Pa40+oKjvYh+ZD3EdxFZZB0xdMfuileHAm4nNN7w=
-go.opentelemetry.io/otel/metric v1.40.0 
h1:rcZe317KPftE2rstWIBitCdVp89A2HqjkxR3c11+p9g=
-go.opentelemetry.io/otel/metric v1.40.0/go.mod 
h1:ib/crwQH7N3r5kfiBZQbwrTge743UDc7DTFVZrrXnqc=
-go.opentelemetry.io/otel/sdk v1.39.0 
h1:nMLYcjVsvdui1B/4FRkwjzoRVsMK8uL/cj0OyhKzt18=
-go.opentelemetry.io/otel/sdk v1.39.0/go.mod 
h1:vDojkC4/jsTJsE+kh+LXYQlbL8CgrEcwmt1ENZszdJE=
-go.opentelemetry.io/otel/sdk/metric v1.39.0 
h1:cXMVVFVgsIf2YL6QkRF4Urbr/aMInf+2WKg+sEJTtB8=
-go.opentelemetry.io/otel/sdk/metric v1.39.0/go.mod 
h1:xq9HEVH7qeX69/JnwEfp6fVq5wosJsY1mt4lLfYdVew=
-go.opentelemetry.io/otel/trace v1.40.0 
h1:WA4etStDttCSYuhwvEa8OP8I5EWu24lkOzp+ZYblVjw=
-go.opentelemetry.io/otel/trace v1.40.0/go.mod 
h1:zeAhriXecNGP/s2SEG3+Y8X9ujcJOTqQ5RgdEJcawiA=
+go.opentelemetry.io/otel/metric v1.43.0 
h1:d7638QeInOnuwOONPp4JAOGfbCEpYb+K6DVWvdxGzgM=
+go.opentelemetry.io/otel/metric v1.43.0/go.mod 
h1:RDnPtIxvqlgO8GRW18W6Z/4P462ldprJtfxHxyKd2PY=
+go.opentelemetry.io/otel/sdk v1.43.0 
h1:pi5mE86i5rTeLXqoF/hhiBtUNcrAGHLKQdhg4h4V9Dg=
+go.opentelemetry.io/otel/sdk v1.43.0/go.mod 
h1:P+IkVU3iWukmiit/Yf9AWvpyRDlUeBaRg6Y+C58QHzg=
+go.opentelemetry.io/otel/sdk/metric v1.43.0 
h1:S88dyqXjJkuBNLeMcVPRFXpRw2fuwdvfCGLEo89fDkw=
+go.opentelemetry.io/otel/sdk/metric v1.43.0/go.mod 
h1:C/RJtwSEJ5hzTiUz5pXF1kILHStzb9zFlIEe85bhj6A=
+go.opentelemetry.io/otel/trace v1.43.0 
h1:BkNrHpup+4k4w+ZZ86CZoHHEkohws8AY+WTX09nk+3A=
+go.opentelemetry.io/otel/trace v1.43.0/go.mod 
h1:/QJhyVBUUswCphDVxq+8mld+AvhXZLhe+8WVFxiFff0=
 go.opentelemetry.io/proto/otlp v1.7.1 
h1:gTOMpGDb0WTBOP8JaO72iL3auEZhVmAQg4ipjOVAtj4=
 go.opentelemetry.io/proto/otlp v1.7.1/go.mod 
h1:b2rVh6rfI/s2pHWNlB7ILJcRALpcNDzKhACevjI+ZnE=
 go.uber.org/atomic v1.7.0 h1:ADUqmZGgLDDfbSL9ZmPxKTybcoEYHgpYfELNoN+7hsw=
@@ -575,8 +583,8 @@
 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.0.0-20210921155107-089bfa567519/go.mod 
h1:GvvjBRRGRdwPK5ydBHafDWAxML/pGHZbMvKqRZ5+Abc=
-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/crypto v0.49.0 h1:+Ng2ULVvLHnJ/ZFEq4KdcDd/cfjrrjjNSXNzxg0Y4U4=
+golang.org/x/crypto v0.49.0/go.mod 
h1:ErX4dUh2UM+CFYiXZRTcMpEcN8b/1gxEuv3nODoYtCA=
 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=
@@ -614,8 +622,8 @@
 golang.org/x/mod v0.3.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.4.2/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
 golang.org/x/mod v0.6.0-dev.0.20220419223038-86c51ed26bb4/go.mod 
h1:jJ57K6gSWd91VN4djpZkiMVwK6gcyfeH4XE8wZrZaV4=
-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.33.0 h1:tHFzIWbBifEmbwtGz65eaWyGiGZatSrT9prnU8DbVL8=
+golang.org/x/mod v0.33.0/go.mod h1:swjeQEj+6r7fODbD2cqrnje9PnziFuw4bmLbBZFrQ5w=
 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=
@@ -645,8 +653,8 @@
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod 
h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20210405180319-a5a99cb37ef4/go.mod 
h1:p54w0d4576C0XHj96bSt6lcn1PtDYWL6XObtHCRCNQM=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod 
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
-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.52.0 h1:He/TN1l0e4mmR3QqHMT2Xab3Aj3L9qjbhRm78/6jrW0=
+golang.org/x/net v0.52.0/go.mod h1:R1MAz7uMZxVMualyPXb+VaqGSa3LIaUqk0eEt3w36Sw=
 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=
@@ -664,8 +672,8 @@
 golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20210220032951-036812b2e83c/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.0.0-20220722155255-886fb9371eb4/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.19.0 h1:vV+1eWNmZ5geRlYjzm2adRgW2/mcpevXNg50YZtPCE4=
-golang.org/x/sync v0.19.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
+golang.org/x/sync v0.20.0 h1:e0PTpb7pjO8GAtTs2dQ6jYa5BWYlMuX047Dco/pItO4=
+golang.org/x/sync v0.20.0/go.mod 
h1:9xrNwdLfx4jkKbNva9FpL6vEN7evnE43NNNJQ2LF3+0=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 golang.org/x/sys v0.0.0-20190312061237-fead79001313/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -706,14 +714,14 @@
 golang.org/x/sys v0.0.0-20220722155257-8c9f86f7a55f/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.1.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-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-20251203150158-8fff8a5912fc 
h1:bH6xUXay0AIFMElXG2rQ4uiE+7ncwtiOdPfYK1NK2XA=
-golang.org/x/telemetry v0.0.0-20251203150158-8fff8a5912fc/go.mod 
h1:hKdjCMrbv9skySur+Nek8Hd0uJ0GuxJIoIX2payrIdQ=
+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-20260209163413-e7419c687ee4 
h1:bTLqdHv7xrGlFbvf5/TXNxy/iUwwdkjhqQTJDjW7aj0=
+golang.org/x/telemetry v0.0.0-20260209163413-e7419c687ee4/go.mod 
h1:g5NllXBEermZrmR51cJDQxmJUHUOfRAaNyWBM+R+548=
 golang.org/x/term v0.0.0-20201126162022-7de9c90e9dd1/go.mod 
h1:bj7SfCRtBDWHUb9snDiAeCFNEtKQo2Wmx5Cou7ajbmo=
 golang.org/x/term v0.0.0-20210927222741-03fcf44c2211/go.mod 
h1:jbD1KX2456YbFQfuXm/mYQcufACuNUgVhRMnK/tPxf8=
-golang.org/x/term v0.39.0 h1:RclSuaJf32jOqZz74CkPA9qFuVTX7vhLlpfj/IGWlqY=
-golang.org/x/term v0.39.0/go.mod 
h1:yxzUCTP/U+FzoxfdKmLaA0RV1WgE0VY7hXBwKtY/4ww=
+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/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=
@@ -721,8 +729,8 @@
 golang.org/x/text v0.3.3/go.mod h1:5Zoc/QRtKVWzQhOtBMvqHzDpF6irO9z98xDceosuGiQ=
 golang.org/x/text v0.3.7/go.mod h1:u+2+/6zg+i71rQMx5EYifcz6MCKuco9NR6JIITiCfzQ=
 golang.org/x/text v0.7.0/go.mod h1:mrYo+phRRbMaCq/xk9113O4dZlRixOauAjOtrjsXDZ8=
-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/text v0.35.0 h1:JOVx6vVDFokkpaq1AEptVzLTpDe9KGpj5tR4/X+ybL8=
+golang.org/x/text v0.35.0/go.mod 
h1:khi/HExzZJ2pGnjenulevKNX1W67CUy0AsXcNubPGCA=
 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=
@@ -774,8 +782,8 @@
 golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod 
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.1/go.mod 
h1:o0xws9oXOQQZyjljx8fwUC0k7L1pTE6eaCbjGeHmOkk=
 golang.org/x/tools v0.1.12/go.mod 
h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
-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.42.0 h1:uNgphsn75Tdz5Ji2q36v/nsFSfR/9BRFvqhGBaJGd5k=
+golang.org/x/tools v0.42.0/go.mod 
h1:Ma6lCIwGZvHK6XtgbswSoWroEkhugApmsXyrUmBhfr0=
 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=
@@ -788,8 +796,8 @@
 golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028 
h1:+cNy6SZtPcJQH3LJVLOSmiC7MMxXNOb3PU/VUEz+EhU=
 golang.org/x/xerrors v0.0.0-20231012003039-104605ab7028/go.mod 
h1:NDW/Ps6MPRej6fsCIbMTohpP40sJ/P/vI1MoTEGwX90=
-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=
@@ -844,10 +852,10 @@
 google.golang.org/genproto v0.0.0-20200618031413-b414f8b61790/go.mod 
h1:jDfRM7FcilCzHH/e9qn6dsT145K34l5v+OpcnNgKAAA=
 google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217 
h1:GvESR9BIyHUahIb0NcTum6itIWtdoglGX+rnGxm2934=
 google.golang.org/genproto v0.0.0-20251202230838-ff82c1b0f217/go.mod 
h1:yJ2HH4EHEDTd3JiLmhds6NkJ17ITVYOdV3m3VKOnws0=
-google.golang.org/genproto/googleapis/api v0.0.0-20251222181119-0a764e51fe1b 
h1:uA40e2M6fYRBf0+8uN5mLlqUtV192iiksiICIBkYJ1E=
-google.golang.org/genproto/googleapis/api 
v0.0.0-20251222181119-0a764e51fe1b/go.mod 
h1:Xa7le7qx2vmqB/SzWUBa7KdMjpdpAHlh5QCSnjessQk=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251222181119-0a764e51fe1b 
h1:Mv8VFug0MP9e5vUxfBcE3vUkV6CImK3cMNMIDFjmzxU=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251222181119-0a764e51fe1b/go.mod 
h1:j9x/tPzZkyxcgEFkiKEEGxfvyumM01BEtsW8xzOahRQ=
+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-20260406210006-6f92a3bedf2d 
h1:wT2n40TBqFY6wiwazVK9/iTWbsQrgk5ZfCSVFLO9LQA=
+google.golang.org/genproto/googleapis/rpc 
v0.0.0-20260406210006-6f92a3bedf2d/go.mod 
h1:4Hqkh8ycfw05ld/3BWL7rJOSfebL2Q+DVDeRgYgxUU8=
 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=
@@ -860,8 +868,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/protobuf v0.0.0-20200109180630-ec00e32a8dfd/go.mod 
h1:DFci5gLYBciE7Vtevhsrf46CRTquxDuWsQurQQe4oz8=
 google.golang.org/protobuf v0.0.0-20200221191635-4d8936d0db64/go.mod 
h1:kwYJMbMJ01Woi6D6+Kah6886xMZcty6N08ah7+eCXa0=
 google.golang.org/protobuf v0.0.0-20200228230310-ab0ca4ff8a60/go.mod 
h1:cfTl7dwQJ+fmap5saPgwCLgHXTUD7jkjRqWcaiX5VyM=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260428.00/ospatch/system_linux.go 
new/osconfig-20260511.00/ospatch/system_linux.go
--- old/osconfig-20260428.00/ospatch/system_linux.go    2026-04-28 
17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/ospatch/system_linux.go    1970-01-01 
01:00:00.000000000 +0100
@@ -1,105 +0,0 @@
-//  Copyright 2019 Google Inc. All Rights Reserved.
-//
-//  Licensed under the Apache License, Version 2.0 (the "License");
-//  you may not use this file except in compliance with the License.
-//  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-
-//go:build !test
-// +build !test
-
-package ospatch
-
-import (
-       "bytes"
-       "context"
-       "os"
-       "os/exec"
-
-       "github.com/GoogleCloudPlatform/osconfig/clog"
-       "github.com/GoogleCloudPlatform/osconfig/packages"
-)
-
-const (
-       systemctl = "/bin/systemctl"
-)
-
-// DisableAutoUpdates disables system auto updates.
-func DisableAutoUpdates(ctx context.Context) {
-       // yum-cron on el systems
-       if _, err := os.Stat("/usr/lib/systemd/system/yum-cron.service"); err 
== nil {
-               out, err := exec.Command(systemctl, "is-enabled", 
"yum-cron.service").CombinedOutput()
-               if err != nil {
-                       if eerr, ok := err.(*exec.ExitError); ok {
-                               // Error code of 1 indicates disabled.
-                               if eerr.ExitCode() == 1 {
-                                       return
-                               }
-                       }
-                       clog.Errorf(ctx, "Error checking status of yum-cron, 
error: %v, out: %s", err, out)
-               }
-
-               clog.Debugf(ctx, "Disabling yum-cron")
-               out, err = exec.Command(systemctl, "stop", 
"yum-cron.service").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error stopping yum-cron, error: %v, 
out: %s", err, out)
-               }
-               out, err = exec.Command(systemctl, "disable", 
"yum-cron.service").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error disabling yum-cron, error: %v, 
out: %s", err, out)
-               }
-       } else if _, err := os.Stat("/usr/sbin/yum-cron"); err == nil {
-               out, err := exec.Command("/sbin/chkconfig", 
"yum-cron").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error checking status of yum-cron, 
error: %v, out: %s", err, out)
-               }
-               if bytes.Contains(out, []byte("disabled")) {
-                       return
-               }
-
-               clog.Debugf(ctx, "Disabling yum-cron")
-               out, err = exec.Command("/sbin/chkconfig", "yum-cron", 
"off").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error disabling yum-cron, error: %v, 
out: %s", err, out)
-               }
-       }
-
-       // dnf-automatic on el8 systems
-       if _, err := os.Stat("/usr/lib/systemd/system/dnf-automatic.timer"); 
err == nil {
-               out, err := exec.Command(systemctl, "list-timers", 
"dnf-automatic.timer").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error checking status of 
dnf-automatic, error: %v, out: %s", err, out)
-               }
-               if bytes.Contains(out, []byte("0 timers listed")) {
-                       return
-               }
-
-               clog.Debugf(ctx, "Disabling dnf-automatic")
-               out, err = exec.Command(systemctl, "stop", 
"dnf-automatic.timer").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error stopping dnf-automatic, error: 
%v, out: %s", err, out)
-               }
-               out, err = exec.Command(systemctl, "disable", 
"dnf-automatic.timer").CombinedOutput()
-               if err != nil {
-                       clog.Errorf(ctx, "Error disabling dnf-automatic, error: 
%v, out: %s", err, out)
-               }
-       }
-
-       // apt unattended-upgrades
-       // TODO: Removing the package is a bit overkill, look into just managing
-       // the configs, this is probably best done by looking through
-       // /etc/apt/apt.conf.d/ and setting APT::Periodic::Unattended-Upgrade 
to 0.
-       if _, err := os.Stat("/usr/bin/unattended-upgrades"); err == nil {
-               clog.Debugf(ctx, "Removing unattended-upgrades package")
-               if err := packages.RemoveAptPackages(ctx, 
[]string{"unattended-upgrades"}); err != nil {
-                       clog.Errorf(ctx, "%v", err.Error())
-               }
-       }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260428.00/ospatch/system_windows.go 
new/osconfig-20260511.00/ospatch/system_windows.go
--- old/osconfig-20260428.00/ospatch/system_windows.go  2026-04-28 
17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/ospatch/system_windows.go  1970-01-01 
01:00:00.000000000 +0100
@@ -1,55 +0,0 @@
-//  Copyright 2019 Google Inc. All Rights Reserved.
-//
-//  Licensed under the Apache License, Version 2.0 (the "License");
-//  you may not use this file except in compliance with the License.
-//  You may obtain a copy of the License at
-//
-//      http://www.apache.org/licenses/LICENSE-2.0
-//
-//  Unless required by applicable law or agreed to in writing, software
-//  distributed under the License is distributed on an "AS IS" BASIS,
-//  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-//  See the License for the specific language governing permissions and
-//  limitations under the License.
-
-//go:build !test
-// +build !test
-
-package ospatch
-
-import (
-       "context"
-       "os"
-
-       "github.com/GoogleCloudPlatform/osconfig/clog"
-       "github.com/GoogleCloudPlatform/osconfig/packages"
-       "golang.org/x/sys/windows/registry"
-)
-
-// DisableAutoUpdates disables system auto updates.
-func DisableAutoUpdates(ctx context.Context) {
-       k, openedExisting, err := registry.CreateKey(registry.LOCAL_MACHINE, 
`SOFTWARE\Policies\Microsoft\Windows\WindowsUpdate\AU`, registry.ALL_ACCESS)
-       if err != nil {
-               clog.Errorf(ctx, "Error disabling Windows auto updates, error: 
%v", err)
-       }
-       defer k.Close()
-
-       if openedExisting {
-               val, _, err := k.GetIntegerValue("NoAutoUpdate")
-               if err == nil && val == 1 {
-                       return
-               }
-       }
-       clog.Debugf(ctx, "Disabling Windows Auto Updates")
-
-       if err := k.SetDWordValue("NoAutoUpdate", 1); err != nil {
-               clog.Errorf(ctx, "Error disabling Windows auto updates, error: 
%v", err)
-       }
-
-       if _, err := os.Stat(`C:\Program Files\Google\Compute 
Engine\tools\auto_updater.ps1`); err == nil {
-               clog.Debugf(ctx, "Removing google-compute-engine-auto-updater 
package")
-               if err := packages.RemoveGooGetPackages(ctx, 
[]string{"google-compute-engine-auto-updater"}); err != nil {
-                       clog.Errorf(ctx, "%s", err.Error())
-               }
-       }
-}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260428.00/ospatch/zypper_patch_test.go 
new/osconfig-20260511.00/ospatch/zypper_patch_test.go
--- old/osconfig-20260428.00/ospatch/zypper_patch_test.go       2026-04-28 
17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/ospatch/zypper_patch_test.go       2026-05-11 
23:09:03.000000000 +0200
@@ -1,10 +1,17 @@
 package ospatch
 
 import (
+       "context"
+       "errors"
+       "fmt"
+       "os/exec"
        "strings"
        "testing"
 
        "github.com/GoogleCloudPlatform/osconfig/packages"
+       utilmocks "github.com/GoogleCloudPlatform/osconfig/util/mocks"
+       utiltest "github.com/GoogleCloudPlatform/osconfig/util/utiltest"
+       "github.com/golang/mock/gomock"
 )
 
 func TestRunFilter(t *testing.T) {
@@ -78,6 +85,195 @@
        }
 }
 
+func TestRunZypperPatch(t *testing.T) {
+       const zypperBin = "/usr/bin/zypper"
+       someErr := errors.New("some error")
+       patch2 := "patch-2"
+
+       listPatchesBaseArgs := []string{"--gpg-auto-import-keys", "-q", 
"list-patches"}
+       listPatchesAllArgs := append(listPatchesBaseArgs, "--all")
+       listUpdatesArgs := []string{"--gpg-auto-import-keys", "-q", 
"list-updates"}
+       installArgs := []string{"--gpg-auto-import-keys", "--non-interactive", 
"install", "--auto-agree-with-licenses"}
+
+       onePatchOutput := []byte(`SLE-Module | patch-1 | security | important | 
--- | needed | Security patch`)
+       twoPatchesOutput := []byte("SLE-Module | patch-1 | security | important 
| --- | needed | Security patch\n" +
+               "SLE-Module | patch-2 | recommended | moderate | --- | needed | 
Recommended patch")
+       oneUpdateOutput := []byte(`v | SLES12-SP3-Updates  | pkg1 | 1.0.0 | 
2.0.0 | x86_64`)
+
+       mockCtrl := gomock.NewController(t)
+       t.Cleanup(func() { mockCtrl.Finish() })
+       mockCommandRunner := utilmocks.NewMockCommandRunner(mockCtrl)
+       packages.SetCommandRunner(mockCommandRunner)
+
+       tests := []struct {
+               name      string
+               opts      []ZypperPatchOption
+               setupMock func(ctx context.Context, mock 
*utilmocks.MockCommandRunner)
+               wantErr   error
+       }{
+               {
+                       name: "When listing available patches fails, 
RunZypperPatch should surface the wrapped command error and not attempt to 
install anything.",
+                       opts: nil,
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return(nil, nil, someErr).Times(1)
+                       },
+                       wantErr: wrapRunErr(zypperBin, listPatchesAllArgs, 
someErr),
+               },
+               {
+                       name: "When zypper reports no needed patches and 
--with-update is not set, RunZypperPatch should return without running any 
install commands.",
+                       opts: nil,
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return([]byte(""), nil, nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "In dry-run mode, RunZypperPatch should list 
available patches but skip the install step even when patches are needed.",
+                       opts: []ZypperPatchOption{ZypperUpdateDryrun(true)},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return(onePatchOutput, nil, 
nil).Times(1)
+                               // No install call expected.
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "With one needed patch reported by zypper, 
RunZypperPatch should invoke zypper install with the patch:<name> argument.",
+                       opts: nil,
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               listCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return(onePatchOutput, nil, 
nil).Times(1)
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, append(installArgs, 
"patch:patch-1")...))).
+                                       After(listCall).Return(nil, nil, 
nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "When the install step fails, RunZypperPatch 
should return the wrapped command error from the install invocation.",
+                       opts: nil,
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               listCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return(onePatchOutput, nil, 
nil).Times(1)
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, append(installArgs, 
"patch:patch-1")...))).
+                                       After(listCall).Return(nil, nil, 
someErr).Times(1)
+                       },
+                       wantErr: wrapRunErr(zypperBin, append(installArgs, 
"patch:patch-1"), someErr),
+               },
+               {
+                       name: "With --with-update enabled and no patches to 
install, a failure of `zypper list-updates` should be surfaced as the wrapped 
command error.",
+                       opts: []ZypperPatchOption{ZypperUpdateWithUpdate(true)},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               // Empty patches list so ZypperPackagesInPatch 
short-circuits.
+                               listCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return([]byte(""), nil, nil).Times(1)
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listUpdatesArgs...))).
+                                       After(listCall).Return(nil, nil, 
someErr).Times(1)
+                       },
+                       wantErr: wrapRunErr(zypperBin, listUpdatesArgs, 
someErr),
+               },
+               {
+                       name: "With --with-update enabled and no needed 
patches, non-patch packages reported by `zypper list-updates` should be 
installed using the package:<name> form.",
+                       opts: []ZypperPatchOption{ZypperUpdateWithUpdate(true)},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               // Empty patches list so ZypperPackagesInPatch 
short-circuits (returns empty map, nil).
+                               listPatchesCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return([]byte(""), nil, nil).Times(1)
+                               listUpdatesCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listUpdatesArgs...))).
+                                       
After(listPatchesCall).Return(oneUpdateOutput, nil, nil).Times(1)
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, append(installArgs, 
"package:pkg1")...))).
+                                       After(listUpdatesCall).Return(nil, nil, 
nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "When a category filter is provided, list-patches 
should be invoked with --category=<value> and without --all.",
+                       opts: 
[]ZypperPatchOption{ZypperPatchCategories([]string{"security"})},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               // With a category filter, --all is NOT 
appended.
+                               args := append(listPatchesBaseArgs, 
"--category=security")
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, args...))).
+                                       Return([]byte(""), nil, nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "When a severity filter is provided, list-patches 
should be invoked with --severity=<value> and without --all.",
+                       opts: 
[]ZypperPatchOption{ZypperPatchSeverities([]string{"critical"})},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               // With a severity filter, --all is NOT 
appended.
+                               args := append(listPatchesBaseArgs, 
"--severity=critical")
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, args...))).
+                                       Return([]byte(""), nil, nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "When --with-optional is enabled, list-patches 
should be invoked with --with-optional alongside --all.",
+                       opts: 
[]ZypperPatchOption{ZypperUpdateWithOptional(true)},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               args := append(listPatchesBaseArgs, 
"--with-optional", "--all")
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, args...))).
+                                       Return([]byte(""), nil, nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "With an exclusive-patches list, only the patches 
named in that list should be passed to the install invocation, even if zypper 
reports additional needed patches.",
+                       opts: 
[]ZypperPatchOption{ZypperUpdateWithExclusivePatches([]string{"patch-1"})},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               listCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return(twoPatchesOutput, nil, 
nil).Times(1)
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, append(installArgs, 
"patch:patch-1")...))).
+                                       After(listCall).Return(nil, nil, 
nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "With an excludes list, the excluded patches 
should not be passed to the install invocation.",
+                       opts: 
[]ZypperPatchOption{ZypperUpdateWithExcludes([]*Exclude{CreateStringExclude(&patch2)})},
+                       setupMock: func(ctx context.Context, mock 
*utilmocks.MockCommandRunner) {
+                               listCall := mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, listPatchesAllArgs...))).
+                                       Return(twoPatchesOutput, nil, 
nil).Times(1)
+                               mock.EXPECT().
+                                       Run(ctx, 
utilmocks.EqCmd(exec.Command(zypperBin, append(installArgs, 
"patch:patch-1")...))).
+                                       After(listCall).Return(nil, nil, 
nil).Times(1)
+                       },
+                       wantErr: nil,
+               },
+       }
+
+       for _, tc := range tests {
+               t.Run(tc.name, func(t *testing.T) {
+                       ctx := context.Background()
+
+                       tc.setupMock(ctx, mockCommandRunner)
+
+                       err := RunZypperPatch(ctx, tc.opts...)
+                       utiltest.AssertErrorMatch(t, err, tc.wantErr)
+               })
+       }
+}
+
 func isIn(needle string, haystack []string) bool {
        for _, hay := range haystack {
                if strings.Compare(hay, needle) == 0 {
@@ -153,3 +349,9 @@
 
        return patches, pkgUpdates, pkgToPatchesMap
 }
+
+// wrapRunErr mirrors the formatting used by packages.run to wrap the
+// underlying command error, so tests can express the exact expected error.
+func wrapRunErr(cmd string, args []string, err error) error {
+       return fmt.Errorf("error running %s with args %q: %v, stdout: %q, 
stderr: %q", cmd, args, err, []byte(""), []byte(""))
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20260428.00/packagebuild/workflows/build_deb12_arm64.wf.json 
new/osconfig-20260511.00/packagebuild/workflows/build_deb12_arm64.wf.json
--- old/osconfig-20260428.00/packagebuild/workflows/build_deb12_arm64.wf.json   
2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/packagebuild/workflows/build_deb12_arm64.wf.json   
2026-05-11 23:09:03.000000000 +0200
@@ -34,8 +34,7 @@
           "repo_name": "${repo_name}",
           "git_ref": "${git_ref}",
           "build_dir": "${build_dir}",
-          "machine_type": "c4a-standard-2",
-          "disk_type": "hyperdisk-balanced",
+          "machine_type": "t2a-standard-2",
           "zone": "us-central1-a",
           "version": "${version}"
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20260428.00/packagebuild/workflows/build_deb13_arm64.wf.json 
new/osconfig-20260511.00/packagebuild/workflows/build_deb13_arm64.wf.json
--- old/osconfig-20260428.00/packagebuild/workflows/build_deb13_arm64.wf.json   
2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/packagebuild/workflows/build_deb13_arm64.wf.json   
2026-05-11 23:09:03.000000000 +0200
@@ -34,8 +34,7 @@
           "repo_name": "${repo_name}",
           "git_ref": "${git_ref}",
           "build_dir": "${build_dir}",
-          "machine_type": "c4a-standard-2",
-          "disk_type": "hyperdisk-balanced",
+          "machine_type": "t2a-standard-2",
           "zone": "us-central1-a",
           "version": "${version}"
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20260428.00/packagebuild/workflows/build_el10_arm64.wf.json 
new/osconfig-20260511.00/packagebuild/workflows/build_el10_arm64.wf.json
--- old/osconfig-20260428.00/packagebuild/workflows/build_el10_arm64.wf.json    
2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/packagebuild/workflows/build_el10_arm64.wf.json    
2026-05-11 23:09:03.000000000 +0200
@@ -34,8 +34,7 @@
           "repo_name": "${repo_name}",
           "git_ref": "${git_ref}",
           "build_dir": "${build_dir}",
-          "machine_type": "c4a-standard-2",
-          "disk_type": "hyperdisk-balanced",
+          "machine_type": "t2a-standard-2",
           "zone": "us-central1-a",
           "version": "${version}"
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20260428.00/packagebuild/workflows/build_el8_arm64.wf.json 
new/osconfig-20260511.00/packagebuild/workflows/build_el8_arm64.wf.json
--- old/osconfig-20260428.00/packagebuild/workflows/build_el8_arm64.wf.json     
2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/packagebuild/workflows/build_el8_arm64.wf.json     
2026-05-11 23:09:03.000000000 +0200
@@ -34,8 +34,7 @@
           "repo_name": "${repo_name}",
           "git_ref": "${git_ref}",
           "build_dir": "${build_dir}",
-          "machine_type": "c4a-standard-2",
-          "disk_type": "hyperdisk-balanced",
+          "machine_type": "t2a-standard-2",
           "zone": "us-central1-a",
           "version": "${version}"
         }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/osconfig-20260428.00/packagebuild/workflows/build_el9_arm64.wf.json 
new/osconfig-20260511.00/packagebuild/workflows/build_el9_arm64.wf.json
--- old/osconfig-20260428.00/packagebuild/workflows/build_el9_arm64.wf.json     
2026-04-28 17:05:03.000000000 +0200
+++ new/osconfig-20260511.00/packagebuild/workflows/build_el9_arm64.wf.json     
2026-05-11 23:09:03.000000000 +0200
@@ -34,8 +34,7 @@
           "repo_name": "${repo_name}",
           "git_ref": "${git_ref}",
           "build_dir": "${build_dir}",
-          "machine_type": "c4a-standard-2",
-          "disk_type": "hyperdisk-balanced",
+          "machine_type": "t2a-standard-2",
           "zone": "us-central1-a",
           "version": "${version}"
         }

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/google-osconfig-agent/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.google-osconfig-agent.new.1966/vendor.tar.gz 
differ: char 13, line 1

Reply via email to