Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package apko for openSUSE:Factory checked in 
at 2026-10-27 16:49:13
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apko (Old)
 and      /work/SRC/openSUSE:Factory/.apko.new.2252680 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apko"

Tue Oct 27 16:49:13 2026 rev:144 rq:1392962 version:1.4.13

Changes:
--------
--- /work/SRC/openSUSE:Factory/apko/apko.changes        2026-10-20 
12:38:28.777920082 +0200
+++ /work/SRC/openSUSE:Factory/.apko.new.2252680/apko.changes   2026-10-27 
16:49:44.267437397 +0100
@@ -1,0 +2,21 @@
+Tue Oct 27 06:31:22 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.4.13:
+  * build(deps): bump chainguard.dev/sdk from 0.1.398 to 0.1.404
+    (#2596)
+  * build(deps): bump google.golang.org/api from 0.304.0 to 0.305.0
+    (#2597)
+  * ldso-cache: match glibc ldconfig directory and entry ordering
+    (#2598)
+  * build(deps): bump step-security/harden-runner from 2.22.1 to
+    2.22.2 (#2595)
+  * build(deps): bump chainguard.dev/sdk from 0.1.397 to 0.1.398
+    (#2594)
+  * build(deps): bump google.golang.org/api from 0.302.0 to 0.304.0
+    (#2588)
+  * build(deps): bump chainguard.dev/sdk from 0.1.373 to 0.1.397
+    (#2591)
+  * build(deps): bump github.com/klauspost/pgzip from 1.2.7 to
+    1.3.0 (#2592)
+
+-------------------------------------------------------------------

Old:
----
  apko-1.4.12.obscpio

New:
----
  apko-1.4.13.obscpio

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

Other differences:
------------------
++++++ apko.spec ++++++
--- /var/tmp/diff_new_pack.YTmt0h/_old  2026-10-27 16:49:46.196518242 +0100
+++ /var/tmp/diff_new_pack.YTmt0h/_new  2026-10-27 16:49:46.199518368 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           apko
-Version:        1.4.12
+Version:        1.4.13
 Release:        0
 Summary:        Build OCI images from APK packages directly without Dockerfile
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.YTmt0h/_old  2026-10-27 16:49:46.270521344 +0100
+++ /var/tmp/diff_new_pack.YTmt0h/_new  2026-10-27 16:49:46.274521511 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/chainguard-dev/apko.git</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">refs/tags/v1.4.12</param>
+    <param name="revision">refs/tags/v1.4.13</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.YTmt0h/_old  2026-10-27 16:49:46.327523732 +0100
+++ /var/tmp/diff_new_pack.YTmt0h/_new  2026-10-27 16:49:46.332523942 +0100
@@ -3,6 +3,6 @@
                 <param 
name="url">https://github.com/chainguard-dev/apko</param>
               <param 
name="changesrevision">861f83f69e6fa9114405a2f7bb5cf6585ad00421</param></service><service
 name="tar_scm">
                 <param 
name="url">https://github.com/chainguard-dev/apko.git</param>
-              <param 
name="changesrevision">0c659afba7f7842a3b18cdd5108675455339912b</param></service></servicedata>
+              <param 
name="changesrevision">217f25a71fd6f18f00fb1024f9b251dc7127bfd5</param></service></servicedata>
 (No newline at EOF)
 

++++++ apko-1.4.12.obscpio -> apko-1.4.13.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.12/go.mod new/apko-1.4.13/go.mod
--- old/apko-1.4.12/go.mod      2026-10-16 16:50:56.000000000 +0200
+++ new/apko-1.4.13/go.mod      2026-10-24 00:02:54.000000000 +0200
@@ -3,7 +3,7 @@
 go 1.27.0
 
 require (
-       chainguard.dev/sdk v0.1.373
+       chainguard.dev/sdk v0.1.404
        github.com/chainguard-dev/clog v1.8.1
        github.com/charmbracelet/log v1.0.0
        github.com/erofs/go-erofs v0.3.2-0.20260804074615-52cc42c5291c
@@ -17,7 +17,7 @@
        github.com/hashicorp/golang-lru/v2 v2.0.7
        github.com/invopop/jsonschema v0.14.0
        github.com/klauspost/compress v1.20.3
-       github.com/klauspost/pgzip v1.2.7
+       github.com/klauspost/pgzip v1.3.0
        github.com/package-url/packageurl-go v0.1.7
        github.com/pavlo-v-chernykh/keystore-go/v4 v4.5.0
        github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
@@ -35,7 +35,7 @@
        golang.org/x/sys v0.49.0
        golang.org/x/term v0.47.0
        golang.org/x/time v0.16.0
-       google.golang.org/api v0.302.0
+       google.golang.org/api v0.305.0
        gopkg.in/ini.v1 v1.67.3
        gopkg.in/yaml.v3 v3.0.1
        k8s.io/apimachinery v0.37.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.12/go.sum new/apko-1.4.13/go.sum
--- old/apko-1.4.12/go.sum      2026-10-16 16:50:56.000000000 +0200
+++ new/apko-1.4.13/go.sum      2026-10-24 00:02:54.000000000 +0200
@@ -1,7 +1,7 @@
 chainguard.dev/go-grpc-kit v0.20.0 
h1:MDwZtTlUlMSMEPcoi9m8tnu4g+M88T1toUZ3Th/+0Gc=
 chainguard.dev/go-grpc-kit v0.20.0/go.mod 
h1:ocuwyRX9tqRRvJkS3/ZkDYGMnl+6FLC4bvF0cm6DGsk=
-chainguard.dev/sdk v0.1.373 h1:RBZUvUYCdM7eCKJfsRg8se5o9Af8dBmCOE89SSo/TEE=
-chainguard.dev/sdk v0.1.373/go.mod 
h1:EhyK8jxoiqdsFK7ZwdCXCy8R9zHs20Su6L9rk5ceilA=
+chainguard.dev/sdk v0.1.404 h1:kUZOIcwuKgOiDbzLkS/hUNA+T7yDwTN/sX7d3FCZ6es=
+chainguard.dev/sdk v0.1.404/go.mod 
h1:EhyK8jxoiqdsFK7ZwdCXCy8R9zHs20Su6L9rk5ceilA=
 cloud.google.com/go/auth v0.24.1-0.20261001053825-dbc26066f70a 
h1:jW1ZLFy9oa5ai8LOI40z6s+DL1cO/L1KSm9hVGnibn8=
 cloud.google.com/go/auth v0.24.1-0.20261001053825-dbc26066f70a/go.mod 
h1:1dmBXa9xfBvBr39ZnDUDkaaA91ccq9CcqENDgJA4d7c=
 cloud.google.com/go/auth/oauth2adapt v0.3.0 
h1:FY8oSZpCYoUNv6QxVODuMjQz4IlSOVeiQtZ08vLPz88=
@@ -153,8 +153,8 @@
 github.com/kevinburke/ssh_config v1.6.0/go.mod 
h1:q2RIzfka+BXARoNexmF9gkxEX7DmvbW9P4hIVx2Kg4M=
 github.com/klauspost/compress v1.20.3 
h1:zWNoFqq/lSuYQRim3dUXlXeA0IqwuZGicdG5ZTfY5j4=
 github.com/klauspost/compress v1.20.3/go.mod 
h1:LUdAzn7YLVvxLpc7y3V1m40wESHTgc1422pwwBSKYuI=
-github.com/klauspost/pgzip v1.2.7 
h1:02QB3Ttao6zOWDnSsv3bIvjN24bX0eGjWniQ8vuBfkA=
-github.com/klauspost/pgzip v1.2.7/go.mod 
h1:g7E6NrOKHOzah4QwK6Ue1tNCJs8IDiNOfjiXTr85U2E=
+github.com/klauspost/pgzip v1.3.0 
h1:8t+KjjzD/0n/8vNlJGGZmTeK4njuwffOQvJm8tOSc8o=
+github.com/klauspost/pgzip v1.3.0/go.mod 
h1:Xx7tAv5DH8ObLHUDQKXoE/nd8i/FYdNDTVMvi3SLTKI=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
 github.com/kr/pretty v0.3.1 h1:flRD4NNwYAUpkphVc1HcthR4KEIFJ65n8Mw5qdRn3LE=
 github.com/kr/pretty v0.3.1/go.mod 
h1:hoEshYVHaxMs3cyo3Yncou5ZscifuDolrwPKZanG3xk=
@@ -358,8 +358,8 @@
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 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.302.0 h1:/eENsEv3+GE0QiEmXjdaLI84Mt76LNjGz4vp4E7sRVw=
-google.golang.org/api v0.302.0/go.mod 
h1:dcjRWAy1QdjGb3Z67Qu0gdBWH2gL8Qoy/RI2ZVuvdeE=
+google.golang.org/api v0.305.0 h1:2+f87RXv3l6Rom0t2GN0zOr2dV+LqOKnxSFVOUEurnc=
+google.golang.org/api v0.305.0/go.mod 
h1:dcjRWAy1QdjGb3Z67Qu0gdBWH2gL8Qoy/RI2ZVuvdeE=
 google.golang.org/genproto v0.0.0-20260715232425-e75dac1f907d 
h1:C9v1o0/4quuhOAfmRXA2j+we0PqZIp8traLdeogF3Ms=
 google.golang.org/genproto v0.0.0-20260715232425-e75dac1f907d/go.mod 
h1:Wz2wFJntZFmLGo7pLDXZ3wYk5hyc0Mb+SkHhDDXT+lU=
 google.golang.org/genproto/googleapis/api v0.0.0-20260803160001-6ac0973c030d 
h1:FarXi840EJWSHYTN3ERkADbPWjl307+FGrA22KAVjjc=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.12/internal/ldso-cache/ldsocache.go 
new/apko-1.4.13/internal/ldso-cache/ldsocache.go
--- old/apko-1.4.12/internal/ldso-cache/ldsocache.go    2026-10-16 
16:50:56.000000000 +0200
+++ new/apko-1.4.13/internal/ldso-cache/ldsocache.go    2026-10-24 
00:02:54.000000000 +0200
@@ -375,10 +375,17 @@
        // The dynamic linker binary-searches /etc/ld.so.cache using
        // _dl_cache_libcmp, so entries must be ordered by that same comparison 
or
        // ld.so may fail to find a library that is present in the cache 
(reporting
-       // "cannot open shared object file"). glibc's ldconfig emits entries in
-       // descending order, so we negate the comparison.
-       slices.SortFunc(allEntries, func(entry, other LDSOCacheEntry) int {
-               return -dlCacheLibcmp(filepath.Base(entry.Name), 
filepath.Base(other.Name))
+       // "cannot open shared object file"). This mirrors compare() in glibc's
+       // elf/cache.c: descending _dl_cache_libcmp order, then descending 
flags.
+       //
+       // ld.so uses the first matching entry, and ldconfig inserts entries 
that
+       // compare equal after the existing ones, so the first libdir to 
provide a
+       // library wins. A stable sort preserves that libdir order.
+       slices.SortStableFunc(allEntries, func(entry, other LDSOCacheEntry) int 
{
+               if c := dlCacheLibcmp(filepath.Base(other.Name), 
filepath.Base(entry.Name)); c != 0 {
+                       return c
+               }
+               return cmp.Compare(other.Flags, entry.Flags)
        })
 
        return allEntries, nil
@@ -684,9 +691,13 @@
                                        debugf("Warning: Could not parse config 
file %s\n", match)
                                        continue
                                }
-                               libpaths = append(libpaths, incpaths...)
+                               for _, incpath := range incpaths {
+                                       if !slices.Contains(libpaths, incpath) {
+                                               libpaths = append(libpaths, 
incpath)
+                                       }
+                               }
                        }
-                       return libpaths, nil
+                       continue
                }
 
                libpath := line
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.12/internal/ldso-cache/ldsocache_test.go 
new/apko-1.4.13/internal/ldso-cache/ldsocache_test.go
--- old/apko-1.4.12/internal/ldso-cache/ldsocache_test.go       2026-10-16 
16:50:56.000000000 +0200
+++ new/apko-1.4.13/internal/ldso-cache/ldsocache_test.go       2026-10-24 
00:02:54.000000000 +0200
@@ -129,6 +129,15 @@
        require.Contains(t, dirs, "/b/libs")
 }
 
+func Test_ParseLDSOConf_LinesAfterInclude(t *testing.T) {
+       fsys := os.DirFS("testdata")
+       dirs, err := ParseLDSOConf(fsys, "ld.so.conf.include-mixed")
+       require.NoError(t, err)
+       // Directories after an include must not be dropped, and duplicates keep
+       // their first position.
+       require.Equal(t, []string{"/before", "/a/libs", "/b/libs", "/after"}, 
dirs)
+}
+
 // Instead of real ELF binaries, our "libraries" are YAML files
 // that are used to populate an elfInfo structure.
 func mockGetElfInfo(r io.ReaderAt) (elfInfo, error) {
@@ -222,3 +231,24 @@
                        "entries not in descending _dl_cache_libcmp order: %q 
before %q", a, b)
        }
 }
+
+func Test_LDSOCacheEntriesForDirs_DuplicatesKeepLibdirOrder(t *testing.T) {
+       getElfInfo = mockGetElfInfo
+       root := os.DirFS("testdata/libroot")
+       for _, libdirs := range [][]string{
+               {"/lib", "/usr/lib"},
+               {"/usr/lib", "/lib"},
+       } {
+               entries, err := LDSOCacheEntriesForDirs(root, libdirs)
+               require.NoError(t, err)
+               // ld.so picks the first matching entry, so a library found in 
an
+               // earlier libdir must come before the same library in a later 
one.
+               for i := 1; i < len(entries); i++ {
+                       if filepath.Base(entries[i-1].Name) != 
filepath.Base(entries[i].Name) {
+                               continue
+                       }
+                       require.Equal(t, libdirs[0], 
filepath.Dir(entries[i-1].Name))
+                       require.Equal(t, libdirs[1], 
filepath.Dir(entries[i].Name))
+               }
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' 
old/apko-1.4.12/internal/ldso-cache/testdata/ld.so.conf.include-mixed 
new/apko-1.4.13/internal/ldso-cache/testdata/ld.so.conf.include-mixed
--- old/apko-1.4.12/internal/ldso-cache/testdata/ld.so.conf.include-mixed       
1970-01-01 01:00:00.000000000 +0100
+++ new/apko-1.4.13/internal/ldso-cache/testdata/ld.so.conf.include-mixed       
2026-10-24 00:02:54.000000000 +0200
@@ -0,0 +1,4 @@
+/before
+include ld.so.conf.d/*.conf
+/after
+/a/libs
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.12/pkg/build/build_implementation.go 
new/apko-1.4.13/pkg/build/build_implementation.go
--- old/apko-1.4.12/pkg/build/build_implementation.go   2026-10-16 
16:50:56.000000000 +0200
+++ new/apko-1.4.13/pkg/build/build_implementation.go   2026-10-24 
00:02:54.000000000 +0200
@@ -27,6 +27,7 @@
        "os"
        "path/filepath"
        "runtime"
+       "slices"
        "sync"
 
        "github.com/chainguard-dev/clog"
@@ -346,10 +347,7 @@
        if err != nil {
                return fmt.Errorf("parsing /etc/ld.so.conf: %w", err)
        }
-       libdirs := make([]string, 0, 1+len(dirs))
-       libdirs = append(libdirs, "/lib")
-       libdirs = append(libdirs, dirs...)
-       cacheFile, err := ldsocache.BuildCacheFileForDirs(fsys, libdirs)
+       cacheFile, err := ldsocache.BuildCacheFileForDirs(fsys, 
ldsoLibDirs(fsys, dirs))
        if err != nil {
                return fmt.Errorf("generating ldsocache: %w", err)
        }
@@ -367,6 +365,29 @@
        return nil
 }
 
+// ldsoLibDirs returns the directories to scan for /etc/ld.so.cache in the same
+// order as glibc's ldconfig: the ld.so.conf directories first, followed by the
+// built-in system directories /lib and /usr/lib. Duplicates are dropped, 
keeping
+// the first occurrence. On a usrmerged system /lib is a symlink to /usr/lib, 
so
+// it is skipped entirely to avoid listing every library twice.
+func ldsoLibDirs(fsys apkfs.FullFS, confDirs []string) []string {
+       _, err := fsys.Readlink("lib")
+       libIsSymlink := err == nil
+
+       libdirs := make([]string, 0, len(confDirs)+2)
+       for _, dir := range append(slices.Clone(confDirs), "/lib", "/usr/lib") {
+               dir = filepath.Clean(dir)
+               if dir == "/lib" && libIsSymlink {
+                       continue
+               }
+               if slices.Contains(libdirs, dir) {
+                       continue
+               }
+               libdirs = append(libdirs, dir)
+       }
+       return libdirs
+}
+
 func (bc *Context) WriteEtcApkoConfig(_ context.Context) error {
        // Encode the image configuration and write it to /etc/apko.json
        f, err := bc.fs.Create("/etc/apko.json")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.12/pkg/build/ldsocache_test.go 
new/apko-1.4.13/pkg/build/ldsocache_test.go
--- old/apko-1.4.12/pkg/build/ldsocache_test.go 2026-10-16 16:50:56.000000000 
+0200
+++ new/apko-1.4.13/pkg/build/ldsocache_test.go 2026-10-24 00:02:54.000000000 
+0200
@@ -2,6 +2,7 @@
 
 import (
        "context"
+       "slices"
        "testing"
 
        "chainguard.dev/apko/pkg/apk/apk"
@@ -44,3 +45,47 @@
                t.Errorf("%s has unexpected permissions: %v", cache, perm)
        }
 }
+
+func TestLdsoLibDirs(t *testing.T) {
+       for _, tc := range []struct {
+               name     string
+               usrmerge bool
+               confDirs []string
+               want     []string
+       }{{
+               name:     "split lib",
+               confDirs: []string{"/usr/local/lib"},
+               want:     []string{"/usr/local/lib", "/lib", "/usr/lib"},
+       }, {
+               name:     "usrmerge skips /lib",
+               usrmerge: true,
+               confDirs: []string{"/usr/local/lib"},
+               want:     []string{"/usr/local/lib", "/usr/lib"},
+       }, {
+               name:     "usrmerge skips /lib from ld.so.conf too",
+               usrmerge: true,
+               confDirs: []string{"/lib", "/opt/lib", "/usr/lib/"},
+               want:     []string{"/opt/lib", "/usr/lib"},
+       }, {
+               name:     "conf dirs keep precedence over system dirs",
+               confDirs: []string{"/usr/lib", "/opt/lib", "/opt/lib"},
+               want:     []string{"/usr/lib", "/opt/lib", "/lib"},
+       }} {
+               t.Run(tc.name, func(t *testing.T) {
+                       fsys := fs.NewMemFS()
+                       if err := fsys.MkdirAll("usr/lib", 0755); err != nil {
+                               t.Fatal(err)
+                       }
+                       if tc.usrmerge {
+                               if err := fsys.Symlink("usr/lib", "lib"); err 
!= nil {
+                                       t.Fatal(err)
+                               }
+                       } else if err := fsys.MkdirAll("lib", 0755); err != nil 
{
+                               t.Fatal(err)
+                       }
+                       if got := ldsoLibDirs(fsys, tc.confDirs); 
!slices.Equal(got, tc.want) {
+                               t.Errorf("ldsoLibDirs() = %v, want %v", got, 
tc.want)
+                       }
+               })
+       }
+}

++++++ apko.obsinfo ++++++
--- /var/tmp/diff_new_pack.YTmt0h/_old  2026-10-27 16:49:47.159558602 +0100
+++ /var/tmp/diff_new_pack.YTmt0h/_new  2026-10-27 16:49:47.165558854 +0100
@@ -1,5 +1,5 @@
 name: apko
-version: 1.4.12
-mtime: 1792162256
-commit: 0c659afba7f7842a3b18cdd5108675455339912b
+version: 1.4.13
+mtime: 1792792974
+commit: 217f25a71fd6f18f00fb1024f9b251dc7127bfd5
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/apko/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.apko.new.2252680/vendor.tar.gz differ: char 135, 
line 2

Reply via email to