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-05 15:21:06
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apko (Old)
 and      /work/SRC/openSUSE:Factory/.apko.new.3698736 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apko"

Mon Oct  5 15:21:06 2026 rev:140 rq:1382419 version:1.4.7

Changes:
--------
--- /work/SRC/openSUSE:Factory/apko/apko.changes        2026-10-01 
16:47:29.053145110 +0200
+++ /work/SRC/openSUSE:Factory/.apko.new.3698736/apko.changes   2026-10-05 
15:21:08.266966325 +0200
@@ -1,0 +2,11 @@
+Mon Oct 05 05:04:24 UTC 2026 - Johannes Kastl 
<[email protected]>
+
+- Update to version 1.4.7:
+  * build(deps): bump chainguard.dev/sdk from 0.1.299 to 0.1.301
+    (#2542)
+  * build(deps): bump chainguard.dev/sdk from 0.1.293 to 0.1.299
+    (#2540)
+  * apk: make the in-memory index and resolver cache sizes
+    configurable (#2529)
+
+-------------------------------------------------------------------

Old:
----
  apko-1.4.6.obscpio

New:
----
  apko-1.4.7.obscpio

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

Other differences:
------------------
++++++ apko.spec ++++++
--- /var/tmp/diff_new_pack.vrtlb7/_old  2026-10-05 15:21:10.642065258 +0200
+++ /var/tmp/diff_new_pack.vrtlb7/_new  2026-10-05 15:21:10.646065425 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           apko
-Version:        1.4.6
+Version:        1.4.7
 Release:        0
 Summary:        Build OCI images from APK packages directly without Dockerfile
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.vrtlb7/_old  2026-10-05 15:21:10.751069799 +0200
+++ /var/tmp/diff_new_pack.vrtlb7/_new  2026-10-05 15:21:10.762070257 +0200
@@ -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.6</param>
+    <param name="revision">refs/tags/v1.4.7</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.vrtlb7/_old  2026-10-05 15:21:10.830073089 +0200
+++ /var/tmp/diff_new_pack.vrtlb7/_new  2026-10-05 15:21:10.842073589 +0200
@@ -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">51c298aa5249f43193e3cb8684a2a60facfcb69d</param></service></servicedata>
+              <param 
name="changesrevision">15d5b10666de995c2201c9a9ca70c12a53018b51</param></service></servicedata>
 (No newline at EOF)
 

++++++ apko-1.4.6.obscpio -> apko-1.4.7.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/go.mod new/apko-1.4.7/go.mod
--- old/apko-1.4.6/go.mod       2026-09-30 14:19:13.000000000 +0200
+++ new/apko-1.4.7/go.mod       2026-10-03 15:49:55.000000000 +0200
@@ -3,7 +3,7 @@
 go 1.27.0
 
 require (
-       chainguard.dev/sdk v0.1.293
+       chainguard.dev/sdk v0.1.301
        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
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/go.sum new/apko-1.4.7/go.sum
--- old/apko-1.4.6/go.sum       2026-09-30 14:19:13.000000000 +0200
+++ new/apko-1.4.7/go.sum       2026-10-03 15:49:55.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.293 h1:g2cSwqFulEqLYN6jB9pRkVdXoLttq1CHx+LgmMRRGcU=
-chainguard.dev/sdk v0.1.293/go.mod 
h1:fDIxqEbOn4iyGhS1ggkdcbrePUTBCJljMzH2XlTWwS4=
+chainguard.dev/sdk v0.1.301 h1:34vykEckvZ16qypGcp9dBODW1i1tshDqJQKQ0F6nj6w=
+chainguard.dev/sdk v0.1.301/go.mod 
h1:fDIxqEbOn4iyGhS1ggkdcbrePUTBCJljMzH2XlTWwS4=
 cloud.google.com/go/auth v0.23.3 
h1:UMK+oBtuNGMCR/6i6mmySUItqjOazpJrbmZyhGbGBWo=
 cloud.google.com/go/auth v0.23.3/go.mod 
h1:fClbry28fo7XkxhSeT6AQtAVAp6Jy0fW9N99PoPNPFM=
 cloud.google.com/go/auth/oauth2adapt v0.2.8 
h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/pkg/apk/apk/cache_size.go 
new/apko-1.4.7/pkg/apk/apk/cache_size.go
--- old/apko-1.4.6/pkg/apk/apk/cache_size.go    1970-01-01 01:00:00.000000000 
+0100
+++ new/apko-1.4.7/pkg/apk/apk/cache_size.go    2026-10-03 15:49:55.000000000 
+0200
@@ -0,0 +1,55 @@
+// Copyright 2026 Chainguard, Inc.
+//
+// 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 apk
+
+import (
+       "os"
+       "strconv"
+
+       "github.com/chainguard-dev/clog"
+)
+
+// Environment variables that override the sizes of the process-wide
+// in-memory caches. Both default to 64 entries. Every entry pins a parsed
+// index generation (index cache) or a full package resolver built from one
+// (resolver and disqualify caches), so raising either trades memory for hit
+// rate. Long-running multi-tenant services that resolve against many distinct
+// repository sets can raise them; the apko CLI does not need to.
+const (
+       // IndexCacheEntriesEnv sets how many parsed APKINDEX generations stay 
in
+       // memory.
+       IndexCacheEntriesEnv = "APKO_INDEX_CACHE_ENTRIES"
+       // ResolverCacheEntriesEnv sets how many distinct index combinations the
+       // resolver and disqualify caches each retain.
+       ResolverCacheEntriesEnv = "APKO_RESOLVER_CACHE_ENTRIES"
+
+       defaultCacheEntries = 64
+)
+
+// cacheEntriesFromEnv returns the positive integer in the named environment
+// variable, or def when the variable is unset. A value that is not a positive
+// integer is ignored with a warning, so a typo cannot disable a cache.
+func cacheEntriesFromEnv(name string, def int) int {
+       raw, ok := os.LookupEnv(name)
+       if !ok {
+               return def
+       }
+       n, err := strconv.Atoi(raw)
+       if err != nil || n <= 0 {
+               clog.Warnf("ignoring %s=%q: want a positive integer, using 
default %d", name, raw, def)
+               return def
+       }
+       return n
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/pkg/apk/apk/cache_size_test.go 
new/apko-1.4.7/pkg/apk/apk/cache_size_test.go
--- old/apko-1.4.6/pkg/apk/apk/cache_size_test.go       1970-01-01 
01:00:00.000000000 +0100
+++ new/apko-1.4.7/pkg/apk/apk/cache_size_test.go       2026-10-03 
15:49:55.000000000 +0200
@@ -0,0 +1,71 @@
+// Copyright 2026 Chainguard, Inc.
+//
+// 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 apk
+
+import (
+       "os"
+       "testing"
+)
+
+// unsetenv removes name from the environment for the duration of the test
+// and restores its previous value afterwards, so the test does not depend on
+// what the caller's shell happens to export.
+func unsetenv(t *testing.T, name string) {
+       t.Helper()
+       prev, had := os.LookupEnv(name)
+       if err := os.Unsetenv(name); err != nil {
+               t.Fatalf("unsetting %s: %v", name, err)
+       }
+       t.Cleanup(func() {
+               if !had {
+                       return
+               }
+               if err := os.Setenv(name, prev); err != nil {
+                       t.Errorf("restoring %s: %v", name, err)
+               }
+       })
+}
+
+func TestCacheEntriesFromEnv(t *testing.T) {
+       const name = "APKO_TEST_CACHE_ENTRIES"
+
+       for _, tc := range []struct {
+               name  string
+               set   bool
+               value string
+               want  int
+       }{
+               {name: "unset uses default", set: false, want: 64},
+               {name: "positive integer is honored", set: true, value: "512", 
want: 512},
+               {name: "one is honored", set: true, value: "1", want: 1},
+               {name: "zero falls back", set: true, value: "0", want: 64},
+               {name: "negative falls back", set: true, value: "-3", want: 64},
+               {name: "empty falls back", set: true, value: "", want: 64},
+               {name: "non-numeric falls back", set: true, value: "lots", 
want: 64},
+               {name: "float falls back", set: true, value: "1.5", want: 64},
+               {name: "whitespace falls back", set: true, value: " 128", want: 
64},
+       } {
+               t.Run(tc.name, func(t *testing.T) {
+                       if tc.set {
+                               t.Setenv(name, tc.value)
+                       } else {
+                               unsetenv(t, name)
+                       }
+                       if got := cacheEntriesFromEnv(name, 64); got != tc.want 
{
+                               t.Errorf("cacheEntriesFromEnv(%q=%q) = %d, want 
%d", name, tc.value, got, tc.want)
+                       }
+               })
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/pkg/apk/apk/index.go 
new/apko-1.4.7/pkg/apk/apk/index.go
--- old/apko-1.4.6/pkg/apk/apk/index.go 2026-09-30 14:19:13.000000000 +0200
+++ new/apko-1.4.7/pkg/apk/apk/index.go 2026-10-03 15:49:55.000000000 +0200
@@ -44,7 +44,10 @@
 
 var signatureFileRegex = 
regexp.MustCompile(`^\.SIGN\.(DSA|RSA|RSA256|RSA512)\.(.*\.rsa\.pub)$`)
 
-const indexCacheMaxEntries = 64
+// indexCacheMaxEntries bounds how many parsed index generations stay in
+// memory. The default of 64 can be overridden with IndexCacheEntriesEnv; the
+// value is read once at process start.
+var indexCacheMaxEntries = cacheEntriesFromEnv(IndexCacheEntriesEnv, 
defaultCacheEntries)
 
 type Signature struct {
        KeyID           string
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/pkg/apk/apk/index_eviction_test.go 
new/apko-1.4.7/pkg/apk/apk/index_eviction_test.go
--- old/apko-1.4.6/pkg/apk/apk/index_eviction_test.go   2026-09-30 
14:19:13.000000000 +0200
+++ new/apko-1.4.7/pkg/apk/apk/index_eviction_test.go   2026-10-03 
15:49:55.000000000 +0200
@@ -171,7 +171,7 @@
                next()
        }
        base := heapMB()
-       const extra = 2 * maxResolverCacheEntries
+       extra := 2 * maxResolverCacheEntries
        for range extra {
                next()
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-1.4.6/pkg/apk/apk/shameful_global_caches.go 
new/apko-1.4.7/pkg/apk/apk/shameful_global_caches.go
--- old/apko-1.4.6/pkg/apk/apk/shameful_global_caches.go        2026-09-30 
14:19:13.000000000 +0200
+++ new/apko-1.4.7/pkg/apk/apk/shameful_global_caches.go        2026-10-03 
15:49:55.000000000 +0200
@@ -30,7 +30,10 @@
 // generations that in-flight resolutions still request stay cached and age
 // out once enough newer combinations have been inserted. Every entry pins a
 // whole index generation, so raising this trades memory for hit rate.
-const maxResolverCacheEntries = 64
+//
+// The default of 64 can be overridden with ResolverCacheEntriesEnv; the value
+// is read once at process start.
+var maxResolverCacheEntries = cacheEntriesFromEnv(ResolverCacheEntriesEnv, 
defaultCacheEntries)
 
 // lruCache is a tiny mutex-guarded LRU keyed by the exact []NamedIndex. Index
 // objects are immutable and remote generations are deduplicated by (url, etag)

++++++ apko.obsinfo ++++++
--- /var/tmp/diff_new_pack.vrtlb7/_old  2026-10-05 15:21:12.368137156 +0200
+++ /var/tmp/diff_new_pack.vrtlb7/_new  2026-10-05 15:21:12.383137781 +0200
@@ -1,5 +1,5 @@
 name: apko
-version: 1.4.6
-mtime: 1790770753
-commit: 51c298aa5249f43193e3cb8684a2a60facfcb69d
+version: 1.4.7
+mtime: 1791035395
+commit: 15d5b10666de995c2201c9a9ca70c12a53018b51
 

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

Reply via email to