Script 'mail_helper' called by obssrc
Hello community,

here is the log from the commit of package regclient for openSUSE:Factory 
checked in at 2025-08-25 20:38:07
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/regclient (Old)
 and      /work/SRC/openSUSE:Factory/.regclient.new.30751 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "regclient"

Mon Aug 25 20:38:07 2025 rev:8 rq:1301169 version:0.9.1

Changes:
--------
--- /work/SRC/openSUSE:Factory/regclient/regclient.changes      2025-07-01 
11:35:57.257791193 +0200
+++ /work/SRC/openSUSE:Factory/.regclient.new.30751/regclient.changes   
2025-08-25 20:39:04.790558645 +0200
@@ -1,0 +2,11 @@
+Mon Aug 25 04:49:53 UTC 2025 - Johannes Kastl 
<opensuse_buildserv...@ojkastl.de>
+
+- Update to version 0.9.1:
+  * Features:
+    - Allow relative urls in bearer auth. (PR 963)
+    - Add "ns" query param to registry mirror requests. (PR 976)
+  * Miscellaneous:
+    - Update to SLSA v1 provenance. (PR 968)
+    - Add a "make clean" command. (PR 969)
+
+-------------------------------------------------------------------

Old:
----
  regclient-0.9.0.obscpio

New:
----
  regclient-0.9.1.obscpio

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

Other differences:
------------------
++++++ regclient.spec ++++++
--- /var/tmp/diff_new_pack.MJXbkq/_old  2025-08-25 20:39:05.650594674 +0200
+++ /var/tmp/diff_new_pack.MJXbkq/_new  2025-08-25 20:39:05.650594674 +0200
@@ -1,7 +1,7 @@
 #
 # spec file for package regclient
 #
-# Copyright (c) 2025 SUSE LLC
+# Copyright (c) 2025 SUSE LLC and contributors
 #
 # All modifications and additions to the file contributed by third parties
 # remain the property of their copyright owners, unless otherwise agreed
@@ -17,7 +17,7 @@
 
 
 Name:           regclient
-Version:        0.9.0
+Version:        0.9.1
 Release:        0
 Summary:        OCI Registry Client in Go and tooling using those libraries
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.MJXbkq/_old  2025-08-25 20:39:05.686596183 +0200
+++ /var/tmp/diff_new_pack.MJXbkq/_new  2025-08-25 20:39:05.686596183 +0200
@@ -3,7 +3,7 @@
     <param name="url">https://github.com/regclient/regclient</param>
     <param name="scm">git</param>
     <param name="package-meta">yes</param>
-    <param name="revision">v0.9.0</param>
+    <param name="revision">v0.9.1</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.MJXbkq/_old  2025-08-25 20:39:05.706597020 +0200
+++ /var/tmp/diff_new_pack.MJXbkq/_new  2025-08-25 20:39:05.710597188 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/regclient/regclient</param>
-              <param 
name="changesrevision">ad4e3d926030f76419211838494434974f17db67</param></service></servicedata>
+              <param 
name="changesrevision">51df886b5e3b138ac168540ccef5997e0d383c86</param></service></servicedata>
 (No newline at EOF)
 

++++++ regclient-0.9.0.obscpio -> regclient-0.9.1.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/HEAD 
new/regclient-0.9.1/.git/HEAD
--- old/regclient-0.9.0/.git/HEAD       2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/HEAD       2025-08-24 21:20:38.000000000 +0200
@@ -1 +1 @@
-ad4e3d926030f76419211838494434974f17db67
+51df886b5e3b138ac168540ccef5997e0d383c86
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/ORIG_HEAD 
new/regclient-0.9.1/.git/ORIG_HEAD
--- old/regclient-0.9.0/.git/ORIG_HEAD  2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/ORIG_HEAD  2025-08-24 21:20:38.000000000 +0200
@@ -1 +1 @@
-ad4e3d926030f76419211838494434974f17db67
+51df886b5e3b138ac168540ccef5997e0d383c86
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/applypatch-msg.sample 
new/regclient-0.9.1/.git/hooks/applypatch-msg.sample
--- old/regclient-0.9.0/.git/hooks/applypatch-msg.sample        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/applypatch-msg.sample        2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to check the commit log message taken by
 # applypatch from an e-mail message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/commit-msg.sample 
new/regclient-0.9.1/.git/hooks/commit-msg.sample
--- old/regclient-0.9.0/.git/hooks/commit-msg.sample    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/commit-msg.sample    2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to check the commit log message.
 # Called by "git commit" with one argument, the name of the file
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/fsmonitor-watchman.sample 
new/regclient-0.9.1/.git/hooks/fsmonitor-watchman.sample
--- old/regclient-0.9.0/.git/hooks/fsmonitor-watchman.sample    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/fsmonitor-watchman.sample    2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/al9x8cr5xifp3qd2f5cdzh6z603kb5ps-perl-5.40.0/bin/perl
+#!/nix/store/nxw1xxfxkd6bm570nb6gv0g6pghp7i4c-perl-5.40.0/bin/perl
 
 use strict;
 use warnings;
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/post-update.sample 
new/regclient-0.9.1/.git/hooks/post-update.sample
--- old/regclient-0.9.0/.git/hooks/post-update.sample   2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/post-update.sample   2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to prepare a packed repository for use over
 # dumb transports.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/pre-applypatch.sample 
new/regclient-0.9.1/.git/hooks/pre-applypatch.sample
--- old/regclient-0.9.0/.git/hooks/pre-applypatch.sample        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/pre-applypatch.sample        2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to verify what is about to be committed
 # by applypatch from an e-mail message.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/pre-commit.sample 
new/regclient-0.9.1/.git/hooks/pre-commit.sample
--- old/regclient-0.9.0/.git/hooks/pre-commit.sample    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/pre-commit.sample    2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to verify what is about to be committed.
 # Called by "git commit" with no arguments.  The hook should
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/pre-merge-commit.sample 
new/regclient-0.9.1/.git/hooks/pre-merge-commit.sample
--- old/regclient-0.9.0/.git/hooks/pre-merge-commit.sample      2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/pre-merge-commit.sample      2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to verify what is about to be committed.
 # Called by "git merge" with no arguments.  The hook should
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/pre-push.sample 
new/regclient-0.9.1/.git/hooks/pre-push.sample
--- old/regclient-0.9.0/.git/hooks/pre-push.sample      2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/pre-push.sample      2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 
 # An example hook script to verify what is about to be pushed.  Called by "git
 # push" after it has checked the remote status, but before anything has been
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/pre-rebase.sample 
new/regclient-0.9.1/.git/hooks/pre-rebase.sample
--- old/regclient-0.9.0/.git/hooks/pre-rebase.sample    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/pre-rebase.sample    2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # Copyright (c) 2006, 2008 Junio C Hamano
 #
@@ -65,7 +65,7 @@
        fi
 else
        not_in_next=`git rev-list --pretty=oneline ^${publish} "$topic"`
-       /nix/store/al9x8cr5xifp3qd2f5cdzh6z603kb5ps-perl-5.40.0/bin/perl -e '
+       /nix/store/nxw1xxfxkd6bm570nb6gv0g6pghp7i4c-perl-5.40.0/bin/perl -e '
                my $topic = $ARGV[0];
                my $msg = "* $topic has commits already merged to public 
