Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package apko for openSUSE:Factory checked in 
at 2025-12-05 16:51:45
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apko (Old)
 and      /work/SRC/openSUSE:Factory/.apko.new.1939 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apko"

Fri Dec  5 16:51:45 2025 rev:78 rq:1321051 version:0.30.28

Changes:
--------
--- /work/SRC/openSUSE:Factory/apko/apko.changes        2025-11-24 
14:07:55.318078449 +0100
+++ /work/SRC/openSUSE:Factory/.apko.new.1939/apko.changes      2025-12-05 
16:53:19.052058928 +0100
@@ -1,0 +2,39 @@
+Thu Dec 04 06:05:54 UTC 2025 - Johannes Kastl 
<[email protected]>
+
+- Update to version 0.30.28:
+  * Gracefully handle cached files being deleted (#1959)
+  * Add a test that important files come early in extracted images
+    (#1964)
+  * build(deps): bump go.step.sm/crypto from 0.74.0 to 0.75.0
+    (#1963)
+  * build(deps): bump google.golang.org/api from 0.256.0 to 0.257.0
+    (#1962)
+  * build(deps): bump actions/checkout from 6.0.0 to 6.0.1 (#1961)
+  * build(deps): bump golangci/golangci-lint-action from 9.1.0 to
+    9.2.0 (#1960)
+  * build(deps): bump github.com/klauspost/compress from 1.18.1 to
+    1.18.2 (#1957)
+  * build(deps): bump github/codeql-action from 4.31.5 to 4.31.6
+    (#1958)
+  * build(deps): bump step-security/harden-runner from 2.13.2 to
+    2.13.3 (#1956)
+
+-------------------------------------------------------------------
+Thu Dec 04 06:00:10 UTC 2025 - Johannes Kastl 
<[email protected]>
+
+- Update to version 0.30.27:
+  * build(deps): bump github.com/go-git/go-git/v5 from 5.16.3 to
+    5.16.4 (#1950)
+  * build(deps): bump chainguard.dev/sdk from 0.1.43 to 0.1.44
+    (#1955)
+  * build(deps): bump github.com/google/go-containerregistry from
+    0.20.6 to 0.20.7 (#1954)
+  * build(deps): bump actions/checkout from 5.0.1 to 6.0.0 (#1948)
+  * build(deps): bump chainguard-dev/actions from 1.5.9 to 1.5.10
+    (#1951)
+  * build(deps): bump github/codeql-action from 4.31.4 to 4.31.5
+    (#1952)
+  * build(deps): bump golangci/golangci-lint-action from 9.0.0 to
+    9.1.0 (#1953)
+
+-------------------------------------------------------------------

Old:
----
  apko-0.30.26.obscpio

New:
----
  apko-0.30.28.obscpio

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

Other differences:
------------------
++++++ apko.spec ++++++
--- /var/tmp/diff_new_pack.wXHyqz/_old  2025-12-05 16:53:20.056100905 +0100
+++ /var/tmp/diff_new_pack.wXHyqz/_new  2025-12-05 16:53:20.060101073 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           apko
-Version:        0.30.26
+Version:        0.30.28
 Release:        0
 Summary:        Build OCI images from APK packages directly without Dockerfile
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.wXHyqz/_old  2025-12-05 16:53:20.120103581 +0100
+++ /var/tmp/diff_new_pack.wXHyqz/_new  2025-12-05 16:53:20.124103748 +0100
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/chainguard-dev/apko</param>
     <param name="scm">git</param>
     <param name="exclude">.git</param>
-    <param name="revision">v0.30.26</param>
+    <param name="revision">v0.30.28</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.wXHyqz/_old  2025-12-05 16:53:20.152104918 +0100
+++ /var/tmp/diff_new_pack.wXHyqz/_new  2025-12-05 16:53:20.160105253 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/chainguard-dev/apko</param>
-              <param 
name="changesrevision">66fa7ad37f2e6b60faa66043065fc6d7663597bc</param></service></servicedata>
+              <param 
name="changesrevision">db61eae5fed3d34259684098d4e94d8846ee9ef9</param></service></servicedata>
 (No newline at EOF)
 

++++++ apko-0.30.26.obscpio -> apko-0.30.28.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.30.26/go.mod new/apko-0.30.28/go.mod
--- old/apko-0.30.26/go.mod     2025-11-22 22:03:56.000000000 +0100
+++ new/apko-0.30.28/go.mod     2025-12-03 22:02:57.000000000 +0100
@@ -3,17 +3,17 @@
 go 1.24.6
 
 require (
-       chainguard.dev/sdk v0.1.43
+       chainguard.dev/sdk v0.1.44
        github.com/chainguard-dev/clog v1.7.0
        github.com/charmbracelet/log v0.4.2
-       github.com/go-git/go-git/v5 v5.16.3
+       github.com/go-git/go-git/v5 v5.16.4
        github.com/google/go-cmp v0.7.0
-       github.com/google/go-containerregistry v0.20.6
+       github.com/google/go-containerregistry v0.20.7
        github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
        github.com/hashicorp/go-cleanhttp v0.5.2
        github.com/hashicorp/go-retryablehttp v0.7.8
        github.com/invopop/jsonschema v0.13.0
-       github.com/klauspost/compress v1.18.1
+       github.com/klauspost/compress v1.18.2
        github.com/klauspost/pgzip v1.2.6
        github.com/package-url/packageurl-go v0.1.3
        github.com/pkg/browser v0.0.0-20240102092130-5ac0b6a4141c
@@ -24,12 +24,12 @@
        go.lsp.dev/uri v0.3.0
        go.opentelemetry.io/otel v1.38.0
        go.opentelemetry.io/otel/trace v1.38.0
-       go.step.sm/crypto v0.74.0
+       go.step.sm/crypto v0.75.0
        golang.org/x/oauth2 v0.33.0
        golang.org/x/sync v0.18.0
        golang.org/x/sys v0.38.0
        golang.org/x/time v0.14.0
-       google.golang.org/api v0.256.0
+       google.golang.org/api v0.257.0
        gopkg.in/ini.v1 v1.67.0
        gopkg.in/yaml.v3 v3.0.1
        k8s.io/apimachinery v0.34.2
@@ -59,14 +59,14 @@
        github.com/common-nighthawk/go-figure 
v0.0.0-20210622060536-734e95fb86be // indirect
        github.com/containerd/errdefs v1.0.0 // indirect
        github.com/containerd/errdefs/pkg v0.3.0 // indirect
-       github.com/containerd/stargz-snapshotter/estargz v0.16.3 // indirect
+       github.com/containerd/stargz-snapshotter/estargz v0.18.1 // indirect
        github.com/cyphar/filepath-securejoin v0.4.1 // indirect
        github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc // 
indirect
        github.com/distribution/reference v0.6.0 // indirect
-       github.com/docker/cli v28.4.0+incompatible // indirect
+       github.com/docker/cli v29.0.3+incompatible // indirect
        github.com/docker/distribution v2.8.3+incompatible // indirect
-       github.com/docker/docker v28.3.3+incompatible // indirect
-       github.com/docker/docker-credential-helpers v0.9.3 // indirect
+       github.com/docker/docker v28.5.2+incompatible // indirect
+       github.com/docker/docker-credential-helpers v0.9.4 // indirect
        github.com/docker/go-connections v0.5.0 // indirect
        github.com/docker/go-units v0.5.0 // indirect
        github.com/dustin/go-humanize v1.0.1 // indirect
@@ -78,15 +78,14 @@
        github.com/go-logfmt/logfmt v0.6.0 // indirect
        github.com/go-logr/logr v1.4.3 // indirect
        github.com/go-logr/stdr v1.2.2 // indirect
-       github.com/gogo/protobuf v1.3.2 // indirect
        github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 // 
indirect
        github.com/google/s2a-go v0.1.9 // indirect
        github.com/google/uuid v1.6.0 // indirect
        github.com/googleapis/enterprise-certificate-proxy v0.3.7 // indirect
        github.com/googleapis/gax-go/v2 v2.15.0 // indirect
        github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus 
v1.1.0 // indirect
-       github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 // indirect
-       github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 // indirect
+       github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 // indirect
+       github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 // indirect
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
        github.com/jbenet/go-context v0.0.0-20150711004518-d14ea06fba99 // 
indirect
        github.com/kelseyhightower/envconfig v1.4.0 // indirect
@@ -116,11 +115,11 @@
        github.com/skeema/knownhosts v1.3.1 // indirect
        github.com/spf13/pflag v1.0.9 // indirect
        github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 // indirect
-       github.com/vbatts/tar-split v0.12.1 // indirect
+       github.com/vbatts/tar-split v0.12.2 // indirect
        github.com/wk8/go-ordered-map/v2 v2.1.8 // indirect
        github.com/xanzy/ssh-agent v0.3.3 // indirect
        github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e // indirect
-       go.opentelemetry.io/auto/sdk v1.1.0 // indirect
+       go.opentelemetry.io/auto/sdk v1.2.1 // indirect
        
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.63.0 // indirect
        go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.63.0 
// indirect
        go.opentelemetry.io/otel/metric v1.38.0 // indirect
@@ -129,9 +128,9 @@
        golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b // indirect
        golang.org/x/net v0.47.0 // indirect
        golang.org/x/text v0.31.0 // indirect
-       google.golang.org/genproto/googleapis/api 
v0.0.0-20250825161204-c5933d9347a5 // indirect
-       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251103181224-f26f9409b101 // indirect
-       google.golang.org/grpc v1.76.0 // indirect
+       google.golang.org/genproto/googleapis/api 
v0.0.0-20251022142026-3a174f9686a8 // indirect
+       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251124214823-79d6a2a48846 // indirect
+       google.golang.org/grpc v1.77.0 // indirect
        google.golang.org/protobuf v1.36.10 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.30.26/go.sum new/apko-0.30.28/go.sum
--- old/apko-0.30.26/go.sum     2025-11-22 22:03:56.000000000 +0100
+++ new/apko-0.30.28/go.sum     2025-12-03 22:02:57.000000000 +0100
@@ -1,7 +1,7 @@
 chainguard.dev/go-grpc-kit v0.17.15 
h1:y+FBjta2lsC0XxlkG+W5P1VxYl0zG74GRvoYN2o+p7s=
 chainguard.dev/go-grpc-kit v0.17.15/go.mod 
h1:1wAVAX2CCamtFlfMs9PFzfgQQxX1/TQyF6cbWApbJ2U=
-chainguard.dev/sdk v0.1.43 h1:5IuSdcef87LweaWDmsywt3fGRIgSK7QqfOCrUnBx66s=
-chainguard.dev/sdk v0.1.43/go.mod 
h1:PmdD+1dlhhyxRnwzX/1rkPlSK7QPcpfP8+Bly8D03Lg=
+chainguard.dev/sdk v0.1.44 h1:N65xDKBSgZ/y8M8F/BZUv2sjMHxDKTPV5RieTg6mqew=
+chainguard.dev/sdk v0.1.44/go.mod 
h1:sOIIIsNAfdlDdm+it6viMvVsgXHOVwJ8tDi4CKpbjnI=
 cloud.google.com/go/auth v0.17.0 
h1:74yCm7hCj2rUyyAocqnFzsAYXgJhrG26XCFimrc/Kz4=
 cloud.google.com/go/auth v0.17.0/go.mod 
h1:6wv/t5/6rOPAX4fJiRjKkJCvswLwdet7G8+UGXt7nCQ=
 cloud.google.com/go/auth/oauth2adapt v0.2.8 
h1:keo8NaayQZ6wimpNSmW5OPc283g65QNIiLpZnkHRbnc=
@@ -59,8 +59,8 @@
 github.com/containerd/errdefs/pkg v0.3.0/go.mod 
h1:NJw6s9HwNuRhnjJhM7pylWwMyAkmCQvQ4GpJHEqRLVk=
 github.com/containerd/log v0.1.0 
h1:TCJt7ioM2cr/tfR8GPbGf9/VRAX8D2B4PjzCpfX540I=
 github.com/containerd/log v0.1.0/go.mod 
h1:VRRf09a7mHDIRezVKTRCrOq78v577GXq3bSa3EhrzVo=
-github.com/containerd/stargz-snapshotter/estargz v0.16.3 
h1:7evrXtoh1mSbGj/pfRccTampEyKpjpOnS3CyiV1Ebr8=
-github.com/containerd/stargz-snapshotter/estargz v0.16.3/go.mod 
h1:uyr4BfYfOj3G9WBVE8cOlQmXAbPN9VEQpBBeJIuOipU=
+github.com/containerd/stargz-snapshotter/estargz v0.18.1 
h1:cy2/lpgBXDA3cDKSyEfNOFMA/c10O1axL69EU7iirO8=
+github.com/containerd/stargz-snapshotter/estargz v0.18.1/go.mod 
h1:ALIEqa7B6oVDsrF37GkGN20SuvG/pIMm7FwP7ZmRb0Q=
 github.com/cpuguy83/go-md2man/v2 v2.0.6/go.mod 
h1:oOW0eioCTA6cOiMLiUPZOpcVxMig6NIQQ7OS05n1F4g=
 github.com/cyphar/filepath-securejoin v0.4.1 
h1:JyxxyPEaktOD+GAnqIqTf9A8tHyAG22rowi7HkoSU1s=
 github.com/cyphar/filepath-securejoin v0.4.1/go.mod 
h1:Sdj7gXlvMcPZsbhwhQ33GguGLDGQL7h7bg04C/+u9jI=
@@ -70,14 +70,14 @@
 github.com/davecgh/go-spew v1.1.2-0.20180830191138-d8f796af33cc/go.mod 
h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38=
 github.com/distribution/reference v0.6.0 
h1:0IXCQ5g4/QMHHkarYzh5l+u8T3t73zM5QvfrDyIgxBk=
 github.com/distribution/reference v0.6.0/go.mod 
h1:BbU0aIcezP1/5jX/8MP0YiH4SdvB5Y4f/wlDRiLyi3E=
-github.com/docker/cli v28.4.0+incompatible 
h1:RBcf3Kjw2pMtwui5V0DIMdyeab8glEw5QY0UUU4C9kY=
-github.com/docker/cli v28.4.0+incompatible/go.mod 
h1:JLrzqnKDaYBop7H2jaqPtU4hHvMKP+vjCwu2uszcLI8=
+github.com/docker/cli v29.0.3+incompatible 
h1:8J+PZIcF2xLd6h5sHPsp5pvvJA+Sr2wGQxHkRl53a1E=
+github.com/docker/cli v29.0.3+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.3.3+incompatible 
h1:Dypm25kh4rmk49v1eiVbsAtpAsYURjYkaKubwuBdxEI=
-github.com/docker/docker v28.3.3+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
-github.com/docker/docker-credential-helpers v0.9.3 
h1:gAm/VtF9wgqJMoxzT3Gj5p4AqIjCBS4wrsOh9yRqcz8=
-github.com/docker/docker-credential-helpers v0.9.3/go.mod 
h1:x+4Gbw9aGmChi3qTLZj8Dfn0TD20M/fuWy0E5+WDeCo=
+github.com/docker/docker v28.5.2+incompatible 
h1:DBX0Y0zAjZbSrm1uzOkdr1onVghKaftjlSWt4AFexzM=
+github.com/docker/docker v28.5.2+incompatible/go.mod 
h1:eEKB0N0r5NX/I1kEveEz05bcu8tLC/8azJZsviup8Sk=
+github.com/docker/docker-credential-helpers v0.9.4 
h1:76ItO69/AP/V4yT9V4uuuItG0B1N8hvt0T0c0NN/DzI=
+github.com/docker/docker-credential-helpers v0.9.4/go.mod 
h1:v1S+hepowrQXITkEfw6o4+BMbGot02wiKpzWhGUZK6c=
 github.com/docker/go-connections v0.5.0 
h1:USnMq7hx7gwdVZq1L49hLXaFtUdTADjXGp+uj1Br63c=
 github.com/docker/go-connections v0.5.0/go.mod 
h1:ov60Kzw0kKElRwhNs9UlUHAE/F9Fe6GLaXnqyDdmEXc=
 github.com/docker/go-units v0.5.0 
h1:69rxXcBk27SvSaaxTtLh/8llcHD8vYHT7WSdRZ/jvr4=
@@ -100,8 +100,8 @@
 github.com/go-git/go-billy/v5 v5.6.2/go.mod 
h1:rcFC2rAsp/erv7CMz9GczHcuD0D32fWzH+MJAU+jaUU=
 github.com/go-git/go-git-fixtures/v4 v4.3.2-0.20231010084843-55a94097c399 
h1:eMje31YglSBqCdIqdhKBW8lokaMrL3uTkpGYlE2OOT4=
 github.com/go-git/go-git-fixtures/v4 
v4.3.2-0.20231010084843-55a94097c399/go.mod 
h1:1OCfN199q1Jm3HZlxleg+Dw/mwps2Wbk9frAWm+4FII=
-github.com/go-git/go-git/v5 v5.16.3 
h1:Z8BtvxZ09bYm/yYNgPKCzgWtaRqDTgIKRgIRHBfU6Z8=
-github.com/go-git/go-git/v5 v5.16.3/go.mod 
h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
+github.com/go-git/go-git/v5 v5.16.4 
h1:7ajIEZHZJULcyJebDLo99bGgS0jRrOxzZG4uCk2Yb2Y=
+github.com/go-git/go-git/v5 v5.16.4/go.mod 
h1:4Ge4alE/5gPs30F2H1esi2gPd69R0C39lolkucHBOp8=
 github.com/go-jose/go-jose/v3 v3.0.4 
h1:Wp5HA7bLQcKnf6YYao/4kpRpVMp/yf6+pJKV8WFSaNY=
 github.com/go-jose/go-jose/v3 v3.0.4/go.mod 
h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
 github.com/go-logfmt/logfmt v0.6.0 
h1:wGYYu3uicYdqXVgoYbvnkrPVXkuLM1p1ifugDMEdRi4=
@@ -111,8 +111,6 @@
 github.com/go-logr/logr v1.4.3/go.mod 
h1:9T104GzyrTigFIr8wt5mBrctHMim0Nb2HLGrmQ40KvY=
 github.com/go-logr/stdr v1.2.2 h1:hSWxHoqTgW2S2qGc0LTAI563KZ5YKYRhT3MFKZMbjag=
 github.com/go-logr/stdr v1.2.2/go.mod 
h1:mMo/vtBO5dYbehREoey6XUKy/eSumjCCveDpRre4VKE=
-github.com/gogo/protobuf v1.3.2 h1:Ov1cvc58UF3b5XjBnZv7+opcTcQFZebYjWzi34vdm4Q=
-github.com/gogo/protobuf v1.3.2/go.mod 
h1:P1XiOD3dCwIKUDQYPy72D8LYyHL2YPYrpS2s69NZV8Q=
 github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8 
h1:f+oWsMOmNPc8JmEHVZIycC7hBoQxHH9pNKQORJNozsQ=
 github.com/golang/groupcache v0.0.0-20241129210726-2c02b8208cf8/go.mod 
h1:wcDNUvekVysuuOpQKo3191zZyTpiI6se1N1ULghS0sw=
 github.com/golang/protobuf v1.5.4 
h1:i7eJL8qZTpSEXOPTxNKhASYpMn+8e5Q6AdndVa1dWek=
@@ -122,8 +120,8 @@
 github.com/google/go-cmp v0.6.0/go.mod 
h1:17dUlkBOakJ0+DkrSSNjCkIjxS6bF9zb3elmeNGIjoY=
 github.com/google/go-cmp v0.7.0 h1:wk8382ETsv4JYUZwIsn6YpYiWiBsYLSJiTsyBybVuN8=
 github.com/google/go-cmp v0.7.0/go.mod 
h1:pXiqmnSA92OHEEa9HXL2W4E7lf9JzCmGVUdgjX3N/iU=
-github.com/google/go-containerregistry v0.20.6 
h1:cvWX87UxxLgaH76b4hIvya6Dzz9qHB31qAwjAohdSTU=
-github.com/google/go-containerregistry v0.20.6/go.mod 
h1:T0x8MuoAoKX/873bkeSfLD2FAkwCDf9/HZgsFJ02E2Y=
+github.com/google/go-containerregistry v0.20.7 
h1:24VGNpS0IwrOZ2ms2P1QE3Xa5X9p4phx0aUgzYzHW6I=
+github.com/google/go-containerregistry v0.20.7/go.mod 
h1:Lx5LCZQjLH1QBaMPeGwsME9biPeo1lPx6lbGj/UmzgM=
 github.com/google/s2a-go v0.1.9 h1:LGD7gtMgezd8a/Xak7mEWL0PjoTQFvpRudN895yqKW0=
 github.com/google/s2a-go v0.1.9/go.mod 
h1:YA0Ei2ZQL3acow2O62kdp9UlnvMmU7kA6Eutn0dXayM=
 github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510 
h1:El6M4kTTCOh6aBiKaUGG7oYTSPP8MxqL4YI3kZKwcP4=
@@ -136,10 +134,10 @@
 github.com/googleapis/gax-go/v2 v2.15.0/go.mod 
h1:zVVkkxAQHa1RQpg9z2AUCMnKhi0Qld9rcmyfL1OZhoc=
 github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus v1.1.0 
h1:QGLs/O40yoNK9vmy4rhUGBVyMf1lISBGtXRpsu/Qu/o=
 github.com/grpc-ecosystem/go-grpc-middleware/providers/prometheus 
v1.1.0/go.mod h1:hM2alZsMUni80N33RBe6J0e423LB+odMj7d3EMP9l20=
-github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2 
h1:sGm2vDRFUrQJO/Veii4h4zG2vvqG6uWNkBHSTqXOZk0=
-github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.2/go.mod 
h1:wd1YpapPLivG6nQgbf7ZkG1hhSOXDhhn4MLTknx2aAc=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2 
h1:8Tjv8EJ+pM1xP8mK6egEbD1OgnVTyacbefKhmbLhIhU=
-github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.2/go.mod 
h1:pkJQ2tZHJ0aFOVEEot6oZmaVEZcRme73eIFmhiVuRWs=
+github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3 
h1:B+8ClL/kCQkRiU82d9xajRPKYMrB7E0MbtzWVi1K4ns=
+github.com/grpc-ecosystem/go-grpc-middleware/v2 v2.3.3/go.mod 
h1:NbCUVmiS4foBGBHOYlCT25+YmGpJ32dZPi75pGEUpj4=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3 
h1:NmZ1PKzSTQbuGHw9DGPFomqkkLWMC+vZCkfs+FHv1Vg=
+github.com/grpc-ecosystem/grpc-gateway/v2 v2.27.3/go.mod 
h1:zQrxl1YP88HQlA6i9c63DSVPFklWpGX4OWAc9bFuaH4=
 github.com/hashicorp/go-cleanhttp v0.5.2 
h1:035FKYIWjmULyFRBKPs8TBQoi0x6d9G4xc9neXJWAZQ=
 github.com/hashicorp/go-cleanhttp v0.5.2/go.mod 
h1:kO/YDlP8L1346E6Sodw+PrpBSV4/SoxCXGY6BqNFT48=
 github.com/hashicorp/go-hclog v1.6.3 
h1:Qr2kF+eVWjTiYmU7Y31tYlP1h0q/X3Nl3tPGdaB11/k=
@@ -157,10 +155,8 @@
 github.com/kelseyhightower/envconfig v1.4.0/go.mod 
h1:cccZRl6mQpaq41TPp5QxidR+Sa3axMbJDNb//FQX6Gg=
 github.com/kevinburke/ssh_config v1.2.0 
h1:x584FjTGwHzMwvHx18PXxbBVzfnxogHaAReU4gf13a4=
 github.com/kevinburke/ssh_config v1.2.0/go.mod 
h1:CT57kijsi8u/K/BOFA39wgDQJ9CxiF4nAY/ojJ6r6mM=
-github.com/kisielk/errcheck v1.5.0/go.mod 
h1:pFxgyoBC7bSaBwPgfKdkLd5X25qrDl4LWUI2bnpBCr8=
-github.com/kisielk/gotool v1.0.0/go.mod 
h1:XhKaO+MFFWcvkIS/tQcRk01m1F5IRFswLeQ+oQHNcck=
-github.com/klauspost/compress v1.18.1 
h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co=
-github.com/klauspost/compress v1.18.1/go.mod 
h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0=
+github.com/klauspost/compress v1.18.2 
h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk=
+github.com/klauspost/compress v1.18.2/go.mod 
h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4=
 github.com/klauspost/pgzip v1.2.6 
h1:8RXeL5crjEUFnR2/Sn6GJNWtSQ3Dk8pq4CL3jvdDyjU=
 github.com/klauspost/pgzip v1.2.6/go.mod 
h1:Ch1tH69qFZu15pkjo5kYi6mth2Zzwzt50oCQKQE9RUs=
 github.com/kr/pretty v0.1.0/go.mod 
h1:dAy3ld7l9f0ibDNOQOHHMYYIIbhfbHSm3C4ZsoJORNo=
@@ -254,21 +250,19 @@
 github.com/u-root/u-root v0.15.0/go.mod 
h1:/0Qr7qJeDwWxoKku2xKQ4Szc+SwBE3g9VE8jNiamsmc=
 github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701 
h1:pyC9PaHYZFgEKFdlp3G8RaCKgVpHZnecvArXvPXcFkM=
 github.com/u-root/uio v0.0.0-20240224005618-d2acac8f3701/go.mod 
h1:P3a5rG4X7tI17Nn3aOIAYr5HbIMukwXG0urG0WuL8OA=
-github.com/vbatts/tar-split v0.12.1 
h1:CqKoORW7BUWBe7UL/iqTVvkTBOF8UvOMKOIZykxnnbo=
-github.com/vbatts/tar-split v0.12.1/go.mod 
h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA=
+github.com/vbatts/tar-split v0.12.2 
h1:w/Y6tjxpeiFMR47yzZPlPj/FcPLpXbTUi/9H7d3CPa4=
+github.com/vbatts/tar-split v0.12.2/go.mod 
h1:eF6B6i6ftWQcDqEn3/iGFRFRo8cBIMSJVOpnNdfTMFA=
 github.com/wk8/go-ordered-map/v2 v2.1.8 
h1:5h/BUHu93oj4gIdvHHHGsScSTMijfx5PeYkE/fJgbpc=
 github.com/wk8/go-ordered-map/v2 v2.1.8/go.mod 
h1:5nJHM5DyteebpVlHnWMV0rPz6Zp7+xBAnxjb1X5vnTw=
 github.com/xanzy/ssh-agent v0.3.3 
h1:+/15pJfg/RsTxqYcX6fHqOXZwwMP+2VyYWJeWM2qQFM=
 github.com/xanzy/ssh-agent v0.3.3/go.mod 
h1:6dzNDKs0J9rVPHPhaGCukekBHKqfl+L3KghI1Bc68Uw=
 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e 
h1:JVG44RsyaB9T2KIHavMF/ppJZNG9ZpyihvCd0w101no=
 github.com/xo/terminfo v0.0.0-20220910002029-abceb7e1c41e/go.mod 
h1:RbqR21r5mrJuqunuUZ/Dhy/avygyECGrLceyNeo4LiM=
-github.com/yuin/goldmark v1.1.27/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
-github.com/yuin/goldmark v1.2.1/go.mod 
h1:3hX8gzYuyVAZsxl0MRgGTJEmQBFcNTphYh9decYSb74=
 github.com/yuin/goldmark v1.4.13/go.mod 
h1:6yULJ656Px+3vBD8DxQVa3kxgyrAnzto9xy5taEt/CY=
 go.lsp.dev/uri v0.3.0 h1:KcZJmh6nFIBeJzTugn5JTU6OOyG0lDOo3R9KwTxTYbo=
 go.lsp.dev/uri v0.3.0/go.mod h1:P5sbO1IQR+qySTWOCnhnK7phBx+W3zbLqSMDJNTw88I=
-go.opentelemetry.io/auto/sdk v1.1.0 
h1:cH53jehLUN6UFLY71z+NDOiNJqDdPRaXzTel0sJySYA=
-go.opentelemetry.io/auto/sdk v1.1.0/go.mod 
h1:3wSPjt5PWp2RhlCcmmOial7AvC4DQqZb7a7wCow3W8A=
+go.opentelemetry.io/auto/sdk v1.2.1 
h1:jXsnJ4Lmnqd11kwkBV2LgLoFMZKizbCi5fNZ/ipaZ64=
+go.opentelemetry.io/auto/sdk v1.2.1/go.mod 
h1:KRTj+aOaElaLi+wW1kO/DZRXwkF4C5xPbEe3ZiIhN7Y=
 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/net/http/otelhttp v0.63.0 
h1:RbKq8BG0FI8OiXhBfcRtqqHcZcka+gU3cskNuf05R18=
@@ -289,15 +283,13 @@
 go.opentelemetry.io/otel/trace v1.38.0/go.mod 
h1:j1P9ivuFsTceSWe1oY+EeW3sc+Pp42sO++GHkg4wwhs=
 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.step.sm/crypto v0.74.0 h1:/APBEv45yYR4qQFg47HA8w1nesIGcxh44pGyQNw6JRA=
-go.step.sm/crypto v0.74.0/go.mod 
h1:UoXqCAJjjRgzPte0Llaqen7O9P7XjPmgjgTHQGkKCDk=
+go.step.sm/crypto v0.75.0 h1:UAHYD6q6ggYyzLlIKHv1MCUVjZIesXRZpGTlRC/HSHw=
+go.step.sm/crypto v0.75.0/go.mod 
h1:wwQ57+ajmDype9mrI/2hRyrvJd7yja5xVgWYqpUN3PE=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
 go.uber.org/goleak v1.3.0/go.mod 
h1:CoHD4mav9JJNrW/WLlf7HGZPjdw8EucARQHekz1X6bE=
 go.yaml.in/yaml/v2 v2.4.2 h1:DzmwEr2rDGHl7lsFgAHxmNz/1NlQ7xLIrlN2h5d1eGI=
 go.yaml.in/yaml/v2 v2.4.2/go.mod 
h1:081UH+NErpNdqlCXm3TtEran0rJZGxAYx9hb/ELlsPU=
 golang.org/x/crypto v0.0.0-20190308221718-c2843e01d9a2/go.mod 
h1:djNgcEr1/C05ACkg1iLfiJU5Ep61QUkGW8qpdssI0+w=
-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.0.0-20220622213112-05595931fe9d/go.mod 
h1:IxCIyHEi3zRg3s0A5j5BB6A9Jmi73HwBIUl50j+osU4=
 golang.org/x/crypto v0.19.0/go.mod 
h1:Iy9bg/ha4yyC70EfRS8jz+B6ybOBKMaSxLj6P6oBDfU=
@@ -305,16 +297,11 @@
 golang.org/x/crypto v0.45.0/go.mod 
h1:XTGrrkGJve7CYK7J8PEww4aY7gM3qMCElcJQ8n8JdX4=
 golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b 
h1:M2rDM6z3Fhozi9O7NWsxAkg/yqS/lQJ6PmkyIV3YP+o=
 golang.org/x/exp v0.0.0-20250620022241-b7579e27df2b/go.mod 
h1:3//PLf8L/X+8b4vuAfHzxeRUl04Adcb341+IGKfnqS8=
-golang.org/x/mod v0.2.0/go.mod h1:s0Qsj1ACt9ePp/hMypM3fl4fZqREWJwdYDEqhRiZZUA=
-golang.org/x/mod v0.3.0/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.8.0/go.mod h1:iBbtSCu2XBx23ZKBPSOrRkjjQPZFPuis4dIYUhu/chs=
-golang.org/x/mod v0.29.0 h1:HV8lRxZC4l2cr3Zq1LvtOsi/ThTgWnUk/y64QSs8GwA=
-golang.org/x/mod v0.29.0/go.mod h1:NyhrlYXJ2H4eJiRy/WDBO6HMqZQ6q9nk4JzS3NuCK+w=
-golang.org/x/net v0.0.0-20190404232315-eb5bcb51f2a3/go.mod 
h1:t9HGtf8HONx5eT2rtn7q6eTqICYqUVnKs3thJo3Qplg=
+golang.org/x/mod v0.30.0 h1:fDEXFVZ/fmCKProc/yAXXUijritrDzahmwwefnjoPFk=
+golang.org/x/mod v0.30.0/go.mod h1:lAsf5O2EvJeSFMiBxXDki7sCgAxEUcZHXoXMKT4GJKc=
 golang.org/x/net v0.0.0-20190620200207-3b0461eec859/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20200226121028-0de0cce0169b/go.mod 
h1:z5CRVTTTmAJ677TzLLGU+0bjPO0LkuOLi4/5GtJWs/s=
-golang.org/x/net v0.0.0-20201021035429-f5854403a974/go.mod 
h1:sp8m0HH+o8qH0wwXwYZr8TS3Oi6o0r6Gce1SSxlDquU=
 golang.org/x/net v0.0.0-20210226172049-e18ecbb05110/go.mod 
h1:m0MpNAwzfU5UDzcl9v0D8zg8gWTRqZa9RBIspLL5mdg=
 golang.org/x/net v0.0.0-20211112202133-69e39bad7dc2/go.mod 
h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y=
 golang.org/x/net v0.0.0-20220722155237-a158d28d115b/go.mod 
h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c=
@@ -325,16 +312,12 @@
 golang.org/x/oauth2 v0.33.0 h1:4Q+qn+E5z8gPRJfmRy7C2gGG3T4jIprK6aSYgTXGRpo=
 golang.org/x/oauth2 v0.33.0/go.mod 
h1:lzm5WQJQwKZ3nwavOZ3IS5Aulzxi68dUSgRHujetwEA=
 golang.org/x/sync v0.0.0-20190423024810-112230192c58/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20190911185100-cd5d95a43a6e/go.mod 
h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
-golang.org/x/sync v0.0.0-20201020160332-67f06af15bc9/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.1.0/go.mod h1:RxMgew5VJxzue5/jJTE5uejpjVlOe/izrB70Jof72aM=
 golang.org/x/sync v0.18.0 h1:kr88TuHDroi+UVf+0hZnirlk8o8T+4MrK6mr60WkH/I=
 golang.org/x/sync v0.18.0/go.mod 
h1:9KTHXmSnoGruLpwFjVSX0lNNA75CykiMECbovNTZqGI=
 golang.org/x/sys v0.0.0-20190215142949-d0b11bdaac8a/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
-golang.org/x/sys v0.0.0-20190412213103-97732733099d/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20191026070338-33540a1f6037/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
-golang.org/x/sys v0.0.0-20200930185726-fdedc70b468f/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20201119102817-f84b799fce68/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210124154548-22da62e12c0c/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
 golang.org/x/sys v0.0.0-20210423082822-04245dca01da/go.mod 
h1:h1NjWce9XRLGQEsW7wpKNCjG9DtNlClVuFLEZdDNbEs=
@@ -369,26 +352,22 @@
 golang.org/x/time v0.14.0/go.mod 
h1:eL/Oa2bBBK0TkX57Fyni+NgnyQQN4LitPmob2Hjnqw4=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20191119224855-298f0cb1881e/go.mod 
h1:b+2E5dAYhXwXZwtnZ6UAqBI28+e2cm9otk0dWdXHAEo=
-golang.org/x/tools v0.0.0-20200619180055-7c47624df98f/go.mod 
h1:EkVYQZoAsY45+roYkvgYkIh4xh/qjgUK9TdY2XT94GE=
-golang.org/x/tools v0.0.0-20210106214847-113979e3529a/go.mod 
h1:emZCQorbCU4vsT4fOWvOPXz4eW1wZW4PmDk9uLelYpA=
 golang.org/x/tools v0.1.12/go.mod 
h1:hNGJHUnrk76NpqgfD5Aqm5Crs+Hm0VOH/i9J2+nxYbc=
 golang.org/x/tools v0.6.0/go.mod 
h1:Xwgl3UAJ/d3gWutnCtw505GrjyAbvKui8lOU390QaIU=
-golang.org/x/tools v0.38.0 h1:Hx2Xv8hISq8Lm16jvBZ2VQf+RLmbd7wVUsALibYI/IQ=
-golang.org/x/tools v0.38.0/go.mod 
h1:yEsQ/d/YK8cjh0L6rZlY8tgtlKiBNTL14pGDJPJpYQs=
+golang.org/x/tools v0.39.0 h1:ik4ho21kwuQln40uelmciQPp9SipgNDdrafrYA4TmQQ=
+golang.org/x/tools v0.39.0/go.mod 
h1:JnefbkDPyD8UU2kI5fuf8ZX4/yUeh9W877ZeBONxUqQ=
 golang.org/x/xerrors v0.0.0-20190717185122-a985d3407aa7/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20191011141410-1b5146add898/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 golang.org/x/xerrors v0.0.0-20191204190536-9bdfabe68543/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
-golang.org/x/xerrors v0.0.0-20200804184101-5ec99f83aff1/go.mod 
h1:I/5z698sn9Ka8TeJc9MKroUUfqBBauWjQqLJ2OPfmY0=
 gonum.org/v1/gonum v0.16.0 h1:5+ul4Swaf3ESvrOnidPp4GZbzf0mxVQpDCYUQE7OJfk=
 gonum.org/v1/gonum v0.16.0/go.mod 
h1:fef3am4MQ93R2HHpKnLk4/Tbh/s0+wqD5nfa6Pnwy4E=
-google.golang.org/api v0.256.0 h1:u6Khm8+F9sxbCTYNoBHg6/Hwv0N/i+V94MvkOSor6oI=
-google.golang.org/api v0.256.0/go.mod 
h1:KIgPhksXADEKJlnEoRa9qAII4rXcy40vfI8HRqcU964=
-google.golang.org/genproto/googleapis/api v0.0.0-20250825161204-c5933d9347a5 
h1:BIRfGDEjiHRrk0QKZe3Xv2ieMhtgRGeLcZQ0mIVn4EY=
-google.golang.org/genproto/googleapis/api 
v0.0.0-20250825161204-c5933d9347a5/go.mod 
h1:j3QtIyytwqGr1JUDtYXwtMXWPKsEa5LtzIFN1Wn5WvE=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20251103181224-f26f9409b101 
h1:tRPGkdGHuewF4UisLzzHHr1spKw92qLM98nIzxbC0wY=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251103181224-f26f9409b101/go.mod 
h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
-google.golang.org/grpc v1.76.0 h1:UnVkv1+uMLYXoIz6o7chp59WfQUYA2ex/BXQ9rHZu7A=
-google.golang.org/grpc v1.76.0/go.mod 
h1:Ju12QI8M6iQJtbcsV+awF5a4hfJMLi4X0JLo94ULZ6c=
+google.golang.org/api v0.257.0 h1:8Y0lzvHlZps53PEaw+G29SsQIkuKrumGWs9puiexNAA=
+google.golang.org/api v0.257.0/go.mod 
h1:4eJrr+vbVaZSqs7vovFd1Jb/A6ml6iw2e6FBYf3GAO4=
+google.golang.org/genproto/googleapis/api v0.0.0-20251022142026-3a174f9686a8 
h1:mepRgnBZa07I4TRuomDE4sTIYieg/osKmzIf4USdWS4=
+google.golang.org/genproto/googleapis/api 
v0.0.0-20251022142026-3a174f9686a8/go.mod 
h1:fDMmzKV90WSg1NbozdqrE64fkuTv6mlq2zxo9ad+3yo=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20251124214823-79d6a2a48846 
h1:Wgl1rcDNThT+Zn47YyCXOXyX/COgMTIdhJ717F0l4xk=
+google.golang.org/genproto/googleapis/rpc 
v0.0.0-20251124214823-79d6a2a48846/go.mod 
h1:7i2o+ce6H/6BluujYR+kqX3GKH+dChPTQU19wjRPiGk=
+google.golang.org/grpc v1.77.0 h1:wVVY6/8cGA6vvffn+wWK5ToddbgdU3d8MNENr4evgXM=
+google.golang.org/grpc v1.77.0/go.mod 
h1:z0BY1iVj0q8E1uSQCjL9cppRj+gnZjzDnzV0dHhrNig=
 google.golang.org/protobuf v1.36.10 
h1:AYd7cD/uASjIL6Q9LiTjz8JLcrh/88q5UObnmY3aOOE=
 google.golang.org/protobuf v1.36.10/go.mod 
h1:HTf+CrKn2C3g5S8VImy6tdcUvCska2kB7j23XfzDpco=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.30.26/internal/cli/publish_test.go 
new/apko-0.30.28/internal/cli/publish_test.go
--- old/apko-0.30.26/internal/cli/publish_test.go       2025-11-22 
22:03:56.000000000 +0100
+++ new/apko-0.30.28/internal/cli/publish_test.go       2025-12-03 
22:02:57.000000000 +0100
@@ -15,6 +15,7 @@
 package cli_test
 
 import (
+       "archive/tar"
        "context"
        "fmt"
        "io"
@@ -29,9 +30,11 @@
 
        "github.com/google/go-containerregistry/pkg/name"
        "github.com/google/go-containerregistry/pkg/registry"
+       v1 "github.com/google/go-containerregistry/pkg/v1"
        "github.com/google/go-containerregistry/pkg/v1/mutate"
        "github.com/google/go-containerregistry/pkg/v1/remote"
        "github.com/google/go-containerregistry/pkg/v1/validate"
+       "github.com/stretchr/testify/assert"
        "github.com/stretchr/testify/require"
 
        "chainguard.dev/apko/internal/cli"
@@ -87,6 +90,8 @@
        idx, err := remote.Index(ref, ropt...)
        require.NoError(t, err)
 
+       checkEarlyFiles(t, idx)
+
        // Not strictly necessary, but this will validate that the index is 
well-formed.
        require.NoError(t, validate.Index(idx))
 
@@ -159,6 +164,8 @@
        idx, err := remote.Index(ref, ropt...)
        require.NoError(t, err)
 
+       checkEarlyFiles(t, idx)
+
        // Not strictly necessary, but this will validate that the index is 
well-formed.
        require.NoError(t, validate.Index(idx))
 
@@ -201,3 +208,46 @@
                }
        }
 }
+
+// checkEarlyFiles ensures that certain important files are present
+// early in the image tarball, which can help with performance when
+// extracting or using the image.
+func checkEarlyFiles(t *testing.T, idx v1.ImageIndex) {
+       mf, err := idx.IndexManifest()
+       require.NoError(t, err)
+       require.NotEmpty(t, len(mf.Manifests))
+
+       img, err := idx.Image(mf.Manifests[0].Digest)
+       require.NoError(t, err)
+
+       rc := mutate.Extract(img)
+       defer rc.Close()
+       tr := tar.NewReader(rc)
+
+       fileOffsets := map[string]int{}
+       offset := 0
+       for {
+               h, err := tr.Next()
+               if err == io.EOF {
+                       break
+               }
+               require.NoError(t, err)
+
+               fileOffsets[h.Name] = offset
+               offset += int(h.Size)
+       }
+
+       requiredFiles := []string{
+               "etc/apk/repositories",
+               "etc/passwd",
+               "etc/apko.json",
+               "etc/os-release",
+       }
+       maxOffset := 4000 // files should be in the first N bytes of the 
extracted tar
+       for _, f := range requiredFiles {
+               pos, ok := fileOffsets[f]
+               assert.True(t, ok, "file %q not found in image", f)
+               t.Logf("file %q found at offset %d", f, pos)
+               assert.Less(t, pos, maxOffset, "file %q found too late in image 
(pos %d)", f, pos)
+       }
+}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.30.26/pkg/apk/apk/implementation.go 
new/apko-0.30.28/pkg/apk/apk/implementation.go
--- old/apko-0.30.26/pkg/apk/apk/implementation.go      2025-11-22 
22:03:56.000000000 +0100
+++ new/apko-0.30.28/pkg/apk/apk/implementation.go      2025-12-03 
22:02:57.000000000 +0100
@@ -640,7 +640,6 @@
        for i, pkg := range allpkgs {
                g.Go(func() error {
                        expanded, err := a.expandPackage(ctx, pkg)
-
                        if err != nil {
                                return fmt.Errorf("expanding %s: %w", pkg.Name, 
err)
                        }
@@ -1262,31 +1261,33 @@
 }
 
 type apkCache struct {
-       // url -> *sync.Once
+       // url -> func() apkResult (from sync.OnceValue(...))
        onces sync.Map
-
-       // url -> apkResult
-       resps sync.Map
 }
 
 func (c *apkCache) get(ctx context.Context, a *APK, pkg InstallablePackage) 
(*expandapk.APKExpanded, error) {
        u := pkg.URL()
-       // Do all the expensive things inside the once.
-       once, _ := c.onces.LoadOrStore(u, &sync.Once{})
-       once.(*sync.Once).Do(func() {
+       // Do all the expensive things inside sync.OnceValue()
+       fn := func() apkResult {
                exp, err := expandPackage(ctx, a, pkg)
-               c.resps.Store(u, apkResult{
+               return apkResult{
                        exp: exp,
                        err: err,
-               })
-       })
-
-       v, ok := c.resps.Load(u)
-       if !ok {
-               panic(fmt.Errorf("did not see apk %q after writing it", u))
+               }
+       }
+       once, cached := c.onces.LoadOrStore(u, sync.OnceValue(fn))
+       result := once.(func() apkResult)()
+       if cached && result.exp != nil {
+               // If we find a value in the cache, we should check to make 
sure the tar file it references still exists.
+               // If it references a non-existent file, we should act as 
though this was a cache miss and expand the
+               // APK again.
+               if _, err := os.Stat(result.exp.TarFile); os.IsNotExist(err) {
+                       newValue := sync.OnceValue(fn)
+                       c.onces.Store(u, newValue)
+                       result = newValue()
+               }
        }
 
-       result := v.(apkResult)
        return result.exp, result.err
 }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.30.26/pkg/apk/apk/implementation_test.go 
new/apko-0.30.28/pkg/apk/apk/implementation_test.go
--- old/apko-0.30.26/pkg/apk/apk/implementation_test.go 2025-11-22 
22:03:56.000000000 +0100
+++ new/apko-0.30.28/pkg/apk/apk/implementation_test.go 2025-12-03 
22:02:57.000000000 +0100
@@ -753,6 +753,29 @@
                require.NoError(t, err, "unable to read previous apk file")
                require.Equal(t, apk1, apk2, "apk files do not match")
        })
+       t.Run("handle missing cache files when expanding APK", func(t 
*testing.T) {
+               tmpDir := t.TempDir()
+               a := prepLayout(t, tmpDir)
+               // Fill the cache
+               exp, err := a.expandPackage(ctx, pkg)
+               require.NoError(t, err, "unable to expand package")
+               _, err = os.Stat(exp.TarFile)
+               require.NoError(t, err, "unable to stat cached tar file")
+               // Delete the tar file from the cache
+               require.NoError(t, os.Remove(exp.TarFile), "unable to delete 
cached tar file")
+               _, err = os.Stat(exp.TarFile)
+               require.ErrorIs(t, err, os.ErrNotExist, "unexpectedly able to 
stat cached tar file that should have been deleted")
+
+               // Expand the package again, this should re-populate the cache.
+               exp2, err := a.expandPackage(ctx, pkg)
+               require.NoError(t, err, "unable to expandPackage after deleting 
cached tar file")
+
+               // We should be able to read the APK contents
+               rc, err := exp2.APK()
+               require.NoError(t, err, "unable to get reader for APK()")
+               _, err = io.ReadAll(rc)
+               require.NoError(t, err, "unable to read APK contents")
+       })
        t.Run("cache hit no etag", func(t *testing.T) {
                tmpDir := t.TempDir()
                a := prepLayout(t, tmpDir)

++++++ apko.obsinfo ++++++
--- /var/tmp/diff_new_pack.wXHyqz/_old  2025-12-05 16:53:21.176147732 +0100
+++ /var/tmp/diff_new_pack.wXHyqz/_new  2025-12-05 16:53:21.188148234 +0100
@@ -1,5 +1,5 @@
 name: apko
-version: 0.30.26
-mtime: 1763845436
-commit: 66fa7ad37f2e6b60faa66043065fc6d7663597bc
+version: 0.30.28
+mtime: 1764795777
+commit: db61eae5fed3d34259684098d4e94d8846ee9ef9
 

++++++ vendor.tar.gz ++++++
/work/SRC/openSUSE:Factory/apko/vendor.tar.gz 
/work/SRC/openSUSE:Factory/.apko.new.1939/vendor.tar.gz differ: char 32, line 1

Reply via email to