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-06-17 16:23:30
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/google-osconfig-agent (Old)
 and      /work/SRC/openSUSE:Factory/.google-osconfig-agent.new.1981 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "google-osconfig-agent"

Wed Jun 17 16:23:30 2026 rev:54 rq:1360047 version:20260615.01

Changes:
--------
--- 
/work/SRC/openSUSE:Factory/google-osconfig-agent/google-osconfig-agent.changes  
    2026-06-15 19:54:17.834725292 +0200
+++ 
/work/SRC/openSUSE:Factory/.google-osconfig-agent.new.1981/google-osconfig-agent.changes
    2026-06-17 16:24:18.346087897 +0200
@@ -1,0 +2,49 @@
+Wed Jun 17 10:54:17 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Packaging improvements:
+  * Remove define github project name components no longer needed
+  * Define shortname corresponding to binary name when different
+    from package name. Use shortname where applicable to normalize
+    common lines across Go app packages, similar to name macro.
+  * Drop BuildRequires: golang-packaging. The original macros for
+    file movements into GOPATH are obsolete with Go modules. Macro
+    go_nostrip is no longer needed with current binutils and Go.
+  * Remove go_nostrip macro which is no longer recommended
+  * Re-enable binary stripping and debuginfo boo#1210938
+  * Remove goprep macro which is no longer recommended
+  * Build PIE with pattern that may become recommended procedure:
+    %%ifnarch ppc64 GOFLAGS="-buildmode=pie" %%endif go build
+    A go toolchain buildmode default config would be preferable
+    but none exist at this time.
+  * Drop export CGO_ENABLED="0". Use the default unless there is a
+    defined requirement or benefit.
+  * For this package, we were seeing the expected error
+    "-buildmode=pie requires external (cgo) linking, but cgo is not
+    enabled" when using buildmode=pie and CGO_ENABLED=0. The error
+    manifested only on s390x and i586 architectures, which was not
+    expected. Resolve by using default CGO_ENABLED.
+  * Remove ldflags -s (Omit symbol table and debug info) and -w
+    (Omit DWARF symbol table). This information is used to produce
+    separate debuginfo packages and binaries are stripped for
+    reduced size by GNU strip during RPM build.
+  * Remove ldflags -X entry for embedding build version metadata.
+    This information is embedded in binaries with go1.18+ and
+    available via go version -m or runtime/debug.ReadBuildInfo().
+  * Drop mod=vendor, go1.14+ will detect vendor dir and auto-enable
+  * Raise minimum golang API version to 1.25.5 to match go.mod file
+  * Use explicit upstream GitHub homepage in URL field
+  * Use single invocation of %setup with -a1 to unpack both tarballs
+
+-------------------------------------------------------------------
+Tue Jun 16 08:06:26 UTC 2026 - John Paul Adrian Glaubitz 
<[email protected]>
+
+- Update to version 20260615.01
+  * Upgrade golang.org/x/crypto & golang.org/x/net (#1006)
+    (bsc#1266171, CVE-2026-39827, CVE-2026-39834, CVE-2026-39828,
+     CVE-2026-39829, CVE-2026-39831, CVE-2026-42508, CVE-2026-39833,
+     CVE-2026-39830, CVE-2026-39832, CVE-2026-46597, CVE-2026-46598,
+     CVE-2026-46595, CVE-2026-39835) (bsc#1266603, CVE-2026-39821)
+- from version 20260615.00
+  * Add unit tests for ospatch_apt_upgrade.go (#938)
+
+-------------------------------------------------------------------

Old:
----
  osconfig-20260611.00.tar.gz

New:
----
  osconfig-20260615.01.tar.gz

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

Other differences:
------------------
++++++ google-osconfig-agent.spec ++++++
--- /var/tmp/diff_new_pack.M7pGHR/_old  2026-06-17 16:24:21.322212250 +0200
+++ /var/tmp/diff_new_pack.M7pGHR/_new  2026-06-17 16:24:21.322212250 +0200
@@ -16,43 +16,33 @@
 #
 
 
-%global provider        github
-%global provider_tld    com
-%global project         GoogleCloudPlatform
-%global repo            osconfig
-%global provider_prefix %{provider}.%{provider_tld}/%{project}/%{repo}
-%global import_path     %{provider_prefix}
+%define shortname osconfig
 
 Name:           google-osconfig-agent
-Version:        20260611.00
+Version:        20260615.01
 Release:        0
 Summary:        Google Cloud Guest Agent
 License:        Apache-2.0
 Group:          System/Daemons
-URL:            https://%{provider_prefix}
-Source0:        %{repo}-%{version}.tar.gz
+URL:            https://github.com/GoogleCloudPlatform/osconfig
+Source0:        %{shortname}-%{version}.tar.gz
 Source1:        vendor.tar.gz
 Source2:        rpmlintrc
-BuildRequires:  golang(API) >= 1.24.5
-BuildRequires:  golang-packaging
+BuildRequires:  golang(API) >= 1.25.5
 Requires:       google-guest-configs
 BuildRoot:      %{_tmppath}/%{name}-%{version}-build
 
-
-
-%{go_nostrip}
-%{go_provides}
-
 %description
 Google Cloud OSConfig Agent
 
 %prep
-%setup -q -n %{repo}-%{version}
-%setup -q -D -T -a 1 -n %{repo}-%{version}
+%setup -n %{shortname}-%{version} -a1
 
 %build
-%goprep %{import_path}
-CGO_ENABLED=0 go build -buildmode=pie -ldflags="-s -w -X 
main.version=%{version}-%{release}" -mod=vendor -o google_osconfig_agent
+%ifnarch ppc64
+export GOFLAGS="-buildmode=pie"
+%endif
+go build -o google_osconfig_agent
 
 %install
 install -d %{buildroot}%{_bindir}

++++++ _service ++++++
--- /var/tmp/diff_new_pack.M7pGHR/_old  2026-06-17 16:24:21.370214255 +0200
+++ /var/tmp/diff_new_pack.M7pGHR/_new  2026-06-17 16:24:21.382214756 +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">20260611.00</param>
-    <param name="revision">20260611.00</param>
+    <param name="versionformat">20260615.01</param>
+    <param name="revision">20260615.01</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-20260611.00.tar.gz</param>
+    <param name="archive">osconfig-20260615.01.tar.gz</param>
   </service>
 </services>
 

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.M7pGHR/_old  2026-06-17 16:24:21.402215592 +0200
+++ /var/tmp/diff_new_pack.M7pGHR/_new  2026-06-17 16:24:21.410215926 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/GoogleCloudPlatform/osconfig</param>
-              <param 
name="changesrevision">970324ec06848121c894d2ffb0edf4fc080f5000</param></service></servicedata>
+              <param 
name="changesrevision">5b74d2e70f06700a7a5b1901efd6f602d6ad0b84</param></service></servicedata>
 (No newline at EOF)
 

++++++ osconfig-20260611.00.tar.gz -> osconfig-20260615.01.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260611.00/go.mod 
new/osconfig-20260615.01/go.mod
--- old/osconfig-20260611.00/go.mod     2026-06-11 16:58:38.000000000 +0200
+++ new/osconfig-20260615.01/go.mod     2026-06-15 22:34:32.000000000 +0200
@@ -18,9 +18,9 @@
        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.50.0
+       golang.org/x/crypto v0.52.0
        golang.org/x/oauth2 v0.34.0
-       golang.org/x/sys v0.43.0
+       golang.org/x/sys v0.45.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-20260406210006-6f92a3bedf2d
@@ -185,10 +185,10 @@
        go.yaml.in/yaml/v3 v3.0.4 // indirect
        golang.org/x/exp v0.0.0-20260410095643-746e56fc9e2f // indirect
        golang.org/x/mod v0.35.0 // indirect
-       golang.org/x/net v0.53.0 // indirect
+       golang.org/x/net v0.54.0 // indirect
        golang.org/x/sync v0.20.0 // indirect
        golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa // indirect
-       golang.org/x/text v0.36.0 // indirect
+       golang.org/x/text v0.37.0 // indirect
        golang.org/x/time v0.14.0 // indirect
        golang.org/x/tools v0.44.0 // indirect
        golang.org/x/vuln v1.1.4 // indirect
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260611.00/go.sum 
new/osconfig-20260615.01/go.sum
--- old/osconfig-20260611.00/go.sum     2026-06-11 16:58:38.000000000 +0200
+++ new/osconfig-20260615.01/go.sum     2026-06-15 22:34:32.000000000 +0200
@@ -583,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.50.0 h1:zO47/JPrL6vsNkINmLoo/PH1gcxpls50DNogFvB5ZGI=
-golang.org/x/crypto v0.50.0/go.mod 
h1:3muZ7vA7PBCE6xgPX7nkzzjiUq87kRItoJQM1Yo8S+Q=
+golang.org/x/crypto v0.52.0 h1:RMs7fP2rXdep0CftQlK8Uf+kibLm7qkCcradZWYz988=
+golang.org/x/crypto v0.52.0/go.mod 
h1:1QgfPxDqh0T2M/elOJtp9RvuR95kVjir0e6/BvEmGbc=
 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=
@@ -653,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.53.0 h1:d+qAbo5L0orcWAr0a9JweQpjXF19LMXJE8Ey7hwOdUA=
-golang.org/x/net v0.53.0/go.mod h1:JvMuJH7rrdiCfbeHoo3fCQU24Lf5JJwT9W3sJFulfgs=
+golang.org/x/net v0.54.0 h1:2zJIZAxAHV/OHCDTCOHAYehQzLfSXuf/5SoL/Dv6w/w=
+golang.org/x/net v0.54.0/go.mod h1:Sj4oj8jK6XmHpBZU/zWHw3BV3abl4Kvi+Ut7cQcY+cQ=
 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=
@@ -713,14 +713,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.43.0 h1:Rlag2XtaFTxp19wS8MXlJwTvoh8ArU6ezoyFsMyCTNI=
-golang.org/x/sys v0.43.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
+golang.org/x/sys v0.45.0 h1:dO4czNzziLiiXplLQgBCEpCvXQ3dnkn0SdaZSYdQ+FY=
+golang.org/x/sys v0.45.0/go.mod h1:4GL1E5IUh+htKOUEOaiffhrAeqysfVGipDYzABqnCmw=
 golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa 
h1:efT73AJZfAAUV7SOip6pWGkwJDzIGiKBZGVzHYa+ve4=
 golang.org/x/telemetry v0.0.0-20260409153401-be6f6cb8b1fa/go.mod 
h1:kHjTxDEnAu6/Nl9lDkzjWpR+bmKfxeiRuSDlsMb70gE=
 golang.org/x/term v0.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.42.0 h1:UiKe+zDFmJobeJ5ggPwOshJIVt6/Ft0rcfrXZDLWAWY=
-golang.org/x/term v0.42.0/go.mod 
h1:Dq/D+snpsbazcBG5+F9Q1n2rXV8Ma+71xEjTRufARgY=
+golang.org/x/term v0.43.0 h1:S4RLU2sB31O/NCl+zFN9Aru9A/Cq2aqKpTZJ6B+DwT4=
+golang.org/x/term v0.43.0/go.mod 
h1:lrhlHNdQJHO+1qVYiHfFKVuVioJIheAc3fBSMFYEIsk=
 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=
@@ -728,8 +728,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.36.0 h1:JfKh3XmcRPqZPKevfXVpI1wXPTqbkE5f7JA92a55Yxg=
-golang.org/x/text v0.36.0/go.mod 
h1:NIdBknypM8iqVmPiuco0Dh6P5Jcdk8lJL0CUebqK164=
+golang.org/x/text v0.37.0 h1:Cqjiwd9eSg8e0QAkyCaQTNHFIIzWtidPahFWR83rTrc=
+golang.org/x/text v0.37.0/go.mod 
h1:a5sjxXGs9hsn/AJVwuElvCAo9v8QYLzvavO5z2PiM38=
 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=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260611.00/ospatch/apt_upgrade_test.go 
new/osconfig-20260615.01/ospatch/apt_upgrade_test.go
--- old/osconfig-20260611.00/ospatch/apt_upgrade_test.go        1970-01-01 
01:00:00.000000000 +0100
+++ new/osconfig-20260615.01/ospatch/apt_upgrade_test.go        2026-06-15 
22:34:32.000000000 +0200
@@ -0,0 +1,196 @@
+//  Copyright 2026 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.
+
+package ospatch
+
+import (
+       "context"
+       "errors"
+       "os"
+       "os/exec"
+       "testing"
+
+       "github.com/GoogleCloudPlatform/osconfig/packages"
+       utilmocks "github.com/GoogleCloudPlatform/osconfig/util/mocks"
+       "github.com/GoogleCloudPlatform/osconfig/util/utiltest"
+       "github.com/golang/mock/gomock"
+)
+
+// TestRunAptGetUpgrade verifies the functionality and error handling of 
RunAptGetUpgrade function
+// apt behavior is mocked with gomock
+func TestRunAptGetUpgrade(t *testing.T) {
+       mockCtrl := gomock.NewController(t)
+       defer mockCtrl.Finish()
+       oldRunner := packages.GetCommandRunner()
+       defer packages.SetCommandRunner(oldRunner)
+
+       ctx := context.Background()
+       mockCommandRunner := utilmocks.NewMockCommandRunner(mockCtrl)
+       packages.SetCommandRunner(mockCommandRunner)
+
+       aptGet := "/usr/bin/apt-get"
+       env := append(os.Environ(), "DEBIAN_FRONTEND=noninteractive")
+
+       pkg1, pkg2 := "pkg1", "pkg2"
+       fakeOutput, empty := []byte("stdout"), []byte("")
+       pkg1out := []byte("Inst pkg1 [1.0] (1.1 stable [amd64])")
+       pkg12out := []byte("Inst pkg1 [1.0] (1.1 stable [amd64])\nInst pkg2 
[1.0] (1.1 stable [amd64])")
+
+       tests := []struct {
+               name    string
+               opts    []AptGetUpgradeOption
+               mock    func()
+               wantErr error
+       }{
+               {
+                       name: "default apt options, want nil",
+                       opts: nil,
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(pkg1out, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "install", "-y", "pkg1"))).Return(fakeOutput, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "dry run option, want nil",
+                       opts: []AptGetUpgradeOption{AptGetDryRun(true)},
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(pkg1out, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "package excludes, want nil",
+                       opts: []AptGetUpgradeOption{
+                               
AptGetExcludes([]*Exclude{CreateStringExclude(&pkg1)}),
+                       },
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(pkg12out, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "install", "-y", "pkg2"))).Return(fakeOutput, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "exclusive packages, want nil",
+                       opts: []AptGetUpgradeOption{
+                               AptGetExclusivePackages([]string{pkg2}),
+                       },
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(pkg12out, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "install", "-y", "pkg2"))).Return(fakeOutput, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "dist-upgrade type, want nil",
+                       opts: []AptGetUpgradeOption{
+                               AptGetUpgradeType(packages.AptGetDistUpgrade),
+                       },
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "dist-upgrade"))).Return(pkg1out, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "install", "-y", "pkg1"))).Return(fakeOutput, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "full-upgrade type, want nil",
+                       opts: []AptGetUpgradeOption{
+                               AptGetUpgradeType(packages.AptGetFullUpgrade),
+                       },
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "full-upgrade"))).Return(pkg1out, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "install", "-y", "pkg1"))).Return(fakeOutput, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "no packages to update, want nil",
+                       opts: nil,
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(empty, empty, nil),
+                               )
+                       },
+                       wantErr: nil,
+               },
+               {
+                       name: "update with failure, want update fail error",
+                       opts: nil,
+                       mock: func() {
+                               mockCommandRunner.EXPECT().Run(gomock.Any(), 
utilmocks.EqCmd(buildCmd(aptGet, env, "update"))).Return(empty, 
[]byte("error"), errors.New("update fail"))
+                       },
+                       wantErr: errors.New("update fail"),
+               },
+               {
+                       name: "install with failure, want install fail",
+                       opts: nil,
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(pkg1out, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "install", "-y", "pkg1"))).Return(empty, []byte("install error"), 
errors.New("install fail")),
+                               )
+                       },
+                       wantErr: errors.New("error running /usr/bin/apt-get 
with args [\"install\" \"-y\" \"pkg1\"]: install fail, stdout: \"\", stderr: 
\"install error\""),
+               },
+               {
+                       name: "both exclusive packages and excludes, want 
'exclusivePackages and excludes can not both be non 0' error",
+                       opts: []AptGetUpgradeOption{
+                               AptGetExclusivePackages([]string{pkg1}),
+                               
AptGetExcludes([]*Exclude{CreateStringExclude(&pkg1)}),
+                       },
+                       mock: func() {
+                               gomock.InOrder(
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "update"))).Return(fakeOutput, empty, nil),
+                                       
mockCommandRunner.EXPECT().Run(gomock.Any(), utilmocks.EqCmd(buildCmd(aptGet, 
env, "--just-print", "-qq", "upgrade"))).Return(pkg1out, empty, nil),
+                               )
+                       },
+                       wantErr: errors.New("exclusivePackages and excludes can 
not both be non 0"),
+               },
+       }
+
+       for _, tt := range tests {
+               t.Run(tt.name, func(t *testing.T) {
+                       tt.mock()
+                       err := RunAptGetUpgrade(ctx, tt.opts...)
+                       utiltest.AssertErrorMatch(t, err, tt.wantErr)
+               })
+       }
+}
+
+// buildCmd builds an exec.Cmd with the given path, environment, and arguments.
+func buildCmd(path string, env []string, args ...string) *exec.Cmd {
+       cmd := exec.Command(path, args...)
+       cmd.Env = env
+       return cmd
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/osconfig-20260611.00/packages/packages.go 
new/osconfig-20260615.01/packages/packages.go
--- old/osconfig-20260611.00/packages/packages.go       2026-06-11 
16:58:38.000000000 +0200
+++ new/osconfig-20260615.01/packages/packages.go       2026-06-15 
22:34:32.000000000 +0200
@@ -247,3 +247,13 @@
 func SetPtyCommandRunner(commandRunner util.CommandRunner) {
        ptyrunner = commandRunner
 }
+
+// GetCommandRunner returns the current commandRunner.
+func GetCommandRunner() util.CommandRunner {
+       return runner
+}
+
+// GetPtyCommandRunner returns the current ptyCommandRunner.
+func GetPtyCommandRunner() util.CommandRunner {
+       return ptyrunner
+}

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

Reply via email to