branch:\n";
                my (%not_in_next) = map {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/pre-receive.sample 
new/regclient-0.9.1/.git/hooks/pre-receive.sample
--- old/regclient-0.9.0/.git/hooks/pre-receive.sample   2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/pre-receive.sample   2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to make use of push options.
 # The example simply echoes all push options that start with 'echoback='
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/prepare-commit-msg.sample 
new/regclient-0.9.1/.git/hooks/prepare-commit-msg.sample
--- old/regclient-0.9.0/.git/hooks/prepare-commit-msg.sample    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/prepare-commit-msg.sample    2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to prepare the commit log message.
 # Called by "git commit" with the name of the file that has the
@@ -24,11 +24,11 @@
 COMMIT_SOURCE=$2
 SHA1=$3
 
-/nix/store/al9x8cr5xifp3qd2f5cdzh6z603kb5ps-perl-5.40.0/bin/perl -i.bak -ne 
'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
+/nix/store/nxw1xxfxkd6bm570nb6gv0g6pghp7i4c-perl-5.40.0/bin/perl -i.bak -ne 
'print unless(m/^. Please enter the commit message/..m/^#$/)' "$COMMIT_MSG_FILE"
 
 # case "$COMMIT_SOURCE,$SHA1" in
 #  ,|template,)
-#    /nix/store/al9x8cr5xifp3qd2f5cdzh6z603kb5ps-perl-5.40.0/bin/perl -i.bak 
-pe '
+#    /nix/store/nxw1xxfxkd6bm570nb6gv0g6pghp7i4c-perl-5.40.0/bin/perl -i.bak 
-pe '
 #       print "\n" . `git diff --cached --name-status -r`
 #       if /^#/ && $first++ == 0' "$COMMIT_MSG_FILE" ;;
 #  *) ;;
@@ -38,5 +38,5 @@
 # git interpret-trailers --in-place --trailer "$SOB" "$COMMIT_MSG_FILE"
 # if test -z "$COMMIT_SOURCE"
 # then
-#   /nix/store/al9x8cr5xifp3qd2f5cdzh6z603kb5ps-perl-5.40.0/bin/perl -i.bak 
-pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
+#   /nix/store/nxw1xxfxkd6bm570nb6gv0g6pghp7i4c-perl-5.40.0/bin/perl -i.bak 
-pe 'print "\n" if !$first_line++' "$COMMIT_MSG_FILE"
 # fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/push-to-checkout.sample 
new/regclient-0.9.1/.git/hooks/push-to-checkout.sample
--- old/regclient-0.9.0/.git/hooks/push-to-checkout.sample      2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/push-to-checkout.sample      2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 
 # An example hook script to update a checked-out tree on a git push.
 #
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/sendemail-validate.sample 
new/regclient-0.9.1/.git/hooks/sendemail-validate.sample
--- old/regclient-0.9.0/.git/hooks/sendemail-validate.sample    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/sendemail-validate.sample    2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 
 # An example hook script to validate a patch (and/or patch series) before
 # sending it via email.
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/hooks/update.sample 
new/regclient-0.9.1/.git/hooks/update.sample
--- old/regclient-0.9.0/.git/hooks/update.sample        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/hooks/update.sample        2025-08-24 
21:20:38.000000000 +0200
@@ -1,4 +1,4 @@
-#!/nix/store/xy4jjgw87sbgwylm5kn047d9gkbhsr9x-bash-5.2p37/bin/bash
+#!/nix/store/cfqbabpc7xwg8akbcchqbq3cai6qq2vs-bash-5.2p37/bin/bash
 #
 # An example hook script to block unannotated tags from entering.
 # Called by "git receive-pack" with arguments: refname sha1-old sha1-new
Binary files old/regclient-0.9.0/.git/index and new/regclient-0.9.1/.git/index 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/logs/HEAD 
new/regclient-0.9.1/.git/logs/HEAD
--- old/regclient-0.9.0/.git/logs/HEAD  2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/logs/HEAD  2025-08-24 21:20:38.000000000 +0200
@@ -1,2 +1,2 @@
-0000000000000000000000000000000000000000 
34a3470a35433200295de35494febfdde6a65b9d kastl <kastl@baten.(none)> 1751294008 
+0200  clone: from https://github.com/regclient/regclient
-34a3470a35433200295de35494febfdde6a65b9d 
ad4e3d926030f76419211838494434974f17db67 kastl <kastl@baten.(none)> 1751294008 
+0200  checkout: moving from main to v0.9.0
+0000000000000000000000000000000000000000 
9c9bcc2f705c704826a86a25ab23822de10c0b9f kastl <kastl@tumbleweed-pkg.baten> 
1756097393 +0200  clone: from https://github.com/regclient/regclient
+9c9bcc2f705c704826a86a25ab23822de10c0b9f 
51df886b5e3b138ac168540ccef5997e0d383c86 kastl <kastl@tumbleweed-pkg.baten> 
1756097393 +0200  checkout: moving from main to v0.9.1
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/logs/refs/heads/main 
new/regclient-0.9.1/.git/logs/refs/heads/main
--- old/regclient-0.9.0/.git/logs/refs/heads/main       2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/logs/refs/heads/main       2025-08-24 
21:20:38.000000000 +0200
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
34a3470a35433200295de35494febfdde6a65b9d kastl <kastl@baten.(none)> 1751294008 
+0200  clone: from https://github.com/regclient/regclient
+0000000000000000000000000000000000000000 
9c9bcc2f705c704826a86a25ab23822de10c0b9f kastl <kastl@tumbleweed-pkg.baten> 
1756097393 +0200  clone: from https://github.com/regclient/regclient
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/logs/refs/remotes/origin/HEAD 
new/regclient-0.9.1/.git/logs/refs/remotes/origin/HEAD
--- old/regclient-0.9.0/.git/logs/refs/remotes/origin/HEAD      2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.git/logs/refs/remotes/origin/HEAD      2025-08-24 
21:20:38.000000000 +0200
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
34a3470a35433200295de35494febfdde6a65b9d kastl <kastl@baten.(none)> 1751294008 
+0200  clone: from https://github.com/regclient/regclient
+0000000000000000000000000000000000000000 
9c9bcc2f705c704826a86a25ab23822de10c0b9f kastl <kastl@tumbleweed-pkg.baten> 
1756097393 +0200  clone: from https://github.com/regclient/regclient
Binary files 
old/regclient-0.9.0/.git/objects/pack/pack-95bba161e97c815614f6e72094960e73ebea4924.idx
 and 
new/regclient-0.9.1/.git/objects/pack/pack-95bba161e97c815614f6e72094960e73ebea4924.idx
 differ
Binary files 
old/regclient-0.9.0/.git/objects/pack/pack-95bba161e97c815614f6e72094960e73ebea4924.pack
 and 
new/regclient-0.9.1/.git/objects/pack/pack-95bba161e97c815614f6e72094960e73ebea4924.pack
 differ
Binary files 
old/regclient-0.9.0/.git/objects/pack/pack-95bba161e97c815614f6e72094960e73ebea4924.rev
 and 
new/regclient-0.9.1/.git/objects/pack/pack-95bba161e97c815614f6e72094960e73ebea4924.rev
 differ
Binary files 
old/regclient-0.9.0/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.idx
 and 
new/regclient-0.9.1/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.idx
 differ
Binary files 
old/regclient-0.9.0/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.pack
 and 
new/regclient-0.9.1/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.pack
 differ
Binary files 
old/regclient-0.9.0/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.rev
 and 
new/regclient-0.9.1/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.rev
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/packed-refs 
new/regclient-0.9.1/.git/packed-refs
--- old/regclient-0.9.0/.git/packed-refs        2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/.git/packed-refs        2025-08-24 21:20:38.000000000 
+0200
@@ -1,5 +1,5 @@
 # pack-refs with: peeled fully-peeled sorted 
-34a3470a35433200295de35494febfdde6a65b9d refs/remotes/origin/main
+9c9bcc2f705c704826a86a25ab23822de10c0b9f refs/remotes/origin/main
 daa734a0b4dc9c19231cfe691a241f0ce2a7b2f4 refs/remotes/origin/releases/0.0
 4c6dd972a3c609f7c0997bb6e464aee431f8c971 refs/remotes/origin/releases/0.2
 6a1a13c410f734f5e18a6032936bc6764814eae7 refs/remotes/origin/releases/0.3
@@ -8,7 +8,7 @@
 766ee6291f882778207ff42207f9ca8b1da54e57 refs/remotes/origin/releases/0.6
 6b1f7bd9a3b2972605f04a534143f7fed522b680 refs/remotes/origin/releases/0.7
 ba184b305aaad55b40bf517d06e4d8d1afd35bf9 refs/remotes/origin/releases/0.8
-ad4e3d926030f76419211838494434974f17db67 refs/remotes/origin/releases/0.9
+51df886b5e3b138ac168540ccef5997e0d383c86 refs/remotes/origin/releases/0.9
 54d924682eb6425847db8dd4acdfcd2beea4c83a refs/tags/v0.0.1
 ^f4dd0b8c5836798787b73dbec754be1d8a93695f
 4fc2fa04faba545e279745f2afd8faad7ca7d296 refs/tags/v0.0.2
@@ -101,3 +101,5 @@
 ^ba184b305aaad55b40bf517d06e4d8d1afd35bf9
 ecf7b1e0da3315e5601ce8c01e82d3dcd4916c7d refs/tags/v0.9.0
 ^ad4e3d926030f76419211838494434974f17db67
+f0fc5276b3f9824a7dbe90f2f19c6b793327a2ab refs/tags/v0.9.1
+^51df886b5e3b138ac168540ccef5997e0d383c86
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.git/refs/heads/main 
new/regclient-0.9.1/.git/refs/heads/main
--- old/regclient-0.9.0/.git/refs/heads/main    2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/.git/refs/heads/main    2025-08-24 21:20:38.000000000 
+0200
@@ -1 +1 @@
-34a3470a35433200295de35494febfdde6a65b9d
+9c9bcc2f705c704826a86a25ab23822de10c0b9f
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.github/workflows/ci-registry.yml 
new/regclient-0.9.1/.github/workflows/ci-registry.yml
--- old/regclient-0.9.0/.github/workflows/ci-registry.yml       2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.github/workflows/ci-registry.yml       2025-08-24 
21:20:38.000000000 +0200
@@ -19,11 +19,11 @@
     runs-on: ubuntu-latest
 
     env:
-      RELEASE_GO_VER: "1.24"
+      RELEASE_GO_VER: "1.25"
 
     steps:
     - name: Check out code
-      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
 
     - name: "Set up Go ${{ env.RELEASE_GO_VER }}"
       uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.github/workflows/docker.yml 
new/regclient-0.9.1/.github/workflows/docker.yml
--- old/regclient-0.9.0/.github/workflows/docker.yml    2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.github/workflows/docker.yml    2025-08-24 
21:20:38.000000000 +0200
@@ -29,11 +29,11 @@
 
     env:
       ALPINE_NAME: "alpine:3"
-      ALPINE_DIGEST: 
"sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715" # 
3.22.0
+      ALPINE_DIGEST: 
"sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1" # 
3.22.1
 
     steps:
     - name: Check out code
-      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
 
     - name: Prepare
       id: prep
@@ -89,14 +89,14 @@
 
     - name: Login to DockerHub
       if: github.repository_owner == 'regclient'
-      uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # 
v3.4.0 
+      uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # 
v3.5.0 
       with:
         username: ${{ secrets.DOCKERHUB_USERNAME }}
         password: ${{ secrets.DOCKERHUB_TOKEN }}
 
     - name: Login to GHCR
       if: github.repository_owner == 'regclient'
-      uses: docker/login-action@74a5d142397b4f367a81961eba4e8cd7edddf772 # 
v3.4.0
+      uses: docker/login-action@184bdaa0721073962dff0199f1fb9940f07167d1 # 
v3.5.0
       with:
         registry: ghcr.io
         username: ${{ secrets.GHCR_USERNAME }}
@@ -111,6 +111,7 @@
         platforms: 
linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x
         target: release-${{ matrix.type }}
         outputs: 
type=oci,oci-artifact=true,dest=output/${{matrix.image}}-${{matrix.type}}.tar
+        provenance: version=v1,mode=max
         build-args: |
           SOURCE_DATE_EPOCH=${{ steps.prep.outputs.vcs_sec }}
           BUILD_DATE=${{ steps.prep.outputs.created }}
@@ -119,20 +120,20 @@
 
     - name: Install cosign
       if: github.event_name != 'pull_request' && github.repository_owner == 
'regclient'
-      uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac 
# v3.9.1
+      uses: sigstore/cosign-installer@d58896d6a1865668819e1d91763c7751a165e159 
# v3.9.2
       with:
-        cosign-release: "v2.5.2"
+        cosign-release: "v2.5.3"
     
     - name: Install syft
       if: github.event_name != 'pull_request' && github.repository_owner == 
'regclient'
-      uses: 
anchore/sbom-action/download-syft@9246b90769f852b3a8921f330c59e0b3f439d6e9 # 
v0.20.1
+      uses: 
anchore/sbom-action/download-syft@da167eac915b4e86f08b264dbdbc867b61be6f0c # 
v0.20.5
       id: syft
       with:
-        syft-version: "v1.27.1"
+        syft-version: "v1.31.0"
     
     # Dogfooding, use regctl to modify regclient images to improve 
reproducibility
     - name: Install regctl
-      uses: 
regclient/actions/regctl-installer@0a960cee89b1ef446f3d33b58064083fdd7728cb # 
main
+      uses: 
regclient/actions/regctl-installer@03ca0eeb8348921b9447b7d5d6b6d350550ddb3b # 
main
       if: github.event_name != 'pull_request' && github.repository_owner == 
'regclient'
       with:
         release: main
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.github/workflows/go.yml 
new/regclient-0.9.1/.github/workflows/go.yml
--- old/regclient-0.9.0/.github/workflows/go.yml        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.github/workflows/go.yml        2025-08-24 
21:20:38.000000000 +0200
@@ -19,10 +19,10 @@
     runs-on: ubuntu-latest
     strategy:
       matrix:
-        gover: ["1.23", "1.24"]
+        gover: ["1.24", "1.25"]
 
     env:
-      RELEASE_GO_VER: "1.24"
+      RELEASE_GO_VER: "1.25"
       # do not automatically upgrade go to a different version: 
https://go.dev/doc/toolchain
       GOTOOLCHAIN: "local"
 
@@ -32,7 +32,7 @@
 
     steps:
     - name: Check out code
-      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
 
     - name: "Set up Go ${{ matrix.gover }}"
       uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
@@ -60,10 +60,10 @@
 
     - name: Install syft
       if: startsWith( github.ref, 'refs/tags/v' ) || github.ref == 
'refs/heads/main'
-      uses: 
anchore/sbom-action/download-syft@9246b90769f852b3a8921f330c59e0b3f439d6e9 # 
v0.20.1
+      uses: 
anchore/sbom-action/download-syft@da167eac915b4e86f08b264dbdbc867b61be6f0c # 
v0.20.5
       id: syft
       with:
-        syft-version: "v1.27.1"
+        syft-version: "v1.31.0"
 
     - name: Build artifacts
       if: startsWith( github.ref, 'refs/tags/v' ) || github.ref == 
'refs/heads/main'
@@ -71,9 +71,9 @@
 
     - name: Install cosign
       if: ( startsWith( github.ref, 'refs/tags/v' ) || github.ref == 
'refs/heads/main' ) && matrix.gover == env.RELEASE_GO_VER
-      uses: sigstore/cosign-installer@398d4b0eeef1380460a10c8013a76f728fb906ac 
# v3.9.1
+      uses: sigstore/cosign-installer@d58896d6a1865668819e1d91763c7751a165e159 
# v3.9.2
       with:
-        cosign-release: "v2.5.2"
+        cosign-release: "v2.5.3"
 
     - name: Package artifacts
       if: ( startsWith( github.ref, 'refs/tags/v' ) || github.ref == 
'refs/heads/main' ) && matrix.gover == env.RELEASE_GO_VER
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.github/workflows/version-check.yml 
new/regclient-0.9.1/.github/workflows/version-check.yml
--- old/regclient-0.9.0/.github/workflows/version-check.yml     2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.github/workflows/version-check.yml     2025-08-24 
21:20:38.000000000 +0200
@@ -15,7 +15,7 @@
 
     steps:
       - name: Check out code
-        uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # 
v4.2.2
+        uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # 
v5.0.0
       - name: Version Check
         uses: docker://ghcr.io/sudo-bmitch/version-bump:edge
         with:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.github/workflows/vulnscans.yml 
new/regclient-0.9.1/.github/workflows/vulnscans.yml
--- old/regclient-0.9.0/.github/workflows/vulnscans.yml 2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/.github/workflows/vulnscans.yml 2025-08-24 
21:20:38.000000000 +0200
@@ -13,11 +13,11 @@
     name: Run vulnerability scans
     runs-on: ubuntu-latest
     env:
-      RELEASE_GO_VER: "1.24"
+      RELEASE_GO_VER: "1.25"
 
     steps:
     - name: Check out code
-      uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2
+      uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0
 
     - name: "Set up Go"
       uses: actions/setup-go@d35c59abb061a4a6fb18e82ac0862c26744d6ab5 # v5.5.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.osv-scanner.toml 
new/regclient-0.9.1/.osv-scanner.toml
--- old/regclient-0.9.0/.osv-scanner.toml       2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/.osv-scanner.toml       2025-08-24 21:20:38.000000000 
+0200
@@ -1 +1 @@
-GoVersionOverride = "1.24.4"
+GoVersionOverride = "1.25.0"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/.version-bump.lock 
new/regclient-0.9.1/.version-bump.lock
--- old/regclient-0.9.0/.version-bump.lock      2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/.version-bump.lock      2025-08-24 21:20:38.000000000 
+0200
@@ -1,52 +1,52 @@
-{"name":"docker-arg-alpine-digest","key":"docker.io/library/alpine:3.22.0","version":"sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715"}
-{"name":"docker-arg-alpine-tag","key":"docker.io/library/alpine","version":"3.22.0"}
-{"name":"docker-arg-ecr","key":"https://github.com/awslabs/amazon-ecr-credential-helper.git:main","version":"96d88b484b17635a8ce06b0605e9ba1b2a0c85f6"}
+{"name":"docker-arg-alpine-digest","key":"docker.io/library/alpine:3.22.1","version":"sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1"}
+{"name":"docker-arg-alpine-tag","key":"docker.io/library/alpine","version":"3.22.1"}
+{"name":"docker-arg-ecr","key":"https://github.com/awslabs/amazon-ecr-credential-helper.git:main","version":"64b08bad70174a1849fe597f0c59288eb7b7cf91"}
 
{"name":"docker-arg-gcr","key":"https://github.com/GoogleCloudPlatform/docker-credential-gcr.git","version":"v2.1.30"}
-{"name":"docker-arg-go-digest","key":"docker.io/library/golang:1.24.4-alpine","version":"sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a"}
-{"name":"docker-arg-go-tag","key":"docker.io/library/golang","version":"1.24.4"}
+{"name":"docker-arg-go-digest","key":"docker.io/library/golang:1.25.0-alpine","version":"sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440"}
+{"name":"docker-arg-go-tag","key":"docker.io/library/golang","version":"1.25.0"}
 
{"name":"docker-arg-lunajson","key":"https://github.com/grafi-tt/lunajson.git:master","version":"3d10600874527d71519b33ecbb314eb93ccd1df6"}
 
{"name":"docker-arg-semver","key":"https://github.com/kikito/semver.lua.git:master","version":"a4b708ba243208d46e575da870af969dca46a94d"}
-{"name":"gha-alpine-digest","key":"docker.io/library/alpine:3.22.0","version":"sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715"}
+{"name":"gha-alpine-digest","key":"docker.io/library/alpine:3.22.1","version":"sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1"}
 {"name":"gha-alpine-tag-base","key":"docker.io/library/alpine","version":"3"}
-{"name":"gha-alpine-tag-comment","key":"docker.io/library/alpine","version":"3.22.0"}
-{"name":"gha-cosign-version","key":"https://github.com/sigstore/cosign.git","version":"v2.5.2"}
-{"name":"gha-golang-matrix","key":"golang-matrix","version":"[\"1.23\", 
\"1.24\"]"}
-{"name":"gha-golang-release","key":"golang-latest","version":"1.24"}
-{"name":"gha-syft-version","key":"docker.io/anchore/syft","version":"v1.27.1"}
-{"name":"gha-uses-commit","key":"https://github.com/actions/checkout.git:v4.2.2","version":"11bd71901bbe5b1630ceea73d27597364c9af683"}
+{"name":"gha-alpine-tag-comment","key":"docker.io/library/alpine","version":"3.22.1"}
+{"name":"gha-cosign-version","key":"https://github.com/sigstore/cosign.git","version":"v2.5.3"}
+{"name":"gha-golang-matrix","key":"golang-matrix","version":"[\"1.24\", 
\"1.25\"]"}
+{"name":"gha-golang-release","key":"golang-latest","version":"1.25"}
+{"name":"gha-syft-version","key":"docker.io/anchore/syft","version":"v1.31.0"}
+{"name":"gha-uses-commit","key":"https://github.com/actions/checkout.git:v5.0.0","version":"08c6903cd8c0fde910a37f88322edcfb5dd907a8"}
 
{"name":"gha-uses-commit","key":"https://github.com/actions/setup-go.git:v5.5.0","version":"d35c59abb061a4a6fb18e82ac0862c26744d6ab5"}
 
{"name":"gha-uses-commit","key":"https://github.com/actions/stale.git:v9.1.0","version":"5bef64f19d7facfb25b37b414482c7164d639639"}
 
{"name":"gha-uses-commit","key":"https://github.com/actions/upload-artifact.git:v4.6.2","version":"ea165f8d65b6e75b540449e92b4886f43607fa02"}
-{"name":"gha-uses-commit","key":"https://github.com/anchore/sbom-action.git:v0.20.1","version":"9246b90769f852b3a8921f330c59e0b3f439d6e9"}
+{"name":"gha-uses-commit","key":"https://github.com/anchore/sbom-action.git:v0.20.5","version":"da167eac915b4e86f08b264dbdbc867b61be6f0c"}
 
{"name":"gha-uses-commit","key":"https://github.com/docker/build-push-action.git:v6.18.0","version":"263435318d21b8e681c14492fe198d362a7d2c83"}
-{"name":"gha-uses-commit","key":"https://github.com/docker/login-action.git:v3.4.0","version":"74a5d142397b4f367a81961eba4e8cd7edddf772"}
+{"name":"gha-uses-commit","key":"https://github.com/docker/login-action.git:v3.5.0","version":"184bdaa0721073962dff0199f1fb9940f07167d1"}
 
{"name":"gha-uses-commit","key":"https://github.com/docker/setup-buildx-action.git:v3.11.1","version":"e468171a9de216ec08956ac3ada2f0791b6bd435"}
-{"name":"gha-uses-commit","key":"https://github.com/regclient/actions.git:main","version":"0a960cee89b1ef446f3d33b58064083fdd7728cb"}
-{"name":"gha-uses-commit","key":"https://github.com/sigstore/cosign-installer.git:v3.9.1","version":"398d4b0eeef1380460a10c8013a76f728fb906ac"}
+{"name":"gha-uses-commit","key":"https://github.com/regclient/actions.git:main","version":"03ca0eeb8348921b9447b7d5d6b6d350550ddb3b"}
+{"name":"gha-uses-commit","key":"https://github.com/sigstore/cosign-installer.git:v3.9.2","version":"d58896d6a1865668819e1d91763c7751a165e159"}
 
{"name":"gha-uses-commit","key":"https://github.com/softprops/action-gh-release.git:v2.3.2","version":"72f2c25fcb47643c292f7107632f7a47c1df5cd8"}
-{"name":"gha-uses-semver","key":"https://github.com/actions/checkout.git","version":"v4.2.2"}
+{"name":"gha-uses-semver","key":"https://github.com/actions/checkout.git","version":"v5.0.0"}
 
{"name":"gha-uses-semver","key":"https://github.com/actions/setup-go.git","version":"v5.5.0"}
 
{"name":"gha-uses-semver","key":"https://github.com/actions/stale.git","version":"v9.1.0"}
 
{"name":"gha-uses-semver","key":"https://github.com/actions/upload-artifact.git","version":"v4.6.2"}
-{"name":"gha-uses-semver","key":"https://github.com/anchore/sbom-action.git","version":"v0.20.1"}
+{"name":"gha-uses-semver","key":"https://github.com/anchore/sbom-action.git","version":"v0.20.5"}
 
{"name":"gha-uses-semver","key":"https://github.com/docker/build-push-action.git","version":"v6.18.0"}
-{"name":"gha-uses-semver","key":"https://github.com/docker/login-action.git","version":"v3.4.0"}
+{"name":"gha-uses-semver","key":"https://github.com/docker/login-action.git","version":"v3.5.0"}
 
{"name":"gha-uses-semver","key":"https://github.com/docker/setup-buildx-action.git","version":"v3.11.1"}
-{"name":"gha-uses-semver","key":"https://github.com/sigstore/cosign-installer.git","version":"v3.9.1"}
+{"name":"gha-uses-semver","key":"https://github.com/sigstore/cosign-installer.git","version":"v3.9.2"}
 
{"name":"gha-uses-semver","key":"https://github.com/softprops/action-gh-release.git","version":"v2.3.2"}
-{"name":"go-mod-golang-release","key":"golang-oldest","version":"1.23.0"}
+{"name":"go-mod-golang-release","key":"golang-oldest","version":"1.24.0"}
 
{"name":"makefile-ci-distribution","key":"docker.io/library/registry","version":"3.0.0"}
-{"name":"makefile-ci-zot","key":"ghcr.io/project-zot/zot-linux-amd64","version":"v2.1.5"}
+{"name":"makefile-ci-zot","key":"ghcr.io/project-zot/zot-linux-amd64","version":"v2.1.7"}
 
{"name":"makefile-go-vulncheck","key":"https://go.googlesource.com/vuln.git","version":"v1.1.4"}
 
{"name":"makefile-gomajor","key":"https://github.com/icholy/gomajor.git","version":"v0.14.0"}
-{"name":"makefile-gosec","key":"https://github.com/securego/gosec.git","version":"v2.22.5"}
+{"name":"makefile-gosec","key":"https://github.com/securego/gosec.git","version":"v2.22.8"}
 
{"name":"makefile-markdown-lint","key":"docker.io/davidanson/markdownlint-cli2","version":"v0.18.1"}
-{"name":"makefile-osv-scanner","key":"https://github.com/google/osv-scanner.git","version":"v2.0.3"}
+{"name":"makefile-osv-scanner","key":"https://github.com/google/osv-scanner.git","version":"v2.2.1"}
 
{"name":"makefile-staticcheck","key":"https://github.com/dominikh/go-tools.git","version":"v0.6.1"}
-{"name":"makefile-syft-container-digest","key":"anchore/syft:v1.27.1","version":"sha256:844ed6a928ef9396fac26d1de374e71dcaf80df14f05841670ed41619c5a718f"}
-{"name":"makefile-syft-container-tag","key":"anchore/syft","version":"v1.27.1"}
-{"name":"makefile-syft-version","key":"docker.io/anchore/syft","version":"v1.27.1"}
-{"name":"osv-golang-release","key":"docker.io/library/golang","version":"1.24.4"}
-{"name":"shell-alpine-digest","key":"docker.io/library/alpine:3.22.0","version":"sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715"}
+{"name":"makefile-syft-container-digest","key":"anchore/syft:v1.31.0","version":"sha256:c15fa8af4c25edd72c0daf026d095fe51adbcfc7ad5d79a66e93d88f249e5abb"}
+{"name":"makefile-syft-container-tag","key":"anchore/syft","version":"v1.31.0"}
+{"name":"makefile-syft-version","key":"docker.io/anchore/syft","version":"v1.31.0"}
+{"name":"osv-golang-release","key":"docker.io/library/golang","version":"1.25.0"}
+{"name":"shell-alpine-digest","key":"docker.io/library/alpine:3.22.1","version":"sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1"}
 {"name":"shell-alpine-tag-base","key":"docker.io/library/alpine","version":"3"}
-{"name":"shell-alpine-tag-comment","key":"docker.io/library/alpine","version":"3.22.0"}
+{"name":"shell-alpine-tag-comment","key":"docker.io/library/alpine","version":"3.22.1"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/Makefile new/regclient-0.9.1/Makefile
--- old/regclient-0.9.0/Makefile        2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/Makefile        2025-08-24 21:20:38.000000000 +0200
@@ -35,13 +35,13 @@
 endif
 MARKDOWN_LINT_VER?=v0.18.1
 GOMAJOR_VER?=v0.14.0
-GOSEC_VER?=v2.22.5
+GOSEC_VER?=v2.22.8
 GO_VULNCHECK_VER?=v1.1.4
-OSV_SCANNER_VER?=v2.0.3
+OSV_SCANNER_VER?=v2.2.1
 SYFT?=$(shell command -v syft 2>/dev/null)
 SYFT_CMD_VER:=$(shell [ -x "$(SYFT)" ] && echo "v$$($(SYFT) version | awk 
'/^Version: / {print $$2}')" || echo "0")
-SYFT_VERSION?=v1.27.1
-SYFT_CONTAINER?=anchore/syft:v1.27.1@sha256:844ed6a928ef9396fac26d1de374e71dcaf80df14f05841670ed41619c5a718f
+SYFT_VERSION?=v1.31.0
+SYFT_CONTAINER?=anchore/syft:v1.31.0@sha256:c15fa8af4c25edd72c0daf026d095fe51adbcfc7ad5d79a66e93d88f249e5abb
 ifneq "$(SYFT_CMD_VER)" "$(SYFT_VERSION)"
        SYFT=docker run --rm \
                -v "$(shell pwd)/:$(shell pwd)/" -w "$(shell pwd)" \
@@ -50,7 +50,7 @@
 endif
 STATICCHECK_VER?=v0.6.1
 CI_DISTRIBUTION_VER?=3.0.0
-CI_ZOT_VER?=v2.1.5
+CI_ZOT_VER?=v2.1.7
 
 .PHONY: .FORCE
 .FORCE:
@@ -182,6 +182,13 @@
        $(SYFT) scan -q "file:$@" --source-name "$${command}" -o cyclonedx-json 
>"artifacts/$${command}-$${platform}.cyclonedx.json"; \
        $(SYFT) scan -q "file:$@" --source-name "$${command}" -o spdx-json 
>"artifacts/$${command}-$${platform}.spdx.json"
 
+.PHONY: clean
+clean: ## delete generated content
+       [ ! -d artifacts ] || rm -r artifacts
+       [ ! -d bin ] || rm -r bin
+       [ ! -d output ] || rm -r output
+       [ ! -d vendor ] || rm -r vendor
+
 .PHONY: plugin-user
 plugin-user:
        mkdir -p ${HOME}/.docker/cli-plugins/
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/Dockerfile.regbot 
new/regclient-0.9.1/build/Dockerfile.regbot
--- old/regclient-0.9.0/build/Dockerfile.regbot 2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/build/Dockerfile.regbot 2025-08-24 21:20:38.000000000 
+0200
@@ -1,7 +1,7 @@
 ARG REGISTRY=docker.io
-ARG 
ALPINE_VER=3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
-ARG 
GO_VER=1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a
-ARG ECR_HELPER_VER=96d88b484b17635a8ce06b0605e9ba1b2a0c85f6
+ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
+ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
+ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
 ARG GCR_HELPER_VER=v2.1.30
 ARG LUNAJSON_COMMIT=3d10600874527d71519b33ecbb314eb93ccd1df6
 ARG SEMVER_COMMIT=a4b708ba243208d46e575da870af969dca46a94d
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/Dockerfile.regbot.buildkit 
new/regclient-0.9.1/build/Dockerfile.regbot.buildkit
--- old/regclient-0.9.0/build/Dockerfile.regbot.buildkit        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/build/Dockerfile.regbot.buildkit        2025-08-24 
21:20:38.000000000 +0200
@@ -1,9 +1,9 @@
 # syntax=docker/dockerfile:1
 
 ARG REGISTRY=docker.io
-ARG 
ALPINE_VER=3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
-ARG 
GO_VER=1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a
-ARG ECR_HELPER_VER=96d88b484b17635a8ce06b0605e9ba1b2a0c85f6
+ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
+ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
+ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
 ARG GCR_HELPER_VER=v2.1.30
 ARG LUNAJSON_COMMIT=3d10600874527d71519b33ecbb314eb93ccd1df6
 ARG SEMVER_COMMIT=a4b708ba243208d46e575da870af969dca46a94d
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/Dockerfile.regctl 
new/regclient-0.9.1/build/Dockerfile.regctl
--- old/regclient-0.9.0/build/Dockerfile.regctl 2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/build/Dockerfile.regctl 2025-08-24 21:20:38.000000000 
+0200
@@ -1,7 +1,7 @@
 ARG REGISTRY=docker.io
-ARG 
ALPINE_VER=3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
-ARG 
GO_VER=1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a
-ARG ECR_HELPER_VER=96d88b484b17635a8ce06b0605e9ba1b2a0c85f6
+ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
+ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
+ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
 ARG GCR_HELPER_VER=v2.1.30
 
 FROM ${REGISTRY}/library/golang:${GO_VER} AS golang
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/Dockerfile.regctl.buildkit 
new/regclient-0.9.1/build/Dockerfile.regctl.buildkit
--- old/regclient-0.9.0/build/Dockerfile.regctl.buildkit        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/build/Dockerfile.regctl.buildkit        2025-08-24 
21:20:38.000000000 +0200
@@ -1,9 +1,9 @@
 # syntax=docker/dockerfile:1
 
 ARG REGISTRY=docker.io
-ARG 
ALPINE_VER=3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
-ARG 
GO_VER=1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a
-ARG ECR_HELPER_VER=96d88b484b17635a8ce06b0605e9ba1b2a0c85f6
+ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
+ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
+ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
 ARG GCR_HELPER_VER=v2.1.30
 
 FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/golang:${GO_VER} AS golang
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/Dockerfile.regsync 
new/regclient-0.9.1/build/Dockerfile.regsync
--- old/regclient-0.9.0/build/Dockerfile.regsync        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/build/Dockerfile.regsync        2025-08-24 
21:20:38.000000000 +0200
@@ -1,7 +1,7 @@
 ARG REGISTRY=docker.io
-ARG 
ALPINE_VER=3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
-ARG 
GO_VER=1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a
-ARG ECR_HELPER_VER=96d88b484b17635a8ce06b0605e9ba1b2a0c85f6
+ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
+ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
+ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
 ARG GCR_HELPER_VER=v2.1.30
 
 FROM ${REGISTRY}/library/golang:${GO_VER} AS golang
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/Dockerfile.regsync.buildkit 
new/regclient-0.9.1/build/Dockerfile.regsync.buildkit
--- old/regclient-0.9.0/build/Dockerfile.regsync.buildkit       2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/build/Dockerfile.regsync.buildkit       2025-08-24 
21:20:38.000000000 +0200
@@ -1,9 +1,9 @@
 # syntax=docker/dockerfile:1
 
 ARG REGISTRY=docker.io
-ARG 
ALPINE_VER=3.22.0@sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715
-ARG 
GO_VER=1.24.4-alpine@sha256:68932fa6d4d4059845c8f40ad7e654e626f3ebd3706eef7846f319293ab5cb7a
-ARG ECR_HELPER_VER=96d88b484b17635a8ce06b0605e9ba1b2a0c85f6
+ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
+ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
+ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
 ARG GCR_HELPER_VER=v2.1.30
 
 FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/golang:${GO_VER} AS golang
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/build/oci-image.sh 
new/regclient-0.9.1/build/oci-image.sh
--- old/regclient-0.9.0/build/oci-image.sh      2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/build/oci-image.sh      2025-08-24 21:20:38.000000000 
+0200
@@ -7,7 +7,7 @@
 release="scratch"
 push_tags=""
 ALPINE_NAME="alpine:3"
-ALPINE_DIGEST="sha256:8a1f59ffb675680d47db6337b49d22281a139e9d709335b492be023728e11715"
 # 3.22.0
+ALPINE_DIGEST="sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1"
 # 3.22.1
 
 # CLI options to override image, platform, base digest, and comma separated 
list of tags to push
 opt_c=0
@@ -82,6 +82,7 @@
 docker buildx build --platform="$platforms" \
   -f "build/Dockerfile.${image}.buildkit" \
   -o "type=oci,oci-artifact=true,dest=output/${image}-${release}.tar" \
+  --provenance version=v1,mode=max \
   --target "release-${release}" \
   --build-arg "SOURCE_DATE_EPOCH=${vcs_sec}" \
   --build-arg "BUILD_DATE=${vcs_date}" \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/go.mod new/regclient-0.9.1/go.mod
--- old/regclient-0.9.0/go.mod  2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/go.mod  2025-08-24 21:20:38.000000000 +0200
@@ -1,6 +1,6 @@
 module github.com/regclient/regclient
 
-go 1.23.0
+go 1.24.0
 
 require (
        github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7
@@ -11,13 +11,13 @@
        github.com/robfig/cron/v3 v3.0.1
        github.com/sirupsen/logrus v1.9.3
        github.com/spf13/cobra v1.9.1
-       github.com/ulikunitz/xz v0.5.12
+       github.com/ulikunitz/xz v0.5.13
        github.com/yuin/gopher-lua v1.1.1
-       golang.org/x/sys v0.33.0
-       golang.org/x/term v0.32.0
+       golang.org/x/sys v0.35.0
+       golang.org/x/term v0.34.0
 )
 
 require (
        github.com/inconshreveable/mousetrap v1.1.0 // indirect
-       github.com/spf13/pflag v1.0.6 // indirect
+       github.com/spf13/pflag v1.0.7 // indirect
 )
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/go.sum new/regclient-0.9.1/go.sum
--- old/regclient-0.9.0/go.sum  2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/go.sum  2025-08-24 21:20:38.000000000 +0200
@@ -23,20 +23,21 @@
 github.com/sirupsen/logrus v1.9.3/go.mod 
h1:naHLuLoDiP4jHNo9R0sCBMtWGeIprob74mVsIT4qYEQ=
 github.com/spf13/cobra v1.9.1 h1:CXSaggrXdbHK9CF+8ywj8Amf7PBRmPCOJugH954Nnlo=
 github.com/spf13/cobra v1.9.1/go.mod 
h1:nDyEzZ8ogv936Cinf6g1RU9MRY64Ir93oCnqb9wxYW0=
-github.com/spf13/pflag v1.0.6 h1:jFzHGLGAlb3ruxLB8MhbI6A8+AQX/2eW4qeyNZXNp2o=
 github.com/spf13/pflag v1.0.6/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
+github.com/spf13/pflag v1.0.7 h1:vN6T9TfwStFPFM5XzjsvmzZkLuaLX+HS+0SeFLRgU6M=
+github.com/spf13/pflag v1.0.7/go.mod 
h1:McXfInJRrz4CZXVZOBLb0bTZqETkiAhM9Iw0y3An2Bg=
 github.com/stretchr/objx v0.1.0/go.mod 
h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME=
 github.com/stretchr/testify v1.7.0 
h1:nwc3DEeHmmLAfoZucVR881uASk0Mfjw8xYJ99tb5CcY=
 github.com/stretchr/testify v1.7.0/go.mod 
h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg=
-github.com/ulikunitz/xz v0.5.12 h1:37Nm15o69RwBkXM0J6A5OlE67RZTfzUxTj8fB3dfcsc=
-github.com/ulikunitz/xz v0.5.12/go.mod 
h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
+github.com/ulikunitz/xz v0.5.13 h1:ar98gWrjf4H1ev05fYP/o29PDZw9DrI3niHtnEqyuXA=
+github.com/ulikunitz/xz v0.5.13/go.mod 
h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
 github.com/yuin/gopher-lua v1.1.1 
h1:kYKnWBjvbNP4XLT3+bPEwAXJx262OhaHDWDVOPjL46M=
 github.com/yuin/gopher-lua v1.1.1/go.mod 
h1:GBR0iDaNXjAgGg9zfCvksxSRnQx76gclCIb7kdAd1Pw=
 golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod 
h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg=
-golang.org/x/sys v0.33.0 h1:q3i8TbbEz+JRD9ywIRlyRAQbM0qF7hu24q3teo2hbuw=
-golang.org/x/sys v0.33.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
-golang.org/x/term v0.32.0 h1:DR4lr0TjUs3epypdhTOkMmuF5CDFJ/8pOnbzMZPQ7bg=
-golang.org/x/term v0.32.0/go.mod 
h1:uZG1FhGx848Sqfsq4/DlJr3xGGsYMu/L5GW4abiaEPQ=
+golang.org/x/sys v0.35.0 h1:vz1N37gP5bs89s7He8XuIYXpyY0+QlsKmzipCbUtyxI=
+golang.org/x/sys v0.35.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k=
+golang.org/x/term v0.34.0 h1:O/2T7POpk0ZZ7MAzMeWFSg6S5IpWd/RXDlM9hgM3DR4=
+golang.org/x/term v0.34.0/go.mod 
h1:5jC53AEywhIVebHgPVeg0mj8OD3VO9OzclacVrqpaAw=
 gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod 
h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0=
 gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod 
h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM=
 gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/internal/auth/auth.go 
new/regclient-0.9.1/internal/auth/auth.go
--- old/regclient-0.9.0/internal/auth/auth.go   2025-06-30 16:25:30.000000000 
+0200
+++ new/regclient-0.9.1/internal/auth/auth.go   2025-08-24 21:20:38.000000000 
+0200
@@ -69,7 +69,7 @@
 type handler interface {
        AddScope(scope string) error
        ProcessChallenge(challenge) error
-       GenerateAuth() (string, error)
+       UpdateRequest(*http.Request) error
 }
 
 // handlerBuild is used to make a new handler for a specific authType and URL
@@ -239,8 +239,8 @@
                        // handle race condition when another request updates 
the challenge
                        // detect that by seeing the current auth header is 
different
                        prevAH := resp.Request.Header.Get("Authorization")
-                       ah, err := a.hs[host][c.authType].GenerateAuth()
-                       if err == nil && prevAH != ah {
+                       err := 
a.hs[host][c.authType].UpdateRequest(resp.Request)
+                       if err == nil && prevAH != 
resp.Request.Header.Get("Authorization") {
                                goodChallenge = true
                        }
                } else {
@@ -263,10 +263,9 @@
                return nil
        }
        var err error
-       var ah string
        for _, at := range a.authTypes {
                if a.hs[host][at] != nil {
-                       ah, err = a.hs[host][at].GenerateAuth()
+                       err = a.hs[host][at].UpdateRequest(req)
                        if err != nil {
                                a.slog.Debug("Failed to generate auth",
                                        slog.String("err", err.Error()),
@@ -274,7 +273,6 @@
                                        slog.String("authtype", at))
                                continue
                        }
-                       req.Header.Set("Authorization", ah)
                        break
                }
        }
@@ -480,14 +478,15 @@
        return errs.ErrNoNewChallenge
 }
 
-// GenerateAuth for BasicHandler generates base64 encoded user/pass for a host
-func (b *basicHandler) GenerateAuth() (string, error) {
+// UpdateRequest for BasicHandler generates base64 encoded user/pass for a host
+func (b *basicHandler) UpdateRequest(req *http.Request) error {
        cred := b.credsFn(b.host)
        if cred.User == "" || cred.Password == "" {
-               return "", fmt.Errorf("no credentials available: %w", 
errs.ErrHTTPUnauthorized)
+               return fmt.Errorf("no credentials available: %w", 
errs.ErrHTTPUnauthorized)
        }
-       auth := base64.StdEncoding.EncodeToString([]byte(cred.User + ":" + 
cred.Password))
-       return fmt.Sprintf("Basic %s", auth), nil
+       req.Header.Set("Authorization", fmt.Sprintf("Basic %s",
+               
base64.StdEncoding.EncodeToString([]byte(cred.User+":"+cred.Password))))
+       return nil
 }
 
 // bearerHandler supports Bearer auth type requests
@@ -498,6 +497,7 @@
        host           string
        credsFn        CredsFn
        scopes         []string
+       tokenURL       *url.URL
        token          bearerToken
        slog           *slog.Logger
 }
@@ -628,31 +628,39 @@
        return nil
 }
 
