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
