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-02-13 18:39:10
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/apko (Old)
 and      /work/SRC/openSUSE:Factory/.apko.new.8181 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "apko"

Thu Feb 13 18:39:10 2025 rev:36 rq:1245531 version:0.25.0

Changes:
--------
--- /work/SRC/openSUSE:Factory/apko/apko.changes        2025-01-31 
16:05:16.358097786 +0100
+++ /work/SRC/openSUSE:Factory/.apko.new.8181/apko.changes      2025-02-13 
18:39:17.836789584 +0100
@@ -1,0 +2,37 @@
+Thu Feb 13 06:17:28 UTC 2025 - opensuse_buildserv...@ojkastl.de
+
+- Update to version 0.25.0:
+  * spdx: explain SHA1 usage (#1501)
+  * Consider already selected packages during solve (#1406)
+  * build(deps): bump github.com/go-git/go-git/v5 from 5.13.1 to
+    5.13.2 (#1491)
+  * build(deps): bump golang.org/x/sys from 0.29.0 to 0.30.0
+    (#1511)
+  * build(deps): bump golang.org/x/sync from 0.10.0 to 0.11.0
+    (#1510)
+  * build(deps): bump github.com/chainguard-dev/clog from 1.5.1 to
+    1.6.1 (#1500)
+  * move some unnecessary logs to debug (#1522)
+  * build(deps): bump golang.org/x/time from 0.9.0 to 0.10.0
+    (#1509)
+  * build(deps): bump go.step.sm/crypto from 0.57.0 to 0.57.1
+    (#1504)
+  * build(deps): bump chainguard.dev/sdk from 0.1.29 to 0.1.31
+    (#1498)
+  * build(deps): bump docker/setup-qemu-action from 3.3.0 to 3.4.0
+    (#1515)
+  * build(deps): bump github.com/sigstore/cosign/v2 from 2.4.1 to
+    2.4.2 (#1517)
+  * build(deps): bump golangci/golangci-lint-action from 6.3.0 to
+    6.3.2 (#1521)
+  * clean up ci permissions and update golangci-lint (#1523)
+  * build(deps): bump goreleaser/goreleaser-action from 6.1.0 to
+    6.2.1 (#1520)
+  * build(deps): bump google.golang.org/api from 0.217.0 to 0.220.0
+    (#1514)
+  * build(deps): bump sigstore/cosign-installer from 3.7.0 to 3.8.0
+    (#1513)
+  * build(deps): bump golangci/golangci-lint-action from 6.2.0 to
+    6.3.0 (#1512)
+
+-------------------------------------------------------------------

Old:
----
  apko-0.24.0.obscpio

New:
----
  apko-0.25.0.obscpio

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

Other differences:
------------------
++++++ apko.spec ++++++
--- /var/tmp/diff_new_pack.SBVdrZ/_old  2025-02-13 18:39:18.616821896 +0100
+++ /var/tmp/diff_new_pack.SBVdrZ/_new  2025-02-13 18:39:18.616821896 +0100
@@ -17,7 +17,7 @@
 
 
 Name:           apko
-Version:        0.24.0
+Version:        0.25.0
 Release:        0
 Summary:        Build OCI images from APK packages directly without Dockerfile
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.SBVdrZ/_old  2025-02-13 18:39:18.660823718 +0100
+++ /var/tmp/diff_new_pack.SBVdrZ/_new  2025-02-13 18:39:18.664823884 +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.24.0</param>
+    <param name="revision">v0.25.0</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.SBVdrZ/_old  2025-02-13 18:39:18.696825210 +0100
+++ /var/tmp/diff_new_pack.SBVdrZ/_new  2025-02-13 18:39:18.700825375 +0100
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/chainguard-dev/apko</param>
-              <param 
name="changesrevision">2668cf55135b756d3b19771deb5c6dc3b26a5233</param></service></servicedata>
+              <param 
name="changesrevision">d47f064ae3c32dce4fb8f60ad288ac1664805373</param></service></servicedata>
 (No newline at EOF)
 

++++++ apko-0.24.0.obscpio -> apko-0.25.0.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.github/workflows/build-samples.yml 
new/apko-0.25.0/.github/workflows/build-samples.yml
--- old/apko-0.24.0/.github/workflows/build-samples.yml 2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/.github/workflows/build-samples.yml 2025-02-12 
22:02:32.000000000 +0100
@@ -7,6 +7,8 @@
     branches: [ "main" ]
   workflow_dispatch:
 
+permissions: {}
+
 jobs:
   # Build a single-arch nginx image for each arch.
   build-nginx-on-all-arches:
@@ -31,7 +33,7 @@
           go-version-file: 'go.mod'
           check-latest: true
       - name: Setup QEMU
-        uses: 
docker/setup-qemu-action@53851d14592bedcffcf25ea515637cff71ef929a # v3.3.0
+        uses: 
docker/setup-qemu-action@4574d27a4764455b42196d70a065bc6853246a25 # v3.4.0
       - run: |
           make apko
           ./apko build ./examples/nginx.yaml nginx:build /tmp/nginx-${{ 
matrix.arch }}.tar --arch ${{ matrix.arch }}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.github/workflows/build.yaml 
new/apko-0.25.0/.github/workflows/build.yaml
--- old/apko-0.24.0/.github/workflows/build.yaml        2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/.github/workflows/build.yaml        2025-02-12 
22:02:32.000000000 +0100
@@ -6,6 +6,8 @@
   push:
     branches: [ "main" ]
 
+permissions: {}
+
 jobs:
   build:
     name: build
@@ -32,7 +34,7 @@
           ./apko version
 
       - name: Setup cosign (needed in CI tests)
-        uses: 
sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da # v3.7.0
+        uses: 
sigstore/cosign-installer@c56c2d3e59e4281cc41dea2217323ba5694b171e # v3.8.0
 
       - name: Setup crane (needed in CI tests)
         uses: imjasonh/setup-crane@31b88efe9de28ae0ffa220711af4b60be9435f6e # 
v0.4
@@ -41,7 +43,7 @@
         run: |
           make ci
 
-      - uses: 
goreleaser/goreleaser-action@9ed2f89a662bf1735a48bc8557fd212fa902bebf # v2.8.1
+      - uses: 
goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v2.8.1
         with:
           install-only: true
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.github/workflows/codeql.yml 
new/apko-0.25.0/.github/workflows/codeql.yml
--- old/apko-0.24.0/.github/workflows/codeql.yml        2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/.github/workflows/codeql.yml        2025-02-12 
22:02:32.000000000 +0100
@@ -19,6 +19,8 @@
   schedule:
     - cron: '36 8 * * 6'
 
+permissions: {}
+
 jobs:
   analyze:
     name: Analyze (${{ matrix.language }})
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.github/workflows/go-tests.yaml 
new/apko-0.25.0/.github/workflows/go-tests.yaml
--- old/apko-0.24.0/.github/workflows/go-tests.yaml     2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/.github/workflows/go-tests.yaml     2025-02-12 
22:02:32.000000000 +0100
@@ -6,6 +6,8 @@
   pull_request:
     branches: [ "main" ]
 
+permissions: {}
+
 jobs:
   test:
     runs-on: ubuntu-latest
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.github/workflows/release.yaml 
new/apko-0.25.0/.github/workflows/release.yaml
--- old/apko-0.24.0/.github/workflows/release.yaml      2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/.github/workflows/release.yaml      2025-02-12 
22:02:32.000000000 +0100
@@ -6,6 +6,8 @@
     tags:
     - 'v*' # Push events to matching v*, i.e. v1.0, v20.15.10
 
+permissions: {}
+
 jobs:
   cli:
     # Only release CLI for tagged releases
@@ -29,9 +31,9 @@
         go-version-file: 'go.mod'
         check-latest: true
 
-    - uses: sigstore/cosign-installer@dc72c7d5c4d10cd6bcb8cf6e3fd625a9e5e537da 
# v3.7.0
+    - uses: sigstore/cosign-installer@c56c2d3e59e4281cc41dea2217323ba5694b171e 
# v3.8.0
 
-    - uses: 
goreleaser/goreleaser-action@9ed2f89a662bf1735a48bc8557fd212fa902bebf # v2.8.1
+    - uses: 
goreleaser/goreleaser-action@90a3faa9d0182683851fbfa97ca1a2cb983bfca3 # v2.8.1
       with:
         install-only: true
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.github/workflows/verify.yaml 
new/apko-0.25.0/.github/workflows/verify.yaml
--- old/apko-0.24.0/.github/workflows/verify.yaml       2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/.github/workflows/verify.yaml       2025-02-12 
22:02:32.000000000 +0100
@@ -6,6 +6,8 @@
   pull_request:
     branches: [ "main" ]
 
+permissions: {}
+
 jobs:
   golangci:
     name: lint
@@ -22,9 +24,9 @@
           check-latest: true
 
       - name: golangci-lint
-        uses: 
golangci/golangci-lint-action@ec5d18412c0aeab7936cb16880d708ba2a64e1ae # v6.2.0
+        uses: 
golangci/golangci-lint-action@051d91933864810ecd5e2ea2cfd98f6a5bca5347 # v6.3.2
         with:
-          version: v1.61
+          version: v1.63
 
       - run: |
           make generate
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/.gitignore new/apko-0.25.0/.gitignore
--- old/apko-0.24.0/.gitignore  2025-01-31 00:07:05.000000000 +0100
+++ new/apko-0.25.0/.gitignore  2025-02-12 22:02:32.000000000 +0100
@@ -23,3 +23,5 @@
 
 # SBOM outputs from apko
 sbom-*
+
+.DS_Store
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/examples/abseil-regression.yaml 
new/apko-0.25.0/examples/abseil-regression.yaml
--- old/apko-0.24.0/examples/abseil-regression.yaml     1970-01-01 
01:00:00.000000000 +0100
+++ new/apko-0.25.0/examples/abseil-regression.yaml     2025-02-12 
22:02:32.000000000 +0100
@@ -0,0 +1,13 @@
+# This was very slow once.
+contents:
+  keyring:
+    - https://packages.wolfi.dev/os/wolfi-signing.rsa.pub
+  repositories:
+    - https://packages.wolfi.dev/os
+
+  packages:
+    - abseil-cpp-dev
+    - pkgconf
+
+archs:
+- arm64
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/go.mod new/apko-0.25.0/go.mod
--- old/apko-0.24.0/go.mod      2025-01-31 00:07:05.000000000 +0100
+++ new/apko-0.25.0/go.mod      2025-02-12 22:02:32.000000000 +0100
@@ -3,10 +3,10 @@
 go 1.23.4
 
 require (
-       chainguard.dev/sdk v0.1.29
-       github.com/chainguard-dev/clog v1.5.1
+       chainguard.dev/sdk v0.1.31
+       github.com/chainguard-dev/clog v1.6.1
        github.com/charmbracelet/log v0.4.0
-       github.com/go-git/go-git/v5 v5.13.1
+       github.com/go-git/go-git/v5 v5.13.2
        github.com/google/go-cmp v0.6.0
        github.com/google/go-containerregistry v0.20.3
        github.com/google/shlex v0.0.0-20191202100458-e7afc7fbc510
@@ -17,7 +17,7 @@
        github.com/klauspost/pgzip v1.2.6
        github.com/package-url/packageurl-go v0.1.3
        github.com/psanford/memfs v0.0.0-20230130182539-4dbf7e3e865e
-       github.com/sigstore/cosign/v2 v2.4.1
+       github.com/sigstore/cosign/v2 v2.4.2
        github.com/skratchdot/open-golang v0.0.0-20200116055534-eef842397966
        github.com/spf13/cobra v1.8.1
        github.com/stretchr/testify v1.10.0
@@ -26,27 +26,27 @@
        go.lsp.dev/uri v0.3.0
        go.opentelemetry.io/otel v1.34.0
        go.opentelemetry.io/otel/trace v1.34.0
-       go.step.sm/crypto v0.57.0
+       go.step.sm/crypto v0.57.1
        golang.org/x/exp v0.0.0-20241108190413-2d47ceb2692f
-       golang.org/x/sync v0.10.0
-       golang.org/x/sys v0.29.0
-       golang.org/x/time v0.9.0
-       google.golang.org/api v0.217.0
+       golang.org/x/sync v0.11.0
+       golang.org/x/sys v0.30.0
+       golang.org/x/time v0.10.0
+       google.golang.org/api v0.220.0
        gopkg.in/ini.v1 v1.67.0
        gopkg.in/yaml.v3 v3.0.1
        k8s.io/apimachinery v0.32.1
-       sigs.k8s.io/release-utils v0.9.0
+       sigs.k8s.io/release-utils v0.11.0
 )
 
 require (
        chainguard.dev/go-grpc-kit v0.17.7 // indirect
-       cloud.google.com/go/auth v0.14.0 // indirect
+       cloud.google.com/go/auth v0.14.1 // indirect
        cloud.google.com/go/auth/oauth2adapt v0.2.7 // indirect
        cloud.google.com/go/compute/metadata v0.6.0 // indirect
        dario.cat/mergo v1.0.1 // indirect
        filippo.io/edwards25519 v1.1.0 // indirect
        github.com/Microsoft/go-winio v0.6.2 // indirect
-       github.com/ProtonMail/go-crypto v1.1.3 // indirect
+       github.com/ProtonMail/go-crypto v1.1.5 // indirect
        github.com/asaskevich/govalidator v0.0.0-20230301143203-a9d515a09cc2 // 
indirect
        github.com/aymanbagabas/go-osc52/v2 v2.0.1 // indirect
        github.com/bahlo/generic-list-go v0.2.0 // indirect
@@ -73,7 +73,7 @@
        github.com/felixge/httpsnoop v1.0.4 // indirect
        github.com/go-chi/chi v4.1.2+incompatible // indirect
        github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 // indirect
-       github.com/go-git/go-billy/v5 v5.6.1 // indirect
+       github.com/go-git/go-billy/v5 v5.6.2 // indirect
        github.com/go-jose/go-jose/v3 v3.0.3 // indirect
        github.com/go-jose/go-jose/v4 v4.0.4 // indirect
        github.com/go-logfmt/logfmt v0.6.0 // indirect
@@ -110,7 +110,7 @@
        github.com/mattn/go-isatty v0.0.20 // indirect
        github.com/mattn/go-runewidth v0.0.15 // indirect
        github.com/mitchellh/go-homedir v1.1.0 // indirect
-       github.com/mitchellh/mapstructure v1.5.0 // indirect
+       github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c 
// indirect
        github.com/moby/docker-image-spec v1.3.1 // indirect
        github.com/muesli/reflow v0.3.0 // indirect
        github.com/muesli/termenv v0.15.2 // indirect
@@ -119,23 +119,23 @@
        github.com/opencontainers/go-digest v1.0.0 // indirect
        github.com/opencontainers/image-spec v1.1.0 // indirect
        github.com/pierrec/lz4/v4 v4.1.21 // indirect
-       github.com/pjbgf/sha1cd v0.3.0 // indirect
+       github.com/pjbgf/sha1cd v0.3.2 // indirect
        github.com/pkg/errors v0.9.1 // indirect
        github.com/pmezard/go-difflib v1.0.1-0.20181226105442-5d4384ee4fb2 // 
indirect
        github.com/prometheus/client_golang v1.20.5 // indirect
        github.com/prometheus/client_model v0.6.1 // indirect
-       github.com/prometheus/common v0.60.1 // indirect
+       github.com/prometheus/common v0.62.0 // indirect
        github.com/prometheus/procfs v0.15.1 // indirect
        github.com/rivo/uniseg v0.4.7 // indirect
        github.com/sassoftware/relic v7.2.1+incompatible // indirect
-       github.com/secure-systems-lab/go-securesystemslib v0.8.0 // indirect
+       github.com/secure-systems-lab/go-securesystemslib v0.9.0 // indirect
        github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 // 
indirect
-       github.com/sigstore/protobuf-specs v0.3.2 // indirect
-       github.com/sigstore/rekor v1.3.6 // indirect
-       github.com/sigstore/sigstore v1.8.10 // indirect
+       github.com/sigstore/protobuf-specs v0.4.0 // indirect
+       github.com/sigstore/rekor v1.3.9 // indirect
+       github.com/sigstore/sigstore v1.8.12 // indirect
        github.com/sirupsen/logrus v1.9.3 // indirect
        github.com/skeema/knownhosts v1.3.0 // indirect
-       github.com/spf13/pflag v1.0.5 // indirect
+       github.com/spf13/pflag v1.0.6 // indirect
        github.com/theupdateframework/go-tuf v0.7.0 // indirect
        github.com/titanous/rocacheck v0.0.0-20171023193734-afe73141d399 // 
indirect
        github.com/u-root/uio v0.0.0-20240209044354-b3d14b93376a // indirect
@@ -144,8 +144,8 @@
        github.com/xanzy/ssh-agent v0.3.3 // indirect
        go.mongodb.org/mongo-driver v1.14.0 // indirect
        go.opentelemetry.io/auto/sdk v1.1.0 // indirect
-       
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.57.0 // indirect
-       go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 
// indirect
+       
go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.58.0 // indirect
+       go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 
// indirect
        go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 // indirect
        go.opentelemetry.io/otel/metric v1.34.0 // indirect
        go.opentelemetry.io/proto/otlp v1.4.0 // indirect
@@ -157,10 +157,10 @@
        golang.org/x/oauth2 v0.25.0 // indirect
        golang.org/x/term v0.28.0 // indirect
        golang.org/x/text v0.21.0 // indirect
-       google.golang.org/genproto/googleapis/api 
v0.0.0-20241209162323-e6fa225c2576 // indirect
-       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250106144421-5f5ef82da422 // indirect
-       google.golang.org/grpc v1.69.4 // indirect
-       google.golang.org/protobuf v1.36.3 // indirect
+       google.golang.org/genproto/googleapis/api 
v0.0.0-20250115164207-1a7da9e5054f // indirect
+       google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250127172529-29210b9bc287 // indirect
+       google.golang.org/grpc v1.70.0 // indirect
+       google.golang.org/protobuf v1.36.4 // indirect
        gopkg.in/warnings.v0 v0.1.2 // indirect
        gotest.tools/v3 v3.5.1 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/go.sum new/apko-0.25.0/go.sum
--- old/apko-0.24.0/go.sum      2025-01-31 00:07:05.000000000 +0100
+++ new/apko-0.25.0/go.sum      2025-02-12 22:02:32.000000000 +0100
@@ -1,10 +1,10 @@
 chainguard.dev/go-grpc-kit v0.17.7 
h1:TqHua7er5k8m6WM96y0Tm7IoLLkuZ5vh3+5SR1gruKg=
 chainguard.dev/go-grpc-kit v0.17.7/go.mod 
h1:JroMzTY9mdhKe/bvtyChgfECaNh80+bMZH3HS+TGXHw=
-chainguard.dev/sdk v0.1.29 h1:GNcCw5NoyvylhlUbVD8JMmrPaeYyrshaHHjEWnvcCGI=
-chainguard.dev/sdk v0.1.29/go.mod 
h1:DqywTjZ5glB/gUCKkrecO0LywyfcAd5v7IPo2+d91qA=
+chainguard.dev/sdk v0.1.31 h1:Blvpa0Ji/tC1VVV8/l8UyQe022LoRxZLfgasyFE1EhQ=
+chainguard.dev/sdk v0.1.31/go.mod 
h1:/zqikqbDCBAAlhIDuBl8V4bR9nmB1qLEIn2w9FxzNwI=
 cloud.google.com/go v0.26.0/go.mod 
h1:aQUYkXzVsufM+DwF1aE+0xfcU+56JwCaLick0ClmMTw=
-cloud.google.com/go/auth v0.14.0 
h1:A5C4dKV/Spdvxcl0ggWwWEzzP7AZMJSEIgrkngwhGYM=
-cloud.google.com/go/auth v0.14.0/go.mod 
h1:CYsoRL1PdiDuqeQpZE0bP2pnPrGqFcOkI0nldEQis+A=
+cloud.google.com/go/auth v0.14.1 
h1:AwoJbzUdxA/whv1qj3TLKwh3XX5sikny2fc40wUl+h0=
+cloud.google.com/go/auth v0.14.1/go.mod 
h1:4JHUxlGXisL0AW8kXPtUF6ztuOksyfUQNFjfsOCXkPM=
 cloud.google.com/go/auth/oauth2adapt v0.2.7 
h1:/Lc7xODdqcEw8IrZ9SvwnlLX6j9FHQM74z6cBk9Rw6M=
 cloud.google.com/go/auth/oauth2adapt v0.2.7/go.mod 
h1:NTbTTzfvPl1Y3V1nPpOgl2w6d/FjO7NNUQaWSox6ZMc=
 cloud.google.com/go/compute/metadata v0.6.0 
h1:A6hENjEsCDtC1k8byVsgwvVcioamEHvZ4j01OwKxG9I=
@@ -13,14 +13,14 @@
 dario.cat/mergo v1.0.1/go.mod h1:uNxQE+84aUszobStD9th8a29P2fMDhsBdgRYvZOxGmk=
 filippo.io/edwards25519 v1.1.0 h1:FNf4tywRC1HmFuKW5xopWpigGjJKiJSV0Cqo0cJWDaA=
 filippo.io/edwards25519 v1.1.0/go.mod 
h1:BxyFTGdWcka3PhytdK4V28tE5sGfRvvvRV7EaN4VDT4=
-github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161 
h1:L/gRVlceqvL25UVaW/CKtUDjefjrs0SPonmDGUVOYP0=
-github.com/Azure/go-ansiterm v0.0.0-20230124172434-306776ec8161/go.mod 
h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
+github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c 
h1:udKWzYgxTojEKWjV8V+WSxDXJ4NFATAsZjh8iIbsQIg=
+github.com/Azure/go-ansiterm v0.0.0-20250102033503-faa5f7b0171c/go.mod 
h1:xomTg63KZ2rFqZQzSB4Vz2SUXa1BpHTVz9L5PTmPC4E=
 github.com/BurntSushi/toml v0.3.1/go.mod 
h1:xHWCNGjB5oqiDr8zfno3MHue2Ht5sIBksp03qcyfWMU=
 github.com/Microsoft/go-winio v0.5.2/go.mod 
h1:WpS1mjBmmwHBEWmogvA2mj8546UReBk4v8QkMxJ6pZY=
 github.com/Microsoft/go-winio v0.6.2 
h1:F2VQgta7ecxGYO8k3ZZz3RS8fVIXVxONVUPlNERoyfY=
 github.com/Microsoft/go-winio v0.6.2/go.mod 
h1:yd8OoFMLzJbo9gZq8j5qaps8bJ9aShtEA8Ipt1oGCvU=
-github.com/ProtonMail/go-crypto v1.1.3 
h1:nRBOetoydLeUb4nHajyO2bKqMLfWQ/ZPwkXqXxPxCFk=
-github.com/ProtonMail/go-crypto v1.1.3/go.mod 
h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
+github.com/ProtonMail/go-crypto v1.1.5 
h1:eoAQfK2dwL+tFSFpr7TbOaPNUbPiJj4fLYwwGE1FQO4=
+github.com/ProtonMail/go-crypto v1.1.5/go.mod 
h1:rA3QumHc/FZ8pAHreoekgiAbzpNsfQAosU5td4SnOrE=
 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be 
h1:9AeTilPcZAjCFIImctFaOjnTIavg87rW78vTPkQqLI8=
 github.com/anmitsu/go-shlex v0.0.0-20200514113438-38f4b401e2be/go.mod 
h1:ySMOLuWl6zY27l47sB3qLNK6tF2fkHG55UZxx8oIVo4=
 github.com/armon/go-socks5 v0.0.0-20160902184237-e75332964ef5 
h1:0CwZNZbxp69SHPdPJAN/hZIm0C4OItdklCFmMRWYpio=
@@ -44,8 +44,8 @@
 github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod 
h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU=
 github.com/cespare/xxhash/v2 v2.3.0 
h1:UL815xU9SqsFlibzuggzjXhog7bL6oX9BbNZnL2UFvs=
 github.com/cespare/xxhash/v2 v2.3.0/go.mod 
h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs=
-github.com/chainguard-dev/clog v1.5.1 
h1:LeFeVlxiicswuTevtaXc0MXH1zV1iWkbg+H8iUuBTtQ=
-github.com/chainguard-dev/clog v1.5.1/go.mod 
h1:4+WFhRMsGH79etYXY3plYdp+tCz/KCkU8fAr0HoaPvs=
+github.com/chainguard-dev/clog v1.6.1 
h1:CeOhEqKQsO/QMESgOTqv/miI27P1eNcgGgL7uiofOvU=
+github.com/chainguard-dev/clog v1.6.1/go.mod 
h1:4+WFhRMsGH79etYXY3plYdp+tCz/KCkU8fAr0HoaPvs=
 github.com/charmbracelet/lipgloss v0.10.0 
h1:KWeXFSexGcfahHX+54URiZGkBFazf70JNMtwg/AFW3s=
 github.com/charmbracelet/lipgloss v0.10.0/go.mod 
h1:Wig9DSfvANsxqkRsqj6x87irdy123SR4dOXlKa91ciE=
 github.com/charmbracelet/log v0.4.0 
h1:G9bQAcx8rWA2T3pWvx7YtPTPwgqpk7D68BX21IRW8ZM=
@@ -85,8 +85,8 @@
 github.com/docker/go-units v0.5.0/go.mod 
h1:fgPhTUdO+D/Jk86RDLlptpiXQzgHJF7gydDDbaIK4Dk=
 github.com/dustin/go-humanize v1.0.1 
h1:GzkhY7T5VNhEkwH0PVJgjz+fX1rhBrR7pRT3mDkpeCY=
 github.com/dustin/go-humanize v1.0.1/go.mod 
h1:Mu1zIs6XwVuF/gI1OepvI0qD18qycQx+mFykh5fBlto=
-github.com/elazarl/goproxy v1.2.3 
h1:xwIyKHbaP5yfT6O9KIeYJR5549MXRQkoQMRXGztz8YQ=
-github.com/elazarl/goproxy v1.2.3/go.mod 
h1:YfEbZtqP4AetfO6d40vWchF3znWX7C7Vd6ZMfdL8z64=
+github.com/elazarl/goproxy v1.4.0 
h1:4GyuSbFa+s26+3rmYNSuUVsx+HgPrV1bk1jXI0l9wjM=
+github.com/elazarl/goproxy v1.4.0/go.mod 
h1:X/5W/t+gzDyLfHW4DrMdpjqYjpXsURlBt9lpBDxZZZQ=
 github.com/emirpasic/gods v1.18.1 
h1:FXtiHYKDGKCW2KzwZKx0iC0PQmdlorYgdFG9jPXJ1Bc=
 github.com/emirpasic/gods v1.18.1/go.mod 
h1:8tpGGwCnJ5H4r6BWwaV6OrWmMoPhUl5jm/FMNAnJvWQ=
 github.com/envoyproxy/go-control-plane v0.9.0/go.mod 
h1:YTl/9mNaCwkRvm6d1a2C3ymFceY/DCBVvsKhRF0iEA4=
@@ -103,12 +103,12 @@
 github.com/go-chi/chi v4.1.2+incompatible/go.mod 
h1:eB3wogJHnLi3x/kFX2A+IbTBlXxmMeXJVKy9tTv1XzQ=
 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376 
h1:+zs/tPmkDkHx3U66DAb0lQFJrpS6731Oaa12ikc+DiI=
 github.com/go-git/gcfg v1.5.1-0.20230307220236-3a3c6141e376/go.mod 
h1:an3vInlBmSxCcxctByoQdvwPiA7DTK7jaaFDBTtu0ic=
-github.com/go-git/go-billy/v5 v5.6.1 
h1:u+dcrgaguSSkbjzHwelEjc0Yj300NUevrrPphk/SoRA=
-github.com/go-git/go-billy/v5 v5.6.1/go.mod 
h1:0AsLr1z2+Uksi4NlElmMblP5rPcDZNRCD8ujZCRR2BE=
+github.com/go-git/go-billy/v5 v5.6.2 
h1:6Q86EsPXMa7c3YZ3aLAQsMA0VlWmy43r6FHqa/UNbRM=
+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.13.1 
h1:DAQ9APonnlvSWpvolXWIuV6Q6zXy2wHbN4cVlNR5Q+M=
-github.com/go-git/go-git/v5 v5.13.1/go.mod 
h1:qryJB4cSBoq3FRoBRf5A77joojuBcmPJ0qu3XXXVixc=
+github.com/go-git/go-git/v5 v5.13.2 
h1:7O7xvsK7K+rZPKW6AQR1YyNhfywkv7B8/FsP3ki6Zv0=
+github.com/go-git/go-git/v5 v5.13.2/go.mod 
h1:hWdW5P4YZRjmpGHwRH2v3zkWcNl6HeXaXQEMGb3NJ9A=
 github.com/go-jose/go-jose/v3 v3.0.3 
h1:fFKWeig/irsp7XD2zBxvnmA/XaRWp5V3CBsZXJF7G7k=
 github.com/go-jose/go-jose/v3 v3.0.3/go.mod 
h1:5b+7YgP7ZICgJDBdfjZaIt+H/9L9T/YQrVfLAMboGkQ=
 github.com/go-jose/go-jose/v4 v4.0.4 
h1:VsjPI33J0SB9vQM6PLmNjoHqMQNGPiZ0rHL7Ni7Q6/E=
@@ -236,12 +236,12 @@
 github.com/matttproud/golang_protobuf_extensions v1.0.1/go.mod 
h1:D8He9yQNgCq6Z5Ld7szi9bcBfOoFv/3dc6xSMkL2PC0=
 github.com/mitchellh/go-homedir v1.1.0 
h1:lukF9ziXFxDFPkA1vsr5zpc1XuPDn/wFntq5mG+4E0Y=
 github.com/mitchellh/go-homedir v1.1.0/go.mod 
h1:SfyaCUpYCn1Vlf4IUYiD9fPX4A5wJrkLzIz1N1q0pr0=
-github.com/mitchellh/mapstructure v1.5.0 
h1:jeMsZIYE/09sWLaz43PL7Gy6RuMjD2eJVyuac5Z2hdY=
-github.com/mitchellh/mapstructure v1.5.0/go.mod 
h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c 
h1:cqn374mizHuIWj+OSJCajGr/phAmuMug9qIX3l9CflE=
+github.com/mitchellh/mapstructure v1.5.1-0.20231216201459-8508981c8b6c/go.mod 
h1:bFUtVrKA4DC2yAKiSyO/QUcy7e+RRV2QTWOzhPopBRo=
 github.com/moby/docker-image-spec v1.3.1 
h1:jMKff3w6PgbfSa69GfNg+zN/XLhfXJGnEx3Nl2EsFP0=
 github.com/moby/docker-image-spec v1.3.1/go.mod 
h1:eKmb5VW8vQEh/BAr2yvVNvuiJuY6UIocYsFu/DxxRpo=
-github.com/moby/term v0.5.0 h1:xt8Q1nalod/v7BqbG21f8mQPqH+xAaC9C3N3wfWbVP0=
-github.com/moby/term v0.5.0/go.mod 
h1:8FzsFHVUBGZdbDsJw/ot+X+d5HLUbvklYLJ9uGfcI3Y=
+github.com/moby/term v0.5.2 h1:6qk3FJAFDs6i/q3W/pQ97SX192qKfZgGjCQqfCJkgzQ=
+github.com/moby/term v0.5.2/go.mod 
h1:d3djjFCrjnB+fl8NJux+EJzu0msscUP+f8it8hPkFLc=
 github.com/morikuni/aec v1.0.0 h1:nP9CBfwrvYnBRgY6qfDQkygYDmYwOilePFkwzv4dU8A=
 github.com/morikuni/aec v1.0.0/go.mod 
h1:BbKIizmSmc5MMPqRYbxO4ZU0S0+P200+tUnFx7PXmsc=
 github.com/muesli/reflow v0.3.0 h1:IFsN6K9NfGtjeggFP+68I4chLZV2yIKsXJFNZ+eWh6s=
@@ -263,8 +263,8 @@
 github.com/package-url/packageurl-go v0.1.3/go.mod 
h1:nKAWB8E6uk1MHqiS/lQb9pYBGH2+mdJ2PJc2s50dQY0=
 github.com/pierrec/lz4/v4 v4.1.21 
h1:yOVMLb6qSIDP67pl/5F7RepeKYu/VmTyEXvuMI5d9mQ=
 github.com/pierrec/lz4/v4 v4.1.21/go.mod 
h1:gZWDp/Ze/IJXGXf23ltt2EXimqmTUXEy0GFuRQyBid4=
-github.com/pjbgf/sha1cd v0.3.0 h1:4D5XXmUUBUl/xQ6IjCkEAbqXskkq/4O7LmGn0AqMDs4=
-github.com/pjbgf/sha1cd v0.3.0/go.mod 
h1:nZ1rrWOcGJ5uZgEEVL1VUM9iRQiZvWdbZjkKyFzPPsI=
+github.com/pjbgf/sha1cd v0.3.2 h1:a9wb0bp1oC2TGwStyn0Umc/IGKQnEgF0vVaZ8QF8eo4=
+github.com/pjbgf/sha1cd v0.3.2/go.mod 
h1:zQWigSxVmsHEZow5qaLtPYxpcKMMQpa09ixqBxuCS6A=
 github.com/pkg/errors v0.8.1/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
 github.com/pkg/errors v0.9.1 h1:FEBLx1zS214owpjy7qsBeixbURkuhQAwrK5UwLGTwt4=
 github.com/pkg/errors v0.9.1/go.mod 
h1:bwawxfHBFNV+L2hUp1rHADufV3IMtnDRdf1r5NINEl0=
@@ -280,8 +280,8 @@
 github.com/prometheus/client_model v0.6.1 
h1:ZKSh/rekM+n3CeS952MLRAdFwIKqeY8b62p8ais2e9E=
 github.com/prometheus/client_model v0.6.1/go.mod 
h1:OrxVMOVHjw3lKMa8+x6HeMGkHMQyHDk9E3jmP2AmGiY=
 github.com/prometheus/common v0.0.0-20181126121408-4724e9255275/go.mod 
h1:daVV7qP5qjZbuso7PdcryaAu0sAZbrN9i7WWcTMWvro=
-github.com/prometheus/common v0.60.1 
h1:FUas6GcOw66yB/73KC+BOZoFJmbo/1pojoILArPAaSc=
-github.com/prometheus/common v0.60.1/go.mod 
h1:h0LYf1R1deLSKtD4Vdg8gy4RuOvENW2J/h19V5NADQw=
+github.com/prometheus/common v0.62.0 
h1:xasJaQlnWAeyHdUBeGjXmutelfJHWMRr+Fg4QszZ2Io=
+github.com/prometheus/common v0.62.0/go.mod 
h1:vyBcEuLSvWos9B1+CyL7JZ2up+uFzXhkqml0W5zIY1I=
 github.com/prometheus/procfs v0.0.0-20181204211112-1dc9a6cbc91a/go.mod 
h1:c3At6R/oaqEKCNdg8wHV1ftS6bRYblBhIjjI8uT2IGk=
 github.com/prometheus/procfs v0.15.1 
h1:YagwOFzUgYfKKHX6Dr+sHT7km/hxC76UB0learggepc=
 github.com/prometheus/procfs v0.15.1/go.mod 
h1:fB45yRUv8NstnjriLhBQLuOUt+WW4BsoGhij/e3PBqk=
@@ -291,23 +291,23 @@
 github.com/rivo/uniseg v0.2.0/go.mod 
h1:J6wj4VEh+S6ZtnVlnTBMWIodfgj8LQOQFoIToxlJtxc=
 github.com/rivo/uniseg v0.4.7 h1:WUdvkW8uEhrYfLC4ZzdpI2ztxP1I582+49Oc5Mq64VQ=
 github.com/rivo/uniseg v0.4.7/go.mod 
h1:FN3SvrM+Zdj16jyLfmOkMNblXMcoc8DfTHruCPUcx88=
-github.com/rogpeppe/go-internal v1.13.1 
h1:KvO1DLK/DRN07sQ1LQKScxyZJuNnedQ5/wKSR38lUII=
-github.com/rogpeppe/go-internal v1.13.1/go.mod 
h1:uMEvuHeurkdAXX61udpOXGD/AzZDWNMNyH2VO9fmH0o=
+github.com/rogpeppe/go-internal v1.13.2-0.20241226121412-a5dc8ff20d0a 
h1:w3tdWGKbLGBPtR/8/oO74W6hmz0qE5q0z9aqSAewaaM=
+github.com/rogpeppe/go-internal v1.13.2-0.20241226121412-a5dc8ff20d0a/go.mod 
h1:S8kfXMp+yh77OxPD4fdM6YUknrZpQxLhvxzS4gDHENY=
 github.com/russross/blackfriday/v2 v2.1.0/go.mod 
h1:+Rmxgy9KzJVeS9/2gXHxylqXiyQDYRxCVz55jmeOWTM=
 github.com/sassoftware/relic v7.2.1+incompatible 
h1:Pwyh1F3I0r4clFJXkSI8bOyJINGqpgjJU3DYAZeI05A=
 github.com/sassoftware/relic v7.2.1+incompatible/go.mod 
h1:CWfAxv73/iLZ17rbyhIEq3K9hs5w6FpNMdUT//qR+zk=
-github.com/secure-systems-lab/go-securesystemslib v0.8.0 
h1:mr5An6X45Kb2nddcFlbmfHkLguCE9laoZCUzEEpIZXA=
-github.com/secure-systems-lab/go-securesystemslib v0.8.0/go.mod 
h1:UH2VZVuJfCYR8WgMlCU1uFsOUU+KeyrTWcSS73NBOzU=
+github.com/secure-systems-lab/go-securesystemslib v0.9.0 
h1:rf1HIbL64nUpEIZnjLZ3mcNEL9NBPB0iuVjyxvq3LZc=
+github.com/secure-systems-lab/go-securesystemslib v0.9.0/go.mod 
h1:DVHKMcZ+V4/woA/peqr+L0joiRXbPpQ042GgJckkFgw=
 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3 
h1:n661drycOFuPLCN3Uc8sB6B/s6Z4t2xvBgU1htSHuq8=
 github.com/sergi/go-diff v1.3.2-0.20230802210424-5b0b94c5c0d3/go.mod 
h1:A0bzQcvG0E7Rwjx0REVgAGH58e96+X0MeOfepqsbeW4=
-github.com/sigstore/cosign/v2 v2.4.1 
h1:b8UXEfJFks3hmTwyxrRNrn6racpmccUycBHxDMkEPvU=
-github.com/sigstore/cosign/v2 v2.4.1/go.mod 
h1:GvzjBeUKigI+XYnsoVQDmMAsMMc6engxztRSuxE+x9I=
-github.com/sigstore/protobuf-specs v0.3.2 
h1:nCVARCN+fHjlNCk3ThNXwrZRqIommIeNKWwQvORuRQo=
-github.com/sigstore/protobuf-specs v0.3.2/go.mod 
h1:RZ0uOdJR4OB3tLQeAyWoJFbNCBFrPQdcokntde4zRBA=
-github.com/sigstore/rekor v1.3.6 
h1:QvpMMJVWAp69a3CHzdrLelqEqpTM3ByQRt5B5Kspbi8=
-github.com/sigstore/rekor v1.3.6/go.mod 
h1:JDTSNNMdQ/PxdsS49DJkJ+pRJCO/83nbR5p3aZQteXc=
-github.com/sigstore/sigstore v1.8.10 
h1:r4t+TYzJlG9JdFxMy+um9GZhZ2N1hBTyTex0AHEZxFs=
-github.com/sigstore/sigstore v1.8.10/go.mod 
h1:BekjqxS5ZtHNJC4u3Q3Stvfx2eyisbW/lUZzmPU2u4A=
+github.com/sigstore/cosign/v2 v2.4.2 
h1:6say+Sp8QS4EE217siehDOylnZRwP9p8NSdHpZHOz20=
+github.com/sigstore/cosign/v2 v2.4.2/go.mod 
h1:nlFhNmoUCqpTLa2YSoudJnm1r8JijCN1YCZYnrC42Ds=
+github.com/sigstore/protobuf-specs v0.4.0 
h1:yoZbdh0kZYKOSiVbYyA8J3f2wLh5aUk2SQB7LgAfIdU=
+github.com/sigstore/protobuf-specs v0.4.0/go.mod 
h1:FKW5NYhnnFQ/Vb9RKtQk91iYd0MKJ9AxyqInEwU6+OI=
+github.com/sigstore/rekor v1.3.9 
h1:sUjRpKVh/hhgqGMs0t+TubgYsksArZ6poLEC3MsGAzU=
+github.com/sigstore/rekor v1.3.9/go.mod 
h1:xThNUhm6eNEmkJ/SiU/FVU7pLY2f380fSDZFsdDWlcM=
+github.com/sigstore/sigstore v1.8.12 
h1:S8xMVZbE2z9ZBuQUEG737pxdLjnbOIcFi5v9UFfkJFc=
+github.com/sigstore/sigstore v1.8.12/go.mod 
h1:+PYQAa8rfw0QdPpBcT+Gl3egKD9c+TUgAlF12H3Nmjo=
 github.com/sirupsen/logrus v1.4.2/go.mod 
h1:tLMulIdttU9McNUspp0xgXVQah82FyeX6MwdIuYE2rE=
 github.com/sirupsen/logrus v1.7.0/go.mod 
h1:yWOB1SBYBC5VeMP7gHvWumXLIWorT60ONWic61uBYv0=
 github.com/sirupsen/logrus v1.9.3 
h1:dueUQJ1C2q9oE3F7wvmSGAaVtTmUizReu6fjN8uqzbQ=
@@ -320,8 +320,9 @@
 github.com/smallstep/assert v0.0.0-20200723003110-82e2b9b3b262/go.mod 
h1:MyOHs9Po2fbM1LHej6sBUT8ozbxmMOFG+E+rx/GSGuc=
 github.com/spf13/cobra v1.8.1 h1:e5/vxKd/rZsfSJMUX1agtjeTDf+qv1/JdBF8gg5k9ZM=
 github.com/spf13/cobra v1.8.1/go.mod 
h1:wHxEcudfqmLYa8iTfL+OuZPbBZkmvliBWKIezN3kD9Y=
-github.com/spf13/pflag v1.0.5 h1:iy+VFUOCP1a+8yFto/drg2CJ5u0yRoB7fZw3DKv/JXA=
 github.com/spf13/pflag v1.0.5/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
+github.com/spf13/pflag v1.0.6/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/objx v0.1.1/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.2.2/go.mod 
h1:a8OnRcib4nhh0OaRAV+Yts87kKdq0PP7pXfy6kDkUVs=
@@ -355,10 +356,10 @@
 go.mongodb.org/mongo-driver v1.14.0/go.mod 
h1:Vzb0Mk/pa7e6cWw85R4F/endUC3u0U9jGcNU603k65c=
 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/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.57.0 h1:qtFISDHKolvIxzSs0gIaiPUPR0Cucb0F2coHC7ZLdps=
-go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.57.0/go.mod h1:Y+Pop1Q6hCOnETWTW4NROK/q1hv50hM7yDaUTjG8lp8=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0 
h1:yd02MEjBdJkG3uabWP9apV+OuWRIXGDuJEUJbOHmCFU=
-go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.58.0/go.mod 
h1:umTcuxiv1n/s/S6/c2AT/g2CQ7u5C59sHDNmfSwgz7Q=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.58.0 h1:PS8wXpbyaDJQ2VDHHncMe9Vct0Zn1fEjpsjrLxGJoSc=
+go.opentelemetry.io/contrib/instrumentation/google.golang.org/grpc/otelgrpc 
v0.58.0/go.mod h1:HDBUsEjOuRC0EzKZ1bSaRGZWUBAzo+MhAcUUORSr4D0=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0 
h1:CV7UdSGJt/Ao6Gp4CXckLxVRRsRgDHoI8XjbL3PDl8s=
+go.opentelemetry.io/contrib/instrumentation/net/http/otelhttp v0.59.0/go.mod 
h1:FRmFuRJfag1IZ2dPkHnEoSFVgTVPUd2qf5Vi69hLb8I=
 go.opentelemetry.io/otel v1.34.0 
h1:zRLXxLCgL1WyKsPVrgbSdMN4c0FMkDAskSTQP+0hdUY=
 go.opentelemetry.io/otel v1.34.0/go.mod 
h1:OWFPOQ+h4G8xpyjgqo4SxJYdDQ/qmRH+wivy7zzx9oI=
 go.opentelemetry.io/otel/exporters/otlp/otlptrace v1.33.0 
h1:Vh5HayB/0HHfOQA7Ctx69E/Y/DcQSMPpKANYVMQ7fBA=
@@ -367,16 +368,16 @@
 go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracehttp v1.33.0/go.mod 
h1:wAy0T/dUbs468uOlkT31xjvqQgEVXv58BRFWEgn5v/0=
 go.opentelemetry.io/otel/metric v1.34.0 
h1:+eTR3U0MyfWjRDhmFMxe2SsW64QrZ84AOhvqS7Y+PoQ=
 go.opentelemetry.io/otel/metric v1.34.0/go.mod 
h1:CEDrp0fy2D0MvkXE+dPV7cMi8tWZwX3dmaIhwPOaqHE=
-go.opentelemetry.io/otel/sdk v1.33.0 
h1:iax7M131HuAm9QkZotNHEfstof92xM+N8sr3uHXc2IM=
-go.opentelemetry.io/otel/sdk v1.33.0/go.mod 
h1:A1Q5oi7/9XaMlIWzPSxLRWOI8nG3FnzHJNbiENQuihM=
-go.opentelemetry.io/otel/sdk/metric v1.31.0 
h1:i9hxxLJF/9kkvfHppyLL55aW7iIJz4JjxTeYusH7zMc=
-go.opentelemetry.io/otel/sdk/metric v1.31.0/go.mod 
h1:CRInTMVvNhUKgSAMbKyTMxqOBC0zgyxzW55lZzX43Y8=
+go.opentelemetry.io/otel/sdk v1.34.0 
h1:95zS4k/2GOy069d321O8jWgYsW3MzVV+KuSPKp7Wr1A=
+go.opentelemetry.io/otel/sdk v1.34.0/go.mod 
h1:0e/pNiaMAqaykJGKbi+tSjWfNNHMTxoC9qANsCzbyxU=
+go.opentelemetry.io/otel/sdk/metric v1.32.0 
h1:rZvFnvmvawYb0alrYkjraqJq0Z4ZUJAiyYCU9snn1CU=
+go.opentelemetry.io/otel/sdk/metric v1.32.0/go.mod 
h1:PWeZlq0zt9YkYAp3gjKZ0eicRYvOh1Gd+X99x6GHpCQ=
 go.opentelemetry.io/otel/trace v1.34.0 
h1:+ouXS2V8Rd4hp4580a8q23bg0azF2nI8cqLYnC8mh/k=
 go.opentelemetry.io/otel/trace v1.34.0/go.mod 
h1:Svm7lSjQD7kG7KJ/MUHPVXSDGz2OX4h0M2jHBhmSfRE=
 go.opentelemetry.io/proto/otlp v1.4.0 
h1:TA9WRvW6zMwP+Ssb6fLoUIuirti1gGbP28GcKG1jgeg=
 go.opentelemetry.io/proto/otlp v1.4.0/go.mod 
h1:PPBWZIP98o2ElSqI35IHfu7hIhSwvc5N38Jw8pXuGFY=
-go.step.sm/crypto v0.57.0 h1:YjoRQDaJYAxHLVwjst0Bl0xcnoKzVwuHCJtEo2VSHYU=
-go.step.sm/crypto v0.57.0/go.mod 
h1:+Lwp5gOVPaTa3H/Ul/TzGbxQPXZZcKIUGMS0lG6n9Go=
+go.step.sm/crypto v0.57.1 h1:bt7ugfc0m2/nJ9/uhQOtXRW3xQr8zJwL087FLQk9mvc=
+go.step.sm/crypto v0.57.1/go.mod 
h1:wL25/Mh7edmo36AA93hf9agP493Zt3y4QBzB1wzwOjc=
 go.uber.org/atomic v1.7.0/go.mod 
h1:fEN4uk6kAWBTFdckzkM89CLk9XfWZrxpCo0nPH17wJc=
 go.uber.org/goleak v1.1.10/go.mod 
h1:8a7PlsEVH3e/a/GLqe5IIrQx6GzcnRmZEufDUTk4A7A=
 go.uber.org/goleak v1.3.0 h1:2K3zAYmnTNqV73imy9J1T3WC+gmCePx2hEGkimedGto=
@@ -434,8 +435,8 @@
 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.10.0 h1:3NQrjDixjgGwUOCaF8w2+VYHv0Ve/vGYSbdkTa98gmQ=
-golang.org/x/sync v0.10.0/go.mod 
h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
+golang.org/x/sync v0.11.0 h1:GGz8+XQP4FvTTrjZPzNKTMFtSXH80RAzG+5ghFPgK9w=
+golang.org/x/sync v0.11.0/go.mod 
h1:Czt+wKu1gCyEFDUtn0jG5QVvpJ6rzVqr5aXyt9drQfk=
 golang.org/x/sys v0.0.0-20180830151530-49385e6e1522/go.mod 
h1:STP8DvDyc/dI5b8T5hshtkjS+E42TnysNCUPdjciGhY=
 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=
@@ -454,8 +455,8 @@
 golang.org/x/sys v0.6.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.8.0/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
 golang.org/x/sys v0.17.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
-golang.org/x/sys v0.29.0 h1:TPYlXGxvx1MGTn2GiZDhnjPA9wZzZeGKHHmKhHYvgaU=
-golang.org/x/sys v0.29.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
+golang.org/x/sys v0.30.0 h1:QjkSwP/36a20jFYWkSue1YwXzLmsV5Gfq7Eiy72C1uc=
+golang.org/x/sys v0.30.0/go.mod h1:/VUhepiaJMQUp4+oa/7Zr1D23ma6VTLIYjOOTFZPUcA=
 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.5.0/go.mod h1:jMB1sMXY+tzblOD4FWmEbocvup2/aLOaQEp7JmGp78k=
@@ -472,8 +473,8 @@
 golang.org/x/text v0.14.0/go.mod 
h1:18ZOQIKpY8NJVqYksKHtTdi31H5itFRjB5/qKTNYzSU=
 golang.org/x/text v0.21.0 h1:zyQAAkrwaneQ066sspRyJaG9VNi/YJ1NfzcGB3hZ/qo=
 golang.org/x/text v0.21.0/go.mod 
h1:4IBbMaMmOPCJ8SecivzSH54+73PCFmPWxNTLm+vZkEQ=
-golang.org/x/time v0.9.0 h1:EsRrnYcQiGH+5FfbgvV4AP7qEZstoyrHB0DzarOQ4ZY=
-golang.org/x/time v0.9.0/go.mod h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
+golang.org/x/time v0.10.0 h1:3usCWA8tQn0L8+hFJQNgzpWbd89begxN66o1Ojdn5L4=
+golang.org/x/time v0.10.0/go.mod 
h1:3BpzKBy/shNhVucY/MWOyx10tF3SFh9QdLuxbVysPQM=
 golang.org/x/tools v0.0.0-20180828015842-6cd1fcedba52/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20180917221912-90fa682c2a6e/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
 golang.org/x/tools v0.0.0-20190114222345-bf090417da8b/go.mod 
h1:n7NCudcB/nEzxVGmLbDWY5pfWTLqBcC2KZ6jyYvM4mQ=
@@ -492,27 +493,27 @@
 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=
-google.golang.org/api v0.217.0 h1:GYrUtD289o4zl1AhiTZL0jvQGa2RDLyC+kX1N/lfGOU=
-google.golang.org/api v0.217.0/go.mod 
h1:qMc2E8cBAbQlRypBTBWHklNJlaZZJBwDv81B1Iu8oSI=
+google.golang.org/api v0.220.0 h1:3oMI4gdBgB72WFVwE1nerDD8W3HUOS4kypK6rRLbGns=
+google.golang.org/api v0.220.0/go.mod 
h1:26ZAlY6aN/8WgpCzjPNy18QpYaz7Zgg1h0qe1GkZEmY=
 google.golang.org/appengine v1.1.0/go.mod 
h1:EbEs0AVv82hx2wNQdGPgUI5lhzA/G0D9YwlJXL52JkM=
 google.golang.org/appengine v1.4.0/go.mod 
h1:xpcJRLb0r/rnEns0DIKYYv+WjYCduHsrkT7/EB5XEv4=
 google.golang.org/genproto v0.0.0-20180817151627-c66870c02cf8/go.mod 
h1:JiN7NxoALGmiZfu7CAH4rXhgtRTLTxftemlI0sWmxmc=
 google.golang.org/genproto v0.0.0-20190819201941-24fa4b261c55/go.mod 
h1:DMBHOl98Agz4BDEuKkezgsaosCRResVns1a3J2ZsMNc=
 google.golang.org/genproto v0.0.0-20200423170343-7949de9c1215/go.mod 
h1:55QSHmfGQM9UVYDPBsyGGes0y52j32PQ3BqQfXhyH3c=
-google.golang.org/genproto/googleapis/api v0.0.0-20241209162323-e6fa225c2576 
h1:CkkIfIt50+lT6NHAVoRYEyAvQGFM7xEwXUUywFvEb3Q=
-google.golang.org/genproto/googleapis/api 
v0.0.0-20241209162323-e6fa225c2576/go.mod 
h1:1R3kvZ1dtP3+4p4d3G8uJ8rFk/fWlScl38vanWACI08=
-google.golang.org/genproto/googleapis/rpc v0.0.0-20250106144421-5f5ef82da422 
h1:3UsHvIr4Wc2aW4brOaSCmcxh9ksica6fHEr8P1XhkYw=
-google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250106144421-5f5ef82da422/go.mod 
h1:3ENsm/5D1mzDyhpzeRi1NR784I0BcofWBoSc5QqqMK4=
+google.golang.org/genproto/googleapis/api v0.0.0-20250115164207-1a7da9e5054f 
h1:gap6+3Gk41EItBuyi4XX/bp4oqJ3UwuIMl25yGinuAA=
+google.golang.org/genproto/googleapis/api 
v0.0.0-20250115164207-1a7da9e5054f/go.mod 
h1:Ic02D47M+zbarjYYUlK57y316f2MoN0gjAwI3f2S95o=
+google.golang.org/genproto/googleapis/rpc v0.0.0-20250127172529-29210b9bc287 
h1:J1H9f+LEdWAfHcez/4cvaVBox7cOYT+IU6rgqj5x++8=
+google.golang.org/genproto/googleapis/rpc 
v0.0.0-20250127172529-29210b9bc287/go.mod 
h1:8BS3B93F/U1juMFq9+EDk+qOT5CO1R9IzXxG3PTqiRk=
 google.golang.org/grpc v1.18.0/go.mod 
h1:6QZJwpn2B+Zp71q/5VxRsJ6NXXVCE5NRUHRo+f3cWCs=
 google.golang.org/grpc v1.19.0/go.mod 
h1:mqu4LbDTu4XGKhr4mRzUsmM4RtVoemTSY81AxZiDr8c=
 google.golang.org/grpc v1.23.0/go.mod 
h1:Y5yQAOtifL1yxbo5wqy6BxZv8vAUGQwXBOALyacEbxg=
 google.golang.org/grpc v1.25.1/go.mod 
h1:c3i+UQWmh7LiEpx4sFZnkU36qjEYZ0imhYfXVyQciAY=
 google.golang.org/grpc v1.27.0/go.mod 
h1:qbnxyOmOxrQa7FizSgH+ReBfzJrCY1pSN7KXBS8abTk=
 google.golang.org/grpc v1.29.1/go.mod 
h1:itym6AZVZYACWQqET3MqgPpjcuV5QH3BxFS3IjizoKk=
-google.golang.org/grpc v1.69.4 h1:MF5TftSMkd8GLw/m0KM6V8CMOCY6NZ1NQDPGFgbTt4A=
-google.golang.org/grpc v1.69.4/go.mod 
h1:vyjdE6jLBI76dgpDojsFGNaHlxdjXN9ghpnd2o7JGZ4=
-google.golang.org/protobuf v1.36.3 
h1:82DV7MYdb8anAVi3qge1wSnMDrnKK7ebr+I0hHRN1BU=
-google.golang.org/protobuf v1.36.3/go.mod 
h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
+google.golang.org/grpc v1.70.0 h1:pWFv03aZoHzlRKHWicjsZytKAiYCtNS0dHbXnIdq7jQ=
+google.golang.org/grpc v1.70.0/go.mod 
h1:ofIJqVKDXx/JiXrwr2IG4/zwdH9txy3IlF40RmcJSQw=
+google.golang.org/protobuf v1.36.4 
h1:6A3ZDJHn/eNqc1i+IdefRzy/9PokBTPvcqMySR7NNIM=
+google.golang.org/protobuf v1.36.4/go.mod 
h1:9fA7Ob0pmnwhb644+1+CVWFRbNajQ6iRojtC/QF5bRE=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20180628173108-788fd7840127/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/check.v1 v1.0.0-20190902080502-41f04d3bba15/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
@@ -536,5 +537,5 @@
 honnef.co/go/tools v0.0.0-20190523083050-ea95bdfd59fc/go.mod 
h1:rf3lG4BRIbNafJWhAfAdb/ePZxsR/4RtNHQocxwk9r4=
 k8s.io/apimachinery v0.32.1 h1:683ENpaCBjma4CYqsmZyhEzrGz6cjn1MY/X2jB2hkZs=
 k8s.io/apimachinery v0.32.1/go.mod 
h1:GpHVgxoKlTxClKcteaeuF1Ul/lDVb74KpZcxcmLDElE=
-sigs.k8s.io/release-utils v0.9.0 
h1:+JYA8E5YXzVj2Eh929woeRn1U82vLUQbpqKsgZPEmEo=
-sigs.k8s.io/release-utils v0.9.0/go.mod 
h1:xZoCJyajMJ0wtgGXWuznbC1r9dw7iJzMp/+dCkf1UGw=
+sigs.k8s.io/release-utils v0.11.0 
h1:FUVSw2dO67M7mfcQx9AITEGnTHoBOdJNbbQ3FT3o8mA=
+sigs.k8s.io/release-utils v0.11.0/go.mod 
h1:wAlXz8xruzvqZUsorI64dZ3lbkiDnYSlI4IYC6l2yEA=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/internal/cli/build.go 
new/apko-0.25.0/internal/cli/build.go
--- old/apko-0.24.0/internal/cli/build.go       2025-01-31 00:07:05.000000000 
+0100
+++ new/apko-0.25.0/internal/cli/build.go       2025-02-12 22:02:32.000000000 
+0100
@@ -206,7 +206,7 @@
                ic.Archs = types.AllArchs
        }
        // save the final set we will build
-       log.Infof("Building images for %d architectures: %+v", len(ic.Archs), 
ic.Archs)
+       log.Debugf("Building images for %d architectures: %+v", len(ic.Archs), 
ic.Archs)
 
        // Probe the VCS URL if it is not set and we are asked to do so.
        if o.WithVCS && ic.VCSUrl == "" {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/apk/apk/implementation.go 
new/apko-0.25.0/pkg/apk/apk/implementation.go
--- old/apko-0.24.0/pkg/apk/apk/implementation.go       2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/pkg/apk/apk/implementation.go       2025-02-12 
22:02:32.000000000 +0100
@@ -851,6 +851,7 @@
 
        rc := retryablehttp.NewClient()
        rc.HTTPClient = client
+       rc.Logger = clog.FromContext(ctx)
        discoveryResponse, err := rc.StandardClient().Do(discoveryRequest)
        if err != nil {
                return nil, fmt.Errorf("failed to perform key discovery: %w", 
err)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/apk/apk/repo.go 
new/apko-0.25.0/pkg/apk/apk/repo.go
--- old/apko-0.24.0/pkg/apk/apk/repo.go 2025-01-31 00:07:05.000000000 +0100
+++ new/apko-0.25.0/pkg/apk/apk/repo.go 2025-02-12 22:02:32.000000000 +0100
@@ -105,7 +105,7 @@
        ctx, span := otel.Tracer("go-apk").Start(ctx, "SetRepositories")
        defer span.End()
 
-       clog.InfoContextf(ctx, "setting apk repositories: %v", repos)
+       clog.DebugContextf(ctx, "setting apk repositories: %v", repos)
 
        if len(repos) == 0 {
                return fmt.Errorf("must provide at least one repository")
@@ -203,6 +203,9 @@
        indexes      []NamedIndex
        nameMap      map[string][]*repositoryPackage
        installIfMap map[string][]*repositoryPackage // contains any package 
that should be installed if the named package is installed
+
+       // Short-circuit providers we have already selected.
+       selected map[string]*RepositoryPackage
 }
 
 // Clone returns a copy of PkgResolver.
@@ -211,6 +214,7 @@
                indexes:      p.indexes,
                nameMap:      maps.Clone(p.nameMap),
                installIfMap: maps.Clone(p.installIfMap),
+               selected:     map[string]*RepositoryPackage{},
        }
 }
 
@@ -234,7 +238,8 @@
                installIfMap = map[string][]*repositoryPackage{}
        )
        p := &PkgResolver{
-               indexes: indexes,
+               indexes:  indexes,
+               selected: map[string]*RepositoryPackage{},
        }
 
        // create a map of every package by name and version to its 
RepositoryPackage
@@ -383,6 +388,35 @@
        }
 }
 
+func (p *PkgResolver) pick(pkg *RepositoryPackage) error {
+       if conflict, ok := p.selected[pkg.Name]; ok {
+               // Trying to re-select the same thing is fine actually.
+               if conflict == pkg {
+                       return nil
+               }
+
+               return fmt.Errorf("selecting package %s conflicts with %s on 
%q", pkg.Filename(), conflict.Filename(), pkg.Name)
+       }
+
+       p.selected[pkg.Name] = pkg
+
+       for _, prov := range pkg.Provides {
+               constraint := cachedResolvePackageNameVersionPin(prov)
+               if conflict, ok := p.selected[constraint.name]; ok {
+                       return fmt.Errorf("selecting package %s conflicts with 
%s on %q", pkg.Filename(), conflict.Filename(), constraint.name)
+               }
+
+               // We don't care about virtuals, actually.
+               if constraint.version == "" {
+                       continue
+               }
+
+               p.selected[constraint.name] = pkg
+       }
+
+       return nil
+}
+
 func (p *PkgResolver) disqualify(dq map[*RepositoryPackage]string, pkg 
*RepositoryPackage, reason string) {
        dq[pkg] = reason
 
@@ -452,7 +486,7 @@
 // GetPackagesWithDependencies get all of the dependencies for the given 
packages based on the
 // indexes. Does not filter for installed already or not.
 func (p *PkgResolver) GetPackagesWithDependencies(ctx context.Context, 
packages []string, allArchs map[string][]NamedIndex) (toInstall 
[]*RepositoryPackage, conflicts []string, err error) {
-       _, span := otel.Tracer("go-apk").Start(ctx, 
"GetPackageWithDependencies")
+       _, span := otel.Tracer("go-apk").Start(ctx, 
"GetPackagesWithDependencies")
        defer span.End()
 
        // Tracks all the packages we have disqualified and the reason we 
disqualified them.
@@ -494,10 +528,11 @@
 
        // now get the dependencies for each package
        for _, pkgName := range packages {
-               pkg, deps, confs, err := p.GetPackageWithDependencies(pkgName, 
dependenciesMap, dq)
+               pkg, deps, confs, err := p.GetPackageWithDependencies(ctx, 
pkgName, dependenciesMap, dq)
                if err != nil {
                        return toInstall, nil, &ConstraintError{pkgName, err}
                }
+
                for _, dep := range deps {
                        if _, ok := installTracked[dep.Name]; !ok {
                                toInstall = append(toInstall, dep)
@@ -527,7 +562,7 @@
 // Requires the existing set because the logic for resolving dependencies 
between competing
 // options may depend on whether or not one already is installed.
 // Must not modify the existing map directly.
-func (p *PkgResolver) GetPackageWithDependencies(pkgName string, existing 
map[string]*RepositoryPackage, dq map[*RepositoryPackage]string) 
(*RepositoryPackage, []*RepositoryPackage, []string, error) {
+func (p *PkgResolver) GetPackageWithDependencies(ctx context.Context, pkgName 
string, existing map[string]*RepositoryPackage, dq 
map[*RepositoryPackage]string) (*RepositoryPackage, []*RepositoryPackage, 
[]string, error) {
        parents := make(map[string]bool)
        localExisting := make(map[string]*RepositoryPackage, len(existing))
        existingOrigins := map[string]bool{}
@@ -544,10 +579,11 @@
        }
 
        pin := cachedResolvePackageNameVersionPin(pkgName).pin
-       deps, conflicts, err := p.getPackageDependencies(pkg, pin, true, 
parents, localExisting, existingOrigins, dq)
+       deps, conflicts, err := p.getPackageDependencies(ctx, pkg, pin, 
parents, localExisting, existingOrigins, dq)
        if err != nil {
                return nil, nil, nil, &DepError{pkg, err}
        }
+
        // eliminate duplication in dependencies
        added := make(map[string]*RepositoryPackage, len(deps))
        dependencies := make([]*RepositoryPackage, 0, len(deps))
@@ -672,7 +708,10 @@
 // It might change the order of install.
 // In other words, this _should_ be a DAG (acyclical), but because the packages
 // are just listing dependencies in text, it might be cyclical. We need to be 
careful of that.
-func (p *PkgResolver) getPackageDependencies(pkg *RepositoryPackage, allowPin 
string, allowSelfFulfill bool, parents map[string]bool, existing 
map[string]*RepositoryPackage, existingOrigins map[string]bool, dq 
map[*RepositoryPackage]string) (dependencies []*RepositoryPackage, conflicts 
[]string, err error) {
+func (p *PkgResolver) getPackageDependencies(ctx context.Context, pkg 
*RepositoryPackage, allowPin string, parents map[string]bool, existing 
map[string]*RepositoryPackage, existingOrigins map[string]bool, dq 
map[*RepositoryPackage]string) (dependencies []*RepositoryPackage, conflicts 
[]string, err error) {
+       if err := ctx.Err(); err != nil {
+               return nil, nil, context.Cause(ctx)
+       }
        // check if the package we are checking is one of our parents, avoid 
cyclical graphs
        if _, ok := parents[pkg.Name]; ok {
                return nil, nil, nil
@@ -715,7 +754,7 @@
                                continue
                        }
 
-                       if allowSelfFulfill && pkg.Name == name {
+                       if pkg.Name == name {
                                var (
                                        actualVersion, requiredVersion Version
                                        err1, err2                     error
@@ -733,6 +772,30 @@
                                }
                        }
 
+                       if picked, ok := p.selected[name]; ok {
+                               if version == "" {
+                                       // If we don't care which version, and 
we've already selected something, fantastic.
+                                       continue
+                               }
+
+                               actualVersion, err := 
cachedParseVersion(picked.Version)
+                               if err != nil {
+                                       return nil, nil, err
+                               }
+                               requiredVersion, err := 
cachedParseVersion(version)
+                               if err != nil {
+                                       return nil, nil, err
+                               }
+
+                               // We do care which version and they match.
+                               if compare.satisfies(actualVersion, 
requiredVersion) {
+                                       continue
+                               }
+
+                               // We already selected something to satisfy 
"name" and it does not match the "version" we need now.
+                               return nil, nil, fmt.Errorf("we already 
selected %q=%q which conflicts with %q=%q", picked.Name, picked.Version, name, 
version)
+                       }
+
                        // first see if it is a name of a package
                        depPkgWithVersions, ok := p.nameMap[name]
                        if !ok {
@@ -793,7 +856,12 @@
                        childParents[k] = true
                }
                childParents[pkg.Name] = true
-               subDeps, confs, err := p.getPackageDependencies(depPkg, 
allowPin, true, childParents, existing, existingOrigins, dq)
+
+               if err := p.pick(pkg); err != nil {
+                       return nil, nil, err
+               }
+
+               subDeps, confs, err := p.getPackageDependencies(ctx, depPkg, 
allowPin, childParents, existing, existingOrigins, dq)
                if err != nil {
                        return nil, nil, &ConstraintError{name, 
&DepError{depPkg, err}}
                }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/apk/apk/repo_test.go 
new/apko-0.25.0/pkg/apk/apk/repo_test.go
--- old/apko-0.24.0/pkg/apk/apk/repo_test.go    2025-01-31 00:07:05.000000000 
+0100
+++ new/apko-0.25.0/pkg/apk/apk/repo_test.go    2025-02-12 22:02:32.000000000 
+0100
@@ -128,7 +128,7 @@
                a.SetClient(&http.Client{
                        Transport: &testLocalTransport{root: testPrimaryPkgDir, 
basenameOnly: true},
                })
-               indexes, err := a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err := a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
        })
@@ -137,7 +137,7 @@
                a.SetClient(&http.Client{
                        Transport: &testLocalTransport{root: 
testRSA256IndexPkgDir, basenameOnly: true},
                })
-               indexes, err := a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err := a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
        })
@@ -149,7 +149,7 @@
                a.SetClient(&http.Client{
                        Transport: &testLocalTransport{fail: true},
                })
-               _, err := a.GetRepositoryIndexes(context.TODO(), false)
+               _, err := a.GetRepositoryIndexes(context.Background(), false)
                require.Error(t, err, "should fail when no cache and no 
network")
        })
        t.Run("we can fetch, but do not cache indices without etag", func(t 
*testing.T) {
@@ -161,7 +161,7 @@
                a.SetClient(&http.Client{
                        Transport: &testLocalTransport{root: testPrimaryPkgDir, 
basenameOnly: true},
                })
-               indexes, err := a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err := a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
 
@@ -189,7 +189,7 @@
                                },
                        },
                })
-               indexes, err := a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err := a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
                // check that the contents are the same
@@ -227,7 +227,7 @@
                        Transport: &testLocalTransport{root: testPrimaryPkgDir, 
basenameOnly: true, headers: 
map[string][]string{http.CanonicalHeaderKey("etag"): {testEtag}}},
                })
                // Use the client to fill the cache.
-               indexes, err := a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err := a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
                // Capture the initial index.
@@ -238,7 +238,7 @@
                a.SetClient(&http.Client{
                        Transport: &testLocalTransport{root: 
testAlternatePkgDir, basenameOnly: true, headers: 
map[string][]string{http.CanonicalHeaderKey("etag"): {testEtag}}},
                })
-               indexes, err = a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err = a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
                // Capture the resulting index.
@@ -259,7 +259,7 @@
                        Transport: &testLocalTransport{root: testPrimaryPkgDir, 
basenameOnly: true, headers: 
map[string][]string{http.CanonicalHeaderKey("etag"): {testEtag}}},
                })
                // Use the client to fill the cache.
-               indexes, err := a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err := a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
                // Capture the initial index.
@@ -272,7 +272,7 @@
                        Transport: &testLocalTransport{root: 
testAlternatePkgDir, basenameOnly: true, headers: 
map[string][]string{http.CanonicalHeaderKey("etag"): {testEtag + "change"}}},
                })
 
-               indexes, err = a.GetRepositoryIndexes(context.TODO(), false)
+               indexes, err = a.GetRepositoryIndexes(context.Background(), 
false)
                require.NoErrorf(t, err, "unable to get indexes")
                require.Greater(t, len(indexes), 0, "no indexes found")
                // Capture the resulting index.
@@ -297,7 +297,7 @@
                                                headers:      
map[string][]string{http.CanonicalHeaderKey("etag"): {fmt.Sprint(i)}},
                                        },
                                })
-                               indexes, err := 
a.GetRepositoryIndexes(context.TODO(), false)
+                               indexes, err := 
a.GetRepositoryIndexes(context.Background(), false)
                                require.NoErrorf(t, err, "unable to get 
indexes")
                                require.Greater(t, len(indexes), 0, "no indexes 
found")
                                return nil
@@ -594,7 +594,7 @@
                _, index := testGetPackagesAndIndex()
 
                resolver := NewPkgResolver(context.Background(), 
testNamedRepositoryFromIndexes(index))
-               _, pkgs, _, err := 
resolver.GetPackageWithDependencies("package1", nil, 
map[*RepositoryPackage]string{})
+               _, pkgs, _, err := 
resolver.GetPackageWithDependencies(context.Background(), "package1", nil, 
map[*RepositoryPackage]string{})
                require.NoErrorf(t, err, "unable to get dependencies")
 
                actual := make([]string, 0, len(pkgs))
@@ -609,7 +609,7 @@
                _, index := testGetPackagesAndIndex()
 
                resolver := NewPkgResolver(context.Background(), 
testNamedRepositoryFromIndexes(index))
-               _, pkgs, _, err := 
resolver.GetPackageWithDependencies("package3", nil, 
map[*RepositoryPackage]string{})
+               _, pkgs, _, err := 
resolver.GetPackageWithDependencies(context.Background(), "package3", nil, 
map[*RepositoryPackage]string{})
                require.NoErrorf(t, err, "unable to get dependencies")
 
                actual := make([]string, 0, len(pkgs))
@@ -618,34 +618,6 @@
                }
                require.True(t, reflect.DeepEqual(expected, actual), 
"dependencies mismatch:\nactual %v\nexpect %v", actual, expected)
        })
-       t.Run("self-fulfill", func(t *testing.T) {
-               _, index := testGetPackagesAndIndex()
-
-               resolver := NewPkgResolver(context.Background(), 
testNamedRepositoryFromIndexes(index))
-               pkg6, err := resolver.ResolvePackage("package6", 
map[*RepositoryPackage]string{})
-               require.NoErrorf(t, err, "unable to resolve package6")
-               require.GreaterOrEqual(t, len(pkg6), 1, "package6 should have 
at least one match")
-               tests := []struct {
-                       name     string
-                       expected []string
-                       allow    bool
-               }{
-                       {"allowed", []string{"package5"}, true},
-                       {"not allowed", []string{"package6", "package5"}, 
false},
-               }
-               for _, tt := range tests {
-                       t.Run(tt.name, func(t *testing.T) {
-                               deps, _, err := 
resolver.getPackageDependencies(pkg6[0], "", tt.allow, nil, nil, nil, 
map[*RepositoryPackage]string{})
-                               require.NoErrorf(t, err, "unable to get 
dependencies")
-
-                               actual := make([]string, 0, len(deps))
-                               for _, p := range deps {
-                                       actual = append(actual, p.Name)
-                               }
-                               require.True(t, reflect.DeepEqual(tt.expected, 
actual), "dependencies mismatch:\nactual %v\nexpect %v", actual, tt.expected)
-                       })
-               }
-       })
        t.Run("existing dependency", func(t *testing.T) {
                origPkgs, index := testGetPackagesAndIndex()
                resolver := NewPkgResolver(context.Background(), 
testNamedRepositoryFromIndexes(index))
@@ -653,7 +625,7 @@
                // start with regular resolution, just to compare
                expectedName := "package5"
                expectedVersion := "2.0.0" // highest version
-               _, pkgs, _, err := 
resolver.GetPackageWithDependencies("package9", nil, 
map[*RepositoryPackage]string{})
+               _, pkgs, _, err := 
resolver.GetPackageWithDependencies(context.Background(), "package9", nil, 
map[*RepositoryPackage]string{})
                require.NoErrorf(t, err, "unable to get dependencies")
                require.Len(t, pkgs, 1, "package9 should have one dependency, 
%s", expectedName)
                require.Equal(t, expectedName, pkgs[0].Name)
@@ -669,7 +641,7 @@
                                break
                        }
                }
-               _, pkgs, _, err = 
resolver.GetPackageWithDependencies("package9", existingPkgs, 
map[*RepositoryPackage]string{})
+               _, pkgs, _, err = 
resolver.GetPackageWithDependencies(context.Background(), "package9", 
existingPkgs, map[*RepositoryPackage]string{})
                require.NoErrorf(t, err, "unable to get dependencies")
                require.Len(t, pkgs, 1, "package9 should have one dependency, 
%s", expectedName)
                require.Equal(t, expectedName, pkgs[0].Name)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/build/oci/publish.go 
new/apko-0.25.0/pkg/build/oci/publish.go
--- old/apko-0.24.0/pkg/build/oci/publish.go    2025-01-31 00:07:05.000000000 
+0100
+++ new/apko-0.25.0/pkg/build/oci/publish.go    2025-02-12 22:02:32.000000000 
+0100
@@ -56,9 +56,7 @@
                if err != nil {
                        return name.Digest{}, err
                }
-               if strings.HasPrefix(localSrcTag.Name(), fmt.Sprintf("%s/", 
LocalDomain)) {
-                       log.Warnf("skipping local domain tagging %s as %s", 
localSrcTag.Name(), localDstTag.Name())
-               } else {
+               if !strings.HasPrefix(localSrcTag.Name(), fmt.Sprintf("%s/", 
LocalDomain)) {
                        log.Infof("tagging local image %s as %s", 
localSrcTag.Name(), localDstTag.Name())
                        if err := daemon.Tag(localSrcTag, localDstTag, 
daemon.WithContext(ctx)); err != nil {
                                return name.Digest{}, err
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/build/options.go 
new/apko-0.25.0/pkg/build/options.go
--- old/apko-0.24.0/pkg/build/options.go        2025-01-31 00:07:05.000000000 
+0100
+++ new/apko-0.25.0/pkg/build/options.go        2025-02-12 22:02:32.000000000 
+0100
@@ -44,7 +44,7 @@
 
                var ic types.ImageConfiguration
                hasher := sha2562.New()
-               if err := ic.Load(ctx, configFile, includePaths, hasher); err 
!= nil {
+               if err := ic.Load(ctx, configFile, includePaths, hasher); err 
!= nil { //nolint:staticcheck
                        return fmt.Errorf("failed to load image configuration: 
%w", err)
                }
 
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/build/types/image_configuration.go 
new/apko-0.25.0/pkg/build/types/image_configuration.go
--- old/apko-0.24.0/pkg/build/types/image_configuration.go      2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/pkg/build/types/image_configuration.go      2025-02-12 
22:02:32.000000000 +0100
@@ -45,7 +45,7 @@
 
        if url != "" {
                ic.VCSUrl = url
-               log.Infof("detected %s as VCS URL", ic.VCSUrl)
+               log.Debugf("detected %s as VCS URL", ic.VCSUrl)
        }
 }
 
@@ -179,6 +179,8 @@
 // Load - loads an image configuration given a configuration file path.
 // Populates configHasher with the configuration data loaded from the 
imageConfigPath and the other referenced files.
 // You can pass any dummy hasher (like fnv.New32()), if you don't care about 
the hash of the configuration.
+//
+// Deprecated: This will be removed in a future release.
 func (ic *ImageConfiguration) Load(ctx context.Context, imageConfigPath 
string, includePaths []string, configHasher hash.Hash) error {
        data, err := ic.readLocal(imageConfigPath, includePaths)
        if err != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/build/types/schema.json 
new/apko-0.25.0/pkg/build/types/schema.json
--- old/apko-0.24.0/pkg/build/types/schema.json 2025-01-31 00:07:05.000000000 
+0100
+++ new/apko-0.25.0/pkg/build/types/schema.json 2025-02-12 22:02:32.000000000 
+0100
@@ -122,7 +122,7 @@
         },
         "include": {
           "type": "string",
-          "description": "Optional: Path to a local file containing additional 
image configuration\n\nThe included configuration is deep merged with the 
parent configuration"
+          "description": "Optional: Path to a local file containing additional 
image configuration\n\nThe included configuration is deep merged with the 
parent configuration\n\nDeprecated: This will be removed in a future release."
         },
         "volumes": {
           "items": {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/build/types/types.go 
new/apko-0.25.0/pkg/build/types/types.go
--- old/apko-0.24.0/pkg/build/types/types.go    2025-01-31 00:07:05.000000000 
+0100
+++ new/apko-0.25.0/pkg/build/types/types.go    2025-02-12 22:02:32.000000000 
+0100
@@ -181,6 +181,8 @@
        // Optional: Path to a local file containing additional image 
configuration
        //
        // The included configuration is deep merged with the parent 
configuration
+       //
+       // Deprecated: This will be removed in a future release.
        Include string `json:"include,omitempty" yaml:"include,omitempty"`
 
        // Optional: A list of volumes to configure
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/apko-0.24.0/pkg/sbom/generator/spdx/spdx.go 
new/apko-0.25.0/pkg/sbom/generator/spdx/spdx.go
--- old/apko-0.24.0/pkg/sbom/generator/spdx/spdx.go     2025-01-31 
00:07:05.000000000 +0100
+++ new/apko-0.25.0/pkg/sbom/generator/spdx/spdx.go     2025-02-12 
22:02:32.000000000 +0100
@@ -466,6 +466,14 @@
                DownloadLocation: url,
                Originator:       fmt.Sprintf("Person: %s", pkg.Maintainer),
                SourceInfo:       "Package info from apk database",
+               // This is APKv2 APKINDEX SHA1 file checksum
+               // 
https://wiki.alpinelinux.org/wiki/Apk_spec#Package_Checksum_Field
+               // This is the only meaningful and signed checksum
+               // right now. This can be upgrade to SHA256 when
+               // switching to the v3 index format. Whilst SPDX
+               // supports other checksums, there is currently no
+               // other checksum that one can verify in APKINDEX or
+               // query with apk-tools
                Checksums: []Checksum{
                        {
                                Algorithm: "SHA1",
@@ -709,6 +717,8 @@
        checksums := []Checksum{}
        packageName := vcsURL
        if url, commitHash, found := strings.Cut(vcsURL, "@"); found {
+               // This is git commit hash, currently defined as SHA1
+               // SHA256 is only experimental in gitlab
                checksums = append(checksums, Checksum{
                        Algorithm: "SHA1",
                        Value:     commitHash,

++++++ apko.obsinfo ++++++
--- /var/tmp/diff_new_pack.SBVdrZ/_old  2025-02-13 18:39:19.100841945 +0100
+++ /var/tmp/diff_new_pack.SBVdrZ/_new  2025-02-13 18:39:19.104842111 +0100
@@ -1,5 +1,5 @@
 name: apko
-version: 0.24.0
-mtime: 1738278425
-commit: 2668cf55135b756d3b19771deb5c6dc3b26a5233
+version: 0.25.0
+mtime: 1739394152
+commit: d47f064ae3c32dce4fb8f60ad288ac1664805373
 

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

Reply via email to