-// GenerateAuth for BasicHandler generates base64 encoded user/pass for a host
-func (b *bearerHandler) GenerateAuth() (string, error) {
+// UpdateRequest for BearerHandler adds a bearer token to the request.
+func (b *bearerHandler) UpdateRequest(req *http.Request) error {
+       // handle relative realm values
+       if b.tokenURL == nil {
+               u, err := req.URL.Parse(b.realm)
+               if err != nil {
+                       return err
+               }
+               b.tokenURL = u
+       }
        // if unexpired token already exists, return it
        if b.token.Token != "" && !b.isExpired() {
-               return fmt.Sprintf("Bearer %s", b.token.Token), nil
+               req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", 
b.token.Token))
+               return nil
        }
-
        // attempt to post if a refresh token is available or token auth is 
being used
        cred := b.credsFn(b.host)
        if b.token.RefreshToken != "" || cred.Token != "" {
                if err := b.tryPost(cred); err == nil {
-                       return fmt.Sprintf("Bearer %s", b.token.Token), nil
+                       req.Header.Set("Authorization", fmt.Sprintf("Bearer 
%s", b.token.Token))
+                       return nil
                } else if err != errs.ErrHTTPUnauthorized {
-                       return "", fmt.Errorf("failed to request auth token 
(post): %w%.0w", err, errs.ErrHTTPUnauthorized)
+                       return fmt.Errorf("failed to request auth token (post): 
%w%.0w", err, errs.ErrHTTPUnauthorized)
                }
        }
-
        // attempt a get (with basic auth if user/pass available)
        if err := b.tryGet(cred); err == nil {
-               return fmt.Sprintf("Bearer %s", b.token.Token), nil
+               req.Header.Set("Authorization", fmt.Sprintf("Bearer %s", 
b.token.Token))
+               return nil
        } else if err != errs.ErrHTTPUnauthorized {
-               return "", fmt.Errorf("failed to request auth token (get): 
%w%.0w", err, errs.ErrHTTPUnauthorized)
+               return fmt.Errorf("failed to request auth token (get): %w%.0w", 
err, errs.ErrHTTPUnauthorized)
        }
-
-       return "", errs.ErrHTTPUnauthorized
+       return errs.ErrHTTPUnauthorized
 }
 
 // isExpired returns true when token issue date is either 0, token has expired,
@@ -668,7 +676,7 @@
 
 // tryGet requests a new token with a GET request
 func (b *bearerHandler) tryGet(cred Cred) error {
-       req, err := http.NewRequest("GET", b.realm, nil)
+       req, err := http.NewRequest("GET", b.tokenURL.String(), nil)
        if err != nil {
                return err
        }
@@ -723,7 +731,7 @@
                form.Set("password", cred.Password)
        }
 
-       req, err := http.NewRequest("POST", b.realm, 
strings.NewReader(form.Encode()))
+       req, err := http.NewRequest("POST", b.tokenURL.String(), 
strings.NewReader(form.Encode()))
        if err != nil {
                return err
        }
@@ -894,10 +902,11 @@
        return nil
 }
 
-// GenerateAuth for JWTHubHandler adds JWT header
-func (j *jwtHubHandler) GenerateAuth() (string, error) {
+// UpdateRequest for JWTHubHandler adds JWT header
+func (j *jwtHubHandler) UpdateRequest(req *http.Request) error {
        if len(j.jwt) > 0 {
-               return fmt.Sprintf("JWT %s", j.jwt), nil
+               req.Header.Set("Authorization", fmt.Sprintf("JWT %s", j.jwt))
+               return nil
        }
-       return "", errs.ErrHTTPUnauthorized
+       return errs.ErrHTTPUnauthorized
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/internal/auth/auth_test.go 
new/regclient-0.9.1/internal/auth/auth_test.go
--- old/regclient-0.9.0/internal/auth/auth_test.go      2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/internal/auth/auth_test.go      2025-08-24 
21:20:38.000000000 +0200
@@ -286,7 +286,7 @@
                        wantAuthHeader: "Bearer token1",
                },
                {
-                       name: "bearer2",
+                       name: "bearer2 relative path",
                        auth: NewAuth(
                                WithClientID(clientID),
                                WithCreds(credsFn),
@@ -298,7 +298,7 @@
                                StatusCode: http.StatusUnauthorized,
                                Header: http.Header{
                                        
http.CanonicalHeaderKey("WWW-Authenticate"): []string{
-                                               `Bearer realm="` + 
tsURL.String() + `/token2",service="` + tsHost + 
`",scope="repository:reponame:pull"`,
+                                               `Bearer realm="` + 
`/token2",service="` + tsHost + `",scope="repository:reponame:pull"`,
                                        },
                                },
                        },
@@ -524,9 +524,13 @@
                func(h string) Cred { return Cred{User: user, Password: pass} },
                slog.New(slog.NewTextHandler(io.Discard, 
&slog.HandlerOptions{})),
        ).(*bearerHandler)
+       req, err := http.NewRequest("GET", tsURL.String(), nil)
+       if err != nil {
+               t.Fatalf("failed to setup request: %v", err)
+       }
 
        // handle token1, verify expired token gets current time and isn't 
expired
-       err := bearer.AddScope("repository:reponame:pull")
+       err = bearer.AddScope("repository:reponame:pull")
        if err != nil {
                t.Errorf("failed adding scope: %v", err)
        }
@@ -541,10 +545,11 @@
        if err != nil {
                t.Errorf("failed on response to token1: %v", err)
        }
-       resp1, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response1: %v", err)
        }
+       resp1 := req.Header.Get("Authorization")
        if resp1 != "Bearer token1" {
                t.Errorf("token1 is invalid, expected %s, received %s", "Bearer 
token1", resp1)
        }
@@ -557,10 +562,11 @@
        if err != nil && !errors.Is(err, errs.ErrNoNewChallenge) {
                t.Errorf("failed adding scope: %v", err)
        }
-       resp1a, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response1 (rerun): %v", err)
        }
+       resp1a := req.Header.Get("Authorization")
        if resp1a != "Bearer token1" {
                t.Errorf("token1 (rerun) is invalid, expected %s, received %s", 
"Bearer token1", resp1a)
        }
@@ -578,10 +584,11 @@
        if err != nil {
                t.Errorf("failed reprocess challenge on expired token: %v", err)
        }
-       resp1b, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response1 (expired): %v", err)
        }
+       resp1b := req.Header.Get("Authorization")
        if resp1b != "Bearer token1" {
                t.Errorf("token1 (expired) is invalid, expected %s, received 
%s", "Bearer token1", resp1b)
        }
@@ -594,10 +601,11 @@
        if err != nil {
                t.Errorf("failed adding scope: %v", err)
        }
-       resp2, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response2 (push): %v", err)
        }
+       resp2 := req.Header.Get("Authorization")
        if resp2 != "Bearer token2" {
                t.Errorf("token2 (push) is invalid, expected %s, received %s", 
"Bearer token2", resp2)
        }
@@ -616,10 +624,11 @@
        if err != nil {
                t.Errorf("failed adding scope: %v", err)
        }
-       resp3, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response3 (delete): %v", err)
        }
+       resp3 := req.Header.Get("Authorization")
        if resp3 != "Bearer token3" {
                t.Errorf("token3 (delete) is invalid, expected %s, received 
%s", "Bearer token3", resp3)
        }
@@ -638,10 +647,11 @@
        if err != nil {
                t.Errorf("failed adding scope: %v", err)
        }
-       resp4, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response4 (custom): %v", err)
        }
+       resp4 := req.Header.Get("Authorization")
        if resp4 != "Bearer token4" {
                t.Errorf("token4 (custom) is invalid, expected %s, received 
%s", "Bearer token4", resp4)
        }
@@ -660,10 +670,11 @@
        if err != nil {
                t.Errorf("failed adding scope: %v", err)
        }
-       resp5, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response5 (push,pull): %v", 
err)
        }
+       resp5 := req.Header.Get("Authorization")
        if resp5 != "Bearer token5" {
                t.Errorf("token5 (push,pull) is invalid, expected %s, received 
%s", "Bearer token5", resp5)
        }
@@ -682,10 +693,11 @@
        if !errors.Is(err, errs.ErrNoNewChallenge) {
                t.Errorf("unexpected error when adding scope: expected err: %v, 
received: %v", errs.ErrNoNewChallenge, err)
        }
-       resp5a, err := bearer.GenerateAuth()
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response5 (rerun): %v", err)
        }
+       resp5a := req.Header.Get("Authorization")
        if resp5a != "Bearer token5" {
                t.Errorf("token5 (rerun) is invalid, expected %s, received %s", 
"Bearer token5", resp5a)
        }
@@ -753,12 +765,17 @@
        if err != nil {
                t.Errorf("failed on response to token: %v", err)
        }
-       resp, err := bearer.GenerateAuth()
+       req, err := http.NewRequest("GET", "http://localhost:5000";, nil)
+       if err != nil {
+               t.Fatalf("failed to generate new request: %v", err)
+       }
+       err = bearer.UpdateRequest(req)
        if err != nil {
                t.Errorf("failed to generate auth response: %v", err)
        }
-       bearerResp := fmt.Sprintf("Bearer %s", token)
-       if resp != bearerResp {
+       resp := req.Header.Get("Authorization")
+       want := fmt.Sprintf("Bearer %s", token)
+       if resp != want {
                t.Errorf("token1 is invalid, expected %s, received %s", "Bearer 
token1", resp)
        }
        if bearer.isExpired() {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/internal/reghttp/http.go 
new/regclient-0.9.1/internal/reghttp/http.go
--- old/regclient-0.9.0/internal/reghttp/http.go        2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/internal/reghttp/http.go        2025-08-24 
21:20:38.000000000 +0200
@@ -324,9 +324,14 @@
                                if h.config.TLS == config.TLSDisabled {
                                        u.Scheme = "http"
                                }
+                               query := url.Values{}
                                if req.Query != nil {
-                                       u.RawQuery = req.Query.Encode()
+                                       query = req.Query
                                }
+                               if h.config.Hostname != reqHost.config.Hostname 
{
+                                       query.Set("ns", reqHost.config.Hostname)
+                               }
+                               u.RawQuery = query.Encode()
                        }
                        // close previous response
                        if resp.resp != nil && resp.resp.Body != nil {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/internal/reghttp/http_test.go 
new/regclient-0.9.1/internal/reghttp/http_test.go
--- old/regclient-0.9.0/internal/reghttp/http_test.go   2025-06-30 
16:25:30.000000000 +0200
+++ new/regclient-0.9.1/internal/reghttp/http_test.go   2025-08-24 
21:20:38.000000000 +0200
@@ -719,6 +719,27 @@
        tsURL, _ := url.Parse(ts.URL)
        tsHost := tsURL.Host
 
+       // create a second server to validate ns query set to upstream hostname 
(different hostnames)
+       rrs2 := []reqresp.ReqResp{
+               {
+                       ReqEntry: reqresp.ReqEntry{
+                               Method: "GET",
+                               Path:   
"/v2/ns-check/project-ns/manifests/tag-get",
+                               Query: map[string][]string{
+                                       "ns": {tsHost},
+                               },
+                       },
+                       RespEntry: reqresp.RespEntry{
+                               Status: http.StatusOK,
+                               Body:   getBody,
+                       },
+               },
+       }
+       ts2 := httptest.NewServer(reqresp.NewHandler(t, rrs2))
+       defer ts2.Close()
+       ts2URL, _ := url.Parse(ts2.URL)
+       ts2Host := ts2URL.Host
+
        // create config for various hosts, different host pointing to same dns 
hostname
        configHosts := map[string]*config.Host{
                tsHost: {
@@ -892,6 +913,22 @@
                        TLS:       config.TLSDisabled,
                        ReqPerSec: reqPerSec,
                },
+               "expectns." + ts2Host: {
+                       Name:       "expectns." + ts2Host,
+                       Hostname:   ts2Host,
+                       TLS:        config.TLSDisabled,
+                       PathPrefix: "ns-check",
+                       Priority:   1,
+               },
+               "mirror-ns." + tsHost: {
+                       Name:     "mirror-ns." + tsHost,
+                       Hostname: tsHost,
+                       TLS:      config.TLSDisabled,
+                       Priority: 5,
+                       Mirrors: []string{
+                               "expectns." + ts2Host,
+                       },
+               },
        }
 
        // create APIs for requests to run
@@ -1695,5 +1732,27 @@
                        t.Errorf("requests finished faster than expected time, 
expected %s, received %s", expectMin.String(), dur.String())
                }
        })
+       // validate ns set to upstream hostname when mirror hostname differs
+       t.Run("Mirror ns hostname differs", func(t *testing.T) {
+               getReq := &Req{
+                       Host:       "mirror-ns." + tsHost,
+                       Method:     "GET",
+                       Repository: "project-ns",
+                       Path:       "manifests/tag-get",
+                       Headers:    headers,
+               }
+               resp, err := hc.Do(ctx, getReq)
+               if err != nil {
+                       t.Fatalf("failed to run get: %v", err)
+               }
+               if resp.HTTPResponse().StatusCode != 200 {
+                       t.Errorf("invalid status code, expected 200, received 
%d", resp.HTTPResponse().StatusCode)
+               }
+               err = resp.Close()
+               if err != nil {
+                       t.Errorf("error closing request: %v", err)
+               }
+       })
+
        // TODO: test various TLS configs (custom root for all hosts, custom 
root for one host, insecure)
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.0/release.md 
new/regclient-0.9.1/release.md
--- old/regclient-0.9.0/release.md      2025-06-30 16:25:30.000000000 +0200
+++ new/regclient-0.9.1/release.md      2025-08-24 21:20:38.000000000 +0200
@@ -1,33 +1,21 @@
-# Release v0.9.0
-
-Breaking:
-
-- Drop support for 3rd Go release because of upstream forced upgrades (see 
<https://github.com/golang/go/issues/69095>). ([PR 948][pr-948])
+# Release v0.9.1
 
 Features:
 
-- Add a script to reproduce regclient images. ([PR 940][pr-940])
-- Support IPv6 hosts. ([PR 956][pr-956])
-
-Fixes:
-
-- Convert  docker attestations built with `oci-artifact=true`. ([PR 
949][pr-949])
-- Allow duplicate keys in yaml config. ([PR 952][pr-952])
+- Allow relative urls in bearer auth. ([PR 963][pr-963])
+- Add "ns" query param to registry mirror requests. ([PR 976][pr-976])
 
 Miscellaneous:
 
-- Migrate yaml library. ([PR 947][pr-947])
-- Convert the build to use OCI style attestations. ([PR 950][pr-950])
+- Update to SLSA v1 provenance. ([PR 968][pr-968])
+- Add a "make clean" command. ([PR 969][pr-969])
 
 Contributors:
 
-- @JimmyMa
 - @sudo-bmitch
+- @wjordan
 
-[pr-940]: https://github.com/regclient/regclient/pull/940
-[pr-947]: https://github.com/regclient/regclient/pull/947
-[pr-948]: https://github.com/regclient/regclient/pull/948
-[pr-949]: https://github.com/regclient/regclient/pull/949
-[pr-950]: https://github.com/regclient/regclient/pull/950
-[pr-952]: https://github.com/regclient/regclient/pull/952
-[pr-956]: https://github.com/regclient/regclient/pull/956
+[pr-963]: https://github.com/regclient/regclient/pull/963
+[pr-968]: https://github.com/regclient/regclient/pull/968
+[pr-969]: https://github.com/regclient/regclient/pull/969
+[pr-976]: https://github.com/regclient/regclient/pull/976

++++++ regclient.obsinfo ++++++
--- /var/tmp/diff_new_pack.MJXbkq/_old  2025-08-25 20:39:06.418626849 +0200
+++ /var/tmp/diff_new_pack.MJXbkq/_new  2025-08-25 20:39:06.426627185 +0200
@@ -1,5 +1,5 @@
 name: regclient
-version: 0.9.0
-mtime: 1751293530
-commit: ad4e3d926030f76419211838494434974f17db67
+version: 0.9.1
+mtime: 1756063238
+commit: 51df886b5e3b138ac168540ccef5997e0d383c86
 

++++++ vendor.tar.gz ++++++
++++ 2813 lines of diff (skipped)

Reply via email to