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-09-02 17:58:39
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/regclient (Old)
 and      /work/SRC/openSUSE:Factory/.regclient.new.1977 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

Package is "regclient"

Tue Sep  2 17:58:39 2025 rev:9 rq:1302293 version:0.9.2

Changes:
--------
--- /work/SRC/openSUSE:Factory/regclient/regclient.changes      2025-08-25 
20:39:04.790558645 +0200
+++ /work/SRC/openSUSE:Factory/.regclient.new.1977/regclient.changes    
2025-09-02 17:59:02.564315075 +0200
@@ -1,0 +2,11 @@
+Tue Sep 02 05:48:59 UTC 2025 - Johannes Kastl 
<opensuse_buildserv...@ojkastl.de>
+
+- Update to version 0.9.2:
+  * Security:
+    - xz upgrade fixes CVE-2025-58058 (PR 989)
+  * Miscellaneous:
+    - Fix CLI lint errors. (PR 983)
+    - Cleanup version output. (PR 985)
+    - Dockerfile cleanup. (PR 986)
+
+-------------------------------------------------------------------

Old:
----
  regclient-0.9.1.obscpio

New:
----
  regclient-0.9.2.obscpio

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

Other differences:
------------------
++++++ regclient.spec ++++++
--- /var/tmp/diff_new_pack.MpPOab/_old  2025-09-02 17:59:03.348348069 +0200
+++ /var/tmp/diff_new_pack.MpPOab/_new  2025-09-02 17:59:03.352348238 +0200
@@ -17,7 +17,7 @@
 
 
 Name:           regclient
-Version:        0.9.1
+Version:        0.9.2
 Release:        0
 Summary:        OCI Registry Client in Go and tooling using those libraries
 License:        Apache-2.0

++++++ _service ++++++
--- /var/tmp/diff_new_pack.MpPOab/_old  2025-09-02 17:59:03.384349584 +0200
+++ /var/tmp/diff_new_pack.MpPOab/_new  2025-09-02 17:59:03.388349752 +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.1</param>
+    <param name="revision">v0.9.2</param>
     <param name="versionformat">@PARENT_TAG@</param>
     <param name="versionrewrite-pattern">v(.*)</param>
     <param name="changesgenerate">enable</param>

++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.MpPOab/_old  2025-09-02 17:59:03.404350426 +0200
+++ /var/tmp/diff_new_pack.MpPOab/_new  2025-09-02 17:59:03.408350594 +0200
@@ -1,6 +1,6 @@
 <servicedata>
 <service name="tar_scm">
                 <param 
name="url">https://github.com/regclient/regclient</param>
-              <param 
name="changesrevision">51df886b5e3b138ac168540ccef5997e0d383c86</param></service></servicedata>
+              <param 
name="changesrevision">9bf4b30da1110d0bc82ba2f9268e8c099172dd75</param></service></servicedata>
 (No newline at EOF)
 

++++++ regclient-0.9.1.obscpio -> regclient-0.9.2.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/HEAD 
new/regclient-0.9.2/.git/HEAD
--- old/regclient-0.9.1/.git/HEAD       2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.git/HEAD       2025-08-29 15:49:46.000000000 +0200
@@ -1 +1 @@
-51df886b5e3b138ac168540ccef5997e0d383c86
+9bf4b30da1110d0bc82ba2f9268e8c099172dd75
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/ORIG_HEAD 
new/regclient-0.9.2/.git/ORIG_HEAD
--- old/regclient-0.9.1/.git/ORIG_HEAD  2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.git/ORIG_HEAD  2025-08-29 15:49:46.000000000 +0200
@@ -1 +1 @@
-51df886b5e3b138ac168540ccef5997e0d383c86
+9bf4b30da1110d0bc82ba2f9268e8c099172dd75
Binary files old/regclient-0.9.1/.git/index and new/regclient-0.9.2/.git/index 
differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/logs/HEAD 
new/regclient-0.9.2/.git/logs/HEAD
--- old/regclient-0.9.1/.git/logs/HEAD  2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.git/logs/HEAD  2025-08-29 15:49:46.000000000 +0200
@@ -1,2 +1,2 @@
-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
+0000000000000000000000000000000000000000 
339035e49ded3657d648a023213d0076000a99dd Johannes Kastl 
<ojka...@baghira.oberhinkofen.ojkastl.de> 1756792138 +0200    clone: from 
https://github.com/regclient/regclient
+339035e49ded3657d648a023213d0076000a99dd 
9bf4b30da1110d0bc82ba2f9268e8c099172dd75 Johannes Kastl 
<ojka...@baghira.oberhinkofen.ojkastl.de> 1756792138 +0200    checkout: moving 
from main to v0.9.2
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/logs/refs/heads/main 
new/regclient-0.9.2/.git/logs/refs/heads/main
--- old/regclient-0.9.1/.git/logs/refs/heads/main       2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.git/logs/refs/heads/main       2025-08-29 
15:49:46.000000000 +0200
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
9c9bcc2f705c704826a86a25ab23822de10c0b9f kastl <kastl@tumbleweed-pkg.baten> 
1756097393 +0200  clone: from https://github.com/regclient/regclient
+0000000000000000000000000000000000000000 
339035e49ded3657d648a023213d0076000a99dd Johannes Kastl 
<ojka...@baghira.oberhinkofen.ojkastl.de> 1756792138 +0200    clone: from 
https://github.com/regclient/regclient
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/logs/refs/remotes/origin/HEAD 
new/regclient-0.9.2/.git/logs/refs/remotes/origin/HEAD
--- old/regclient-0.9.1/.git/logs/refs/remotes/origin/HEAD      2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.git/logs/refs/remotes/origin/HEAD      2025-08-29 
15:49:46.000000000 +0200
@@ -1 +1 @@
-0000000000000000000000000000000000000000 
9c9bcc2f705c704826a86a25ab23822de10c0b9f kastl <kastl@tumbleweed-pkg.baten> 
1756097393 +0200  clone: from https://github.com/regclient/regclient
+0000000000000000000000000000000000000000 
339035e49ded3657d648a023213d0076000a99dd Johannes Kastl 
<ojka...@baghira.oberhinkofen.ojkastl.de> 1756792138 +0200    clone: from 
https://github.com/regclient/regclient
Binary files 
old/regclient-0.9.1/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.idx
 and 
new/regclient-0.9.2/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.idx
 differ
Binary files 
old/regclient-0.9.1/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.pack
 and 
new/regclient-0.9.2/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.pack
 differ
Binary files 
old/regclient-0.9.1/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.rev
 and 
new/regclient-0.9.2/.git/objects/pack/pack-9c8884d5d964272483aebd976510c53f55d58d42.rev
 differ
Binary files 
old/regclient-0.9.1/.git/objects/pack/pack-f35cdd29ceb72713582d86510aa772b17b76061a.idx
 and 
new/regclient-0.9.2/.git/objects/pack/pack-f35cdd29ceb72713582d86510aa772b17b76061a.idx
 differ
Binary files 
old/regclient-0.9.1/.git/objects/pack/pack-f35cdd29ceb72713582d86510aa772b17b76061a.pack
 and 
new/regclient-0.9.2/.git/objects/pack/pack-f35cdd29ceb72713582d86510aa772b17b76061a.pack
 differ
Binary files 
old/regclient-0.9.1/.git/objects/pack/pack-f35cdd29ceb72713582d86510aa772b17b76061a.rev
 and 
new/regclient-0.9.2/.git/objects/pack/pack-f35cdd29ceb72713582d86510aa772b17b76061a.rev
 differ
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/packed-refs 
new/regclient-0.9.2/.git/packed-refs
--- old/regclient-0.9.1/.git/packed-refs        2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/.git/packed-refs        2025-08-29 15:49:46.000000000 
+0200
@@ -1,5 +1,5 @@
 # pack-refs with: peeled fully-peeled sorted 
-9c9bcc2f705c704826a86a25ab23822de10c0b9f refs/remotes/origin/main
+339035e49ded3657d648a023213d0076000a99dd 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
-51df886b5e3b138ac168540ccef5997e0d383c86 refs/remotes/origin/releases/0.9
+9bf4b30da1110d0bc82ba2f9268e8c099172dd75 refs/remotes/origin/releases/0.9
 54d924682eb6425847db8dd4acdfcd2beea4c83a refs/tags/v0.0.1
 ^f4dd0b8c5836798787b73dbec754be1d8a93695f
 4fc2fa04faba545e279745f2afd8faad7ca7d296 refs/tags/v0.0.2
@@ -103,3 +103,5 @@
 ^ad4e3d926030f76419211838494434974f17db67
 f0fc5276b3f9824a7dbe90f2f19c6b793327a2ab refs/tags/v0.9.1
 ^51df886b5e3b138ac168540ccef5997e0d383c86
+f2f52f74601fa8f460abe24aaa63447cf08b2a7b refs/tags/v0.9.2
+^9bf4b30da1110d0bc82ba2f9268e8c099172dd75
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.git/refs/heads/main 
new/regclient-0.9.2/.git/refs/heads/main
--- old/regclient-0.9.1/.git/refs/heads/main    2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/.git/refs/heads/main    2025-08-29 15:49:46.000000000 
+0200
@@ -1 +1 @@
-9c9bcc2f705c704826a86a25ab23822de10c0b9f
+339035e49ded3657d648a023213d0076000a99dd
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.github/workflows/docker.yml 
new/regclient-0.9.2/.github/workflows/docker.yml
--- old/regclient-0.9.1/.github/workflows/docker.yml    2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.github/workflows/docker.yml    2025-08-29 
15:49:46.000000000 +0200
@@ -129,7 +129,7 @@
       uses: 
anchore/sbom-action/download-syft@da167eac915b4e86f08b264dbdbc867b61be6f0c # 
v0.20.5
       id: syft
       with:
-        syft-version: "v1.31.0"
+        syft-version: "v1.32.0"
     
     # Dogfooding, use regctl to modify regclient images to improve 
reproducibility
     - name: Install regctl
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.github/workflows/go.yml 
new/regclient-0.9.2/.github/workflows/go.yml
--- old/regclient-0.9.1/.github/workflows/go.yml        2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/.github/workflows/go.yml        2025-08-29 
15:49:46.000000000 +0200
@@ -63,7 +63,7 @@
       uses: 
anchore/sbom-action/download-syft@da167eac915b4e86f08b264dbdbc867b61be6f0c # 
v0.20.5
       id: syft
       with:
-        syft-version: "v1.31.0"
+        syft-version: "v1.32.0"
 
     - name: Build artifacts
       if: startsWith( github.ref, 'refs/tags/v' ) || github.ref == 
'refs/heads/main'
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.version-bump.lock 
new/regclient-0.9.2/.version-bump.lock
--- old/regclient-0.9.1/.version-bump.lock      2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/.version-bump.lock      2025-08-29 15:49:46.000000000 
+0200
@@ -1,6 +1,6 @@
 
{"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-ecr","key":"https://github.com/awslabs/amazon-ecr-credential-helper.git","version":"v0.10.1"}
 
{"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.25.0-alpine","version":"sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440"}
 
{"name":"docker-arg-go-tag","key":"docker.io/library/golang","version":"1.25.0"}
@@ -12,7 +12,7 @@
 
{"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-syft-version","key":"docker.io/anchore/syft","version":"v1.32.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"}
@@ -38,14 +38,14 @@
 
{"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.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-gomajor","key":"https://github.com/icholy/gomajor.git","version":"v0.15.0"}
 
{"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.2.1"}
+{"name":"makefile-osv-scanner","key":"https://github.com/google/osv-scanner.git","version":"v2.2.2"}
 
{"name":"makefile-staticcheck","key":"https://github.com/dominikh/go-tools.git","version":"v0.6.1"}
-{"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":"makefile-syft-container-digest","key":"anchore/syft:v1.32.0","version":"sha256:b6a6da626d98f5cb92e28934176709003cce6cdcf674816959c7d84845d94045"}
+{"name":"makefile-syft-container-tag","key":"anchore/syft","version":"v1.32.0"}
+{"name":"makefile-syft-version","key":"docker.io/anchore/syft","version":"v1.32.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"}
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/.version-bump.yml 
new/regclient-0.9.2/.version-bump.yml
--- old/regclient-0.9.1/.version-bump.yml       2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/.version-bump.yml       2025-08-29 15:49:46.000000000 
+0200
@@ -100,12 +100,11 @@
     sourceArgs:
       image: "docker.io/library/golang:{{.ScanMatch.Tag}}"
   docker-arg-ecr:
-    <<: *git-commit
+    <<: *git-tag-semver
     scanArgs:
-      regexp: '^ARG ECR_HELPER_VER=(?P<Version>[0-9a-f]+)\s*$'
+      regexp: '^ARG ECR_HELPER_VER=(?P<Version>v?\d+\.\d+\.\d+)\s*$'
     sourceArgs:
       url: "https://github.com/awslabs/amazon-ecr-credential-helper.git";
-      ref: main
   docker-arg-gcr:
     <<: *git-tag-semver
     scanArgs:
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/Makefile new/regclient-0.9.2/Makefile
--- old/regclient-0.9.1/Makefile        2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/Makefile        2025-08-29 15:49:46.000000000 +0200
@@ -19,10 +19,12 @@
   fi; \
   echo "$${vcs_version}" | sed -r 's#/+#-#g')
 VCS_TAG?=$(shell git describe --tags --abbrev=0 2>/dev/null || true)
+VCS_SEC?=$(shell git log -1 --format=%ct)
+VCS_DATE?=$(shell date -d "@$(VCS_SEC)" +%Y-%m-%dT%H:%M:%SZ --utc)
 LD_FLAGS?=-s -w -extldflags -static -buildid= -X 
\"github.com/regclient/regclient/internal/version.vcsTag=$(VCS_TAG)\"
 GO_BUILD_FLAGS?=-trimpath -ldflags "$(LD_FLAGS)"
 DOCKERFILE_EXT?=$(shell if docker build --help 2>/dev/null | grep -q -- 
'--progress'; then echo ".buildkit"; fi)
-DOCKER_ARGS?=--build-arg "VCS_REF=$(VCS_REF)" --build-arg 
"VCS_VERSION=$(VCS_VERSION)"
+DOCKER_ARGS?=--build-arg "VCS_REF=$(VCS_REF)" --build-arg 
"VCS_VERSION=$(VCS_VERSION)" --build-arg "SOURCE_DATE_EPOCH=$(VCS_SEC)"  
--build-arg "BUILD_DATE=$(VCS_DATE)"
 GOPATH?=$(shell go env GOPATH)
 PWD:=$(shell pwd)
 VER_BUMP?=$(shell command -v version-bump 2>/dev/null)
@@ -34,14 +36,14 @@
                $(VER_BUMP_CONTAINER)
 endif
 MARKDOWN_LINT_VER?=v0.18.1
-GOMAJOR_VER?=v0.14.0
+GOMAJOR_VER?=v0.15.0
 GOSEC_VER?=v2.22.8
 GO_VULNCHECK_VER?=v1.1.4
-OSV_SCANNER_VER?=v2.2.1
+OSV_SCANNER_VER?=v2.2.2
 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.31.0
-SYFT_CONTAINER?=anchore/syft:v1.31.0@sha256:c15fa8af4c25edd72c0daf026d095fe51adbcfc7ad5d79a66e93d88f249e5abb
+SYFT_VERSION?=v1.32.0
+SYFT_CONTAINER?=anchore/syft:v1.32.0@sha256:b6a6da626d98f5cb92e28934176709003cce6cdcf674816959c7d84845d94045
 ifneq "$(SYFT_CMD_VER)" "$(SYFT_VERSION)"
        SYFT=docker run --rm \
                -v "$(shell pwd)/:$(shell pwd)/" -w "$(shell pwd)" \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/build/Dockerfile.regbot 
new/regclient-0.9.2/build/Dockerfile.regbot
--- old/regclient-0.9.1/build/Dockerfile.regbot 2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/build/Dockerfile.regbot 2025-08-29 15:49:46.000000000 
+0200
@@ -1,10 +1,11 @@
 ARG REGISTRY=docker.io
 ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
 ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
-ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
+ARG ECR_HELPER_VER=v0.10.1
 ARG GCR_HELPER_VER=v2.1.30
 ARG LUNAJSON_COMMIT=3d10600874527d71519b33ecbb314eb93ccd1df6
 ARG SEMVER_COMMIT=a4b708ba243208d46e575da870af969dca46a94d
+ARG VCS_VERSION=(devel)
 
 FROM ${REGISTRY}/library/golang:${GO_VER} AS golang
 RUN apk add --no-cache \
@@ -77,15 +78,14 @@
 ENV LUA_PATH="?;?.lua;/lua-user/?;/lua-user/?.lua;/lua-mods/?;/lua-mods/?.lua"
 USER appuser
 CMD [ "regbot", "--help" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
@@ -101,15 +101,14 @@
 ENV LUA_PATH="?;?.lua;/lua-user/?;/lua-user/?.lua;/lua-mods/?;/lua-mods/?.lua"
 USER appuser
 ENTRYPOINT [ "/regbot" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/build/Dockerfile.regbot.buildkit 
new/regclient-0.9.2/build/Dockerfile.regbot.buildkit
--- old/regclient-0.9.1/build/Dockerfile.regbot.buildkit        2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/build/Dockerfile.regbot.buildkit        2025-08-29 
15:49:46.000000000 +0200
@@ -3,10 +3,11 @@
 ARG REGISTRY=docker.io
 ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
 ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
-ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
+ARG ECR_HELPER_VER=v0.10.1
 ARG GCR_HELPER_VER=v2.1.30
 ARG LUNAJSON_COMMIT=3d10600874527d71519b33ecbb314eb93ccd1df6
 ARG SEMVER_COMMIT=a4b708ba243208d46e575da870af969dca46a94d
+ARG VCS_VERSION=(devel)
 
 FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/golang:${GO_VER} AS golang
 RUN apk add --no-cache \
@@ -95,15 +96,14 @@
 ENV LUA_PATH="?;?.lua;/lua-user/?;/lua-user/?.lua;/lua-mods/?;/lua-mods/?.lua"
 USER appuser
 CMD [ "regbot", "--help" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
@@ -119,15 +119,14 @@
 ENV LUA_PATH="?;?.lua;/lua-user/?;/lua-user/?.lua;/lua-mods/?;/lua-mods/?.lua"
 USER appuser
 ENTRYPOINT [ "/regbot" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/build/Dockerfile.regctl 
new/regclient-0.9.2/build/Dockerfile.regctl
--- old/regclient-0.9.1/build/Dockerfile.regctl 2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/build/Dockerfile.regctl 2025-08-29 15:49:46.000000000 
+0200
@@ -1,8 +1,9 @@
 ARG REGISTRY=docker.io
 ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
 ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
-ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
+ARG ECR_HELPER_VER=v0.10.1
 ARG GCR_HELPER_VER=v2.1.30
+ARG VCS_VERSION=(devel)
 
 FROM ${REGISTRY}/library/golang:${GO_VER} AS golang
 RUN apk add --no-cache \
@@ -56,15 +57,14 @@
 COPY --from=build /src/bin/regctl /usr/local/bin/regctl
 USER appuser
 CMD [ "regctl", "--help" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
@@ -78,15 +78,14 @@
 COPY --from=build /src/bin/regctl /regctl
 USER appuser
 ENTRYPOINT [ "/regctl" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/build/Dockerfile.regctl.buildkit 
new/regclient-0.9.2/build/Dockerfile.regctl.buildkit
--- old/regclient-0.9.1/build/Dockerfile.regctl.buildkit        2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/build/Dockerfile.regctl.buildkit        2025-08-29 
15:49:46.000000000 +0200
@@ -3,8 +3,9 @@
 ARG REGISTRY=docker.io
 ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
 ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
-ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
+ARG ECR_HELPER_VER=v0.10.1
 ARG GCR_HELPER_VER=v2.1.30
+ARG VCS_VERSION=(devel)
 
 FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/golang:${GO_VER} AS golang
 RUN apk add --no-cache \
@@ -74,15 +75,14 @@
 COPY --from=build /src/bin/regctl /usr/local/bin/regctl
 USER appuser
 CMD [ "regctl", "--help" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
@@ -96,15 +96,14 @@
 COPY --from=build /src/bin/regctl /regctl
 USER appuser
 ENTRYPOINT [ "/regctl" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/build/Dockerfile.regsync 
new/regclient-0.9.2/build/Dockerfile.regsync
--- old/regclient-0.9.1/build/Dockerfile.regsync        2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/build/Dockerfile.regsync        2025-08-29 
15:49:46.000000000 +0200
@@ -1,8 +1,9 @@
 ARG REGISTRY=docker.io
 ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
 ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
-ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
+ARG ECR_HELPER_VER=v0.10.1
 ARG GCR_HELPER_VER=v2.1.30
+ARG VCS_VERSION=(devel)
 
 FROM ${REGISTRY}/library/golang:${GO_VER} AS golang
 RUN apk add --no-cache \
@@ -56,15 +57,14 @@
 COPY --from=build /src/bin/regsync /usr/local/bin/regsync
 USER appuser
 CMD [ "regsync", "--help" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
@@ -78,15 +78,14 @@
 COPY --from=build /src/bin/regsync /regsync
 USER appuser
 ENTRYPOINT [ "/regsync" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/build/Dockerfile.regsync.buildkit 
new/regclient-0.9.2/build/Dockerfile.regsync.buildkit
--- old/regclient-0.9.1/build/Dockerfile.regsync.buildkit       2025-08-24 
21:20:38.000000000 +0200
+++ new/regclient-0.9.2/build/Dockerfile.regsync.buildkit       2025-08-29 
15:49:46.000000000 +0200
@@ -3,8 +3,9 @@
 ARG REGISTRY=docker.io
 ARG 
ALPINE_VER=3.22.1@sha256:4bcff63911fcb4448bd4fdacec207030997caf25e9bea4045fa6c8c44de311d1
 ARG 
GO_VER=1.25.0-alpine@sha256:f18a072054848d87a8077455f0ac8a25886f2397f88bfdd222d6fafbb5bba440
-ARG ECR_HELPER_VER=64b08bad70174a1849fe597f0c59288eb7b7cf91
+ARG ECR_HELPER_VER=v0.10.1
 ARG GCR_HELPER_VER=v2.1.30
+ARG VCS_VERSION=(devel)
 
 FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/golang:${GO_VER} AS golang
 RUN apk add --no-cache \
@@ -74,15 +75,14 @@
 COPY --from=build /src/bin/regsync /usr/local/bin/regsync
 USER appuser
 CMD [ "regsync", "--help" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
@@ -96,15 +96,14 @@
 COPY --from=build /src/bin/regsync /regsync
 USER appuser
 ENTRYPOINT [ "/regsync" ]
-
 ARG BUILD_DATE
 ARG VCS_REF
-ARG VCS_VERSION=(devel)
+ARG VCS_VERSION
 LABEL maintainer="" \
       org.opencontainers.image.created=$BUILD_DATE \
       org.opencontainers.image.authors="regclient contributors" \
       org.opencontainers.image.url="https://github.com/regclient/regclient"; \
-      
org.opencontainers.image.documentation="https://github.com/regclient/regclient"; 
\
+      org.opencontainers.image.documentation="https://regclient.org/"; \
       org.opencontainers.image.source="https://github.com/regclient/regclient"; 
\
       org.opencontainers.image.version=$VCS_VERSION \
       org.opencontainers.image.revision=$VCS_REF \
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/cmd/regbot/root.go 
new/regclient-0.9.2/cmd/regbot/root.go
--- old/regclient-0.9.1/cmd/regbot/root.go      2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/cmd/regbot/root.go      2025-08-29 15:49:46.000000000 
+0200
@@ -71,9 +71,15 @@
        versionCmd := &cobra.Command{
                Use:   "version",
                Short: "Show the version",
-               Long:  `Show the version`,
-               Args:  cobra.RangeArgs(0, 0),
-               RunE:  opts.runVersion,
+               Long:  fmt.Sprintf(`Show the version of %s. Note that docker 
image builds will always be marked "dirty".`, cmd.Name()),
+               Example: fmt.Sprintf(`
+# display full version details
+%[1]s version
+
+# retrieve the version number
+%[1]s version --format '{{.VCSTag}}'`, cmd.Name()),
+               Args: cobra.ExactArgs(0),
+               RunE: opts.runVersion,
        }
 
        cmd.PersistentFlags().StringArrayVar(&opts.logopts, "logopt", 
[]string{}, "Log options")
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/cmd/regctl/image.go 
new/regclient-0.9.2/cmd/regctl/image.go
--- old/regclient-0.9.1/cmd/regctl/image.go     2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/cmd/regctl/image.go     2025-08-29 15:49:46.000000000 
+0200
@@ -107,7 +107,7 @@
 If the base name is not provided, annotations will be checked in the image.
 If the digest is available, this checks if that matches the base name.
 If the digest is not available, layers of each manifest are compared.
-If the layers match, the config (history and roots) are optionally compared.   
+If the layers match, the config (history and roots) are optionally compared.
 If the base image does not match, the command exits with a non-zero status.`,
                Example: `
 # report if base image has changed using annotations
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/cmd/regctl/manifest.go 
new/regclient-0.9.2/cmd/regctl/manifest.go
--- old/regclient-0.9.1/cmd/regctl/manifest.go  2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/cmd/regctl/manifest.go  2025-08-29 15:49:46.000000000 
+0200
@@ -60,7 +60,7 @@
                Aliases: []string{"del", "rm", "remove"},
                Short:   "delete a manifest",
                Long: `Delete a manifest. This will delete the manifest, and 
all tags pointing to that
-manifest. You must specify a digest, not a tag on this command (e.g. 
+manifest. You must specify a digest, not a tag on this command (e.g.
 image_name@sha256:1234abc...). It is up to the registry whether the delete
 API is supported. Additionally, registries may garbage collect the filesystem
 layers (blobs) separately or not at all. See also the "tag delete" command.`,
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/cmd/regctl/root.go 
new/regclient-0.9.2/cmd/regctl/root.go
--- old/regclient-0.9.1/cmd/regctl/root.go      2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/cmd/regctl/root.go      2025-08-29 15:49:46.000000000 
+0200
@@ -107,13 +107,13 @@
        cmd := &cobra.Command{
                Use:   "version",
                Short: "Show the version",
-               Long:  fmt.Sprintf(`Show the version of %s`, 
opts.rootOpts.name),
-               Example: `
+               Long:  fmt.Sprintf(`Show the version of %s. Note that docker 
image builds will always be marked "dirty".`, opts.rootOpts.name),
+               Example: fmt.Sprintf(`
 # display full version details
-regctl version
+%[1]s version
 
 # retrieve the version number
-regctl version --format '{{.VCSTag}}'`,
+%[1]s version --format '{{.VCSTag}}'`, opts.rootOpts.name),
                Args: cobra.ExactArgs(0),
                RunE: opts.runVersion,
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/cmd/regsync/root.go 
new/regclient-0.9.2/cmd/regsync/root.go
--- old/regclient-0.9.1/cmd/regsync/root.go     2025-08-24 21:20:38.000000000 
+0200
+++ new/regclient-0.9.2/cmd/regsync/root.go     2025-08-29 15:49:46.000000000 
+0200
@@ -80,14 +80,14 @@
        cmd.PersistentFlags().StringVarP(&opts.verbosity, "verbosity", "v", 
slog.LevelInfo.String(), "Log level (trace, debug, info, warn, error)")
        cmd.PersistentFlags().StringArrayVar(&opts.logopts, "logopt", 
[]string{}, "Log options")
 
-       var serverCmd = &cobra.Command{
+       serverCmd := &cobra.Command{
                Use:   "server",
                Short: "run the regsync server",
                Long:  `Sync registries according to the configuration.`,
                Args:  cobra.RangeArgs(0, 0),
                RunE:  opts.runServer,
        }
-       var checkCmd = &cobra.Command{
+       checkCmd := &cobra.Command{
                Use:   "check",
                Short: "processes each sync command once but skip actual copy",
                Long: `Processes each sync command in the configuration file in 
order.
@@ -97,7 +97,7 @@
                Args: cobra.RangeArgs(0, 0),
                RunE: opts.runCheck,
        }
-       var onceCmd = &cobra.Command{
+       onceCmd := &cobra.Command{
                Use:   "once",
                Short: "processes each sync command once, ignoring cron 
schedule",
                Long: `Processes each sync command in the configuration file in 
order.
@@ -107,7 +107,7 @@
                RunE: opts.runOnce,
        }
        onceCmd.Flags().BoolVar(&opts.missing, "missing", false, "Only copy 
tags that are missing on target")
-       var configCmd = &cobra.Command{
+       configCmd := &cobra.Command{
                Use:   "config",
                Short: "Show the config",
                Long:  `Show the config`,
@@ -123,12 +123,18 @@
                curCmd.Flags().BoolVar(&opts.abortOnErr, "abort-on-error", 
false, "Immediately abort on any errors")
        }
 
-       var versionCmd = &cobra.Command{
+       versionCmd := &cobra.Command{
                Use:   "version",
                Short: "Show the version",
-               Long:  `Show the version`,
-               Args:  cobra.RangeArgs(0, 0),
-               RunE:  opts.runVersion,
+               Long:  fmt.Sprintf(`Show the version of %s. Note that docker 
image builds will always be marked "dirty".`, cmd.Name()),
+               Example: fmt.Sprintf(`
+# display full version details
+%[1]s version
+
+# retrieve the version number
+%[1]s version --format '{{.VCSTag}}'`, cmd.Name()),
+               Args: cobra.ExactArgs(0),
+               RunE: opts.runVersion,
        }
        versionCmd.Flags().StringVar(&opts.format, "format", "{{printPretty 
.}}", "Format output with go template syntax")
        _ = versionCmd.RegisterFlagCompletionFunc("format", func(cmd 
*cobra.Command, args []string, toComplete string) ([]string, 
cobra.ShellCompDirective) {
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/go.mod new/regclient-0.9.2/go.mod
--- old/regclient-0.9.1/go.mod  2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/go.mod  2025-08-29 15:49:46.000000000 +0200
@@ -11,7 +11,7 @@
        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.13
+       github.com/ulikunitz/xz v0.5.15
        github.com/yuin/gopher-lua v1.1.1
        golang.org/x/sys v0.35.0
        golang.org/x/term v0.34.0
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/go.sum new/regclient-0.9.2/go.sum
--- old/regclient-0.9.1/go.sum  2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/go.sum  2025-08-29 15:49:46.000000000 +0200
@@ -29,8 +29,8 @@
 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.13 h1:ar98gWrjf4H1ev05fYP/o29PDZw9DrI3niHtnEqyuXA=
-github.com/ulikunitz/xz v0.5.13/go.mod 
h1:nbz6k7qbPmH4IRqmfOplQw/tblSgqTqBwxkY0oWt/14=
+github.com/ulikunitz/xz v0.5.15 h1:9DNdB5s+SgV3bQ2ApL10xRc35ck0DuIX/isZvIk+ubY=
+github.com/ulikunitz/xz v0.5.15/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=
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/regclient-0.9.1/release.md 
new/regclient-0.9.2/release.md
--- old/regclient-0.9.1/release.md      2025-08-24 21:20:38.000000000 +0200
+++ new/regclient-0.9.2/release.md      2025-08-29 15:49:46.000000000 +0200
@@ -1,21 +1,20 @@
-# Release v0.9.1
+# Release v0.9.2
 
-Features:
+Security:
 
-- Allow relative urls in bearer auth. ([PR 963][pr-963])
-- Add "ns" query param to registry mirror requests. ([PR 976][pr-976])
+- xz upgrade fixes CVE-2025-58058 ([PR 989][pr-989])
 
 Miscellaneous:
 
-- Update to SLSA v1 provenance. ([PR 968][pr-968])
-- Add a "make clean" command. ([PR 969][pr-969])
+- Fix CLI lint errors. ([PR 983][pr-983])
+- Cleanup version output. ([PR 985][pr-985])
+- Dockerfile cleanup. ([PR 986][pr-986])
 
 Contributors:
 
 - @sudo-bmitch
-- @wjordan
 
-[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
+[pr-983]: https://github.com/regclient/regclient/pull/983
+[pr-985]: https://github.com/regclient/regclient/pull/985
+[pr-986]: https://github.com/regclient/regclient/pull/986
+[pr-989]: https://github.com/regclient/regclient/pull/989

++++++ regclient.obsinfo ++++++
--- /var/tmp/diff_new_pack.MpPOab/_old  2025-09-02 17:59:03.872370121 +0200
+++ /var/tmp/diff_new_pack.MpPOab/_new  2025-09-02 17:59:03.876370289 +0200
@@ -1,5 +1,5 @@
 name: regclient
-version: 0.9.1
-mtime: 1756063238
-commit: 51df886b5e3b138ac168540ccef5997e0d383c86
+version: 0.9.2
+mtime: 1756475386
+commit: 9bf4b30da1110d0bc82ba2f9268e8c099172dd75
 

++++++ vendor.tar.gz ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/ulikunitz/xz/TODO.md 
new/vendor/github.com/ulikunitz/xz/TODO.md
--- old/vendor/github.com/ulikunitz/xz/TODO.md  2025-08-24 21:20:38.000000000 
+0200
+++ new/vendor/github.com/ulikunitz/xz/TODO.md  2025-08-29 15:49:46.000000000 
+0200
@@ -1,9 +1,5 @@
 # TODO list
 
-## Release v0.5.x
-
-1. Support check flag in gxz command.
-
 ## Release v0.6
 
 1. Review encoder and check for lzma improvements under xz.
@@ -86,6 +82,13 @@
 
 ## Log
 
+## 2025-08-28
+
+Release v0.5.14 addresses the security vulnerability CVE-2025-58058. If you put
+bytes in from of a LZMA stream, the header might not be read correctly and
+memory for the dictionary buffer allocated. I have implemented mitigations for
+the problem.
+
 ### 2025-08-20
 
 Release v0.5.13 addressed issue #61 regarding handling of multiple WriteClosers
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/ulikunitz/xz/lzma/header.go 
new/vendor/github.com/ulikunitz/xz/lzma/header.go
--- old/vendor/github.com/ulikunitz/xz/lzma/header.go   2025-08-24 
21:20:38.000000000 +0200
+++ new/vendor/github.com/ulikunitz/xz/lzma/header.go   2025-08-29 
15:49:46.000000000 +0200
@@ -60,36 +60,36 @@
 // HeaderLen provides the length of the LZMA file header.
 const HeaderLen = 13
 
-// header represents the header of an LZMA file.
-type header struct {
-       properties Properties
-       dictCap    int
-       // uncompressed size; negative value if no size is given
-       size int64
+// Header represents the Header of an LZMA file.
+type Header struct {
+       Properties Properties
+       DictSize   uint32
+       // uncompressed Size; negative value if no Size is given
+       Size int64
 }
 
 // marshalBinary marshals the header.
-func (h *header) marshalBinary() (data []byte, err error) {
-       if err = h.properties.verify(); err != nil {
+func (h *Header) marshalBinary() (data []byte, err error) {
+       if err = h.Properties.verify(); err != nil {
                return nil, err
        }
-       if !(0 <= h.dictCap && int64(h.dictCap) <= MaxDictCap) {
+       if !(h.DictSize <= MaxDictCap) {
                return nil, fmt.Errorf("lzma: DictCap %d out of range",
-                       h.dictCap)
+                       h.DictSize)
        }
 
        data = make([]byte, 13)
 
        // property byte
-       data[0] = h.properties.Code()
+       data[0] = h.Properties.Code()
 
        // dictionary capacity
-       putUint32LE(data[1:5], uint32(h.dictCap))
+       putUint32LE(data[1:5], uint32(h.DictSize))
 
        // uncompressed size
        var s uint64
-       if h.size > 0 {
-               s = uint64(h.size)
+       if h.Size > 0 {
+               s = uint64(h.Size)
        } else {
                s = noHeaderSize
        }
@@ -99,20 +99,20 @@
 }
 
 // unmarshalBinary unmarshals the header.
-func (h *header) unmarshalBinary(data []byte) error {
+func (h *Header) unmarshalBinary(data []byte) error {
        if len(data) != HeaderLen {
                return errors.New("lzma.unmarshalBinary: data has wrong length")
        }
 
        // properties
        var err error
-       if h.properties, err = PropertiesForCode(data[0]); err != nil {
+       if h.Properties, err = PropertiesForCode(data[0]); err != nil {
                return err
        }
 
        // dictionary capacity
-       h.dictCap = int(uint32LE(data[1:]))
-       if h.dictCap < 0 {
+       h.DictSize = uint32LE(data[1:])
+       if int(h.DictSize) < 0 {
                return errors.New(
                        "LZMA header: dictionary capacity exceeds maximum " +
                                "integer")
@@ -121,10 +121,10 @@
        // uncompressed size
        s := uint64LE(data[5:])
        if s == noHeaderSize {
-               h.size = -1
+               h.Size = -1
        } else {
-               h.size = int64(s)
-               if h.size < 0 {
+               h.Size = int64(s)
+               if h.Size < 0 {
                        return errors.New(
                                "LZMA header: uncompressed size " +
                                        "out of int64 range")
@@ -134,9 +134,9 @@
        return nil
 }
 
-// validDictCap checks whether the dictionary capacity is correct. This
+// validDictSize checks whether the dictionary capacity is correct. This
 // is used to weed out wrong file headers.
-func validDictCap(dictcap int) bool {
+func validDictSize(dictcap int) bool {
        if int64(dictcap) == MaxDictCap {
                return true
        }
@@ -155,13 +155,16 @@
 // dictionary sizes of 2^n or 2^n+2^(n-1) with n >= 10 or 2^32-1. If
 // there is an explicit size it must not exceed 256 GiB. The length of
 // the data argument must be HeaderLen.
+//
+// This function should be disregarded because there is no guarantee that LZMA
+// files follow the constraints.
 func ValidHeader(data []byte) bool {
-       var h header
+       var h Header
        if err := h.unmarshalBinary(data); err != nil {
                return false
        }
-       if !validDictCap(h.dictCap) {
+       if !validDictSize(int(h.DictSize)) {
                return false
        }
-       return h.size < 0 || h.size <= 1<<38
+       return h.Size < 0 || h.Size <= 1<<38
 }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/ulikunitz/xz/lzma/reader.go 
new/vendor/github.com/ulikunitz/xz/lzma/reader.go
--- old/vendor/github.com/ulikunitz/xz/lzma/reader.go   2025-08-24 
21:20:38.000000000 +0200
+++ new/vendor/github.com/ulikunitz/xz/lzma/reader.go   2025-08-29 
15:49:46.000000000 +0200
@@ -6,25 +6,32 @@
 // Reader and Writer support the classic LZMA format. Reader2 and
 // Writer2 support the decoding and encoding of LZMA2 streams.
 //
-// The package is written completely in Go and doesn't rely on any external
+// The package is written completely in Go and does not rely on any external
 // library.
 package lzma
 
 import (
        "errors"
+       "fmt"
        "io"
 )
 
 // ReaderConfig stores the parameters for the reader of the classic LZMA
 // format.
 type ReaderConfig struct {
+       // Since v0.5.14 this parameter sets an upper limit for a .lzma file's
+       // dictionary size. This helps to mitigate problems with mangled
+       // headers.
        DictCap int
 }
 
 // fill converts the zero values of the configuration to the default values.
 func (c *ReaderConfig) fill() {
        if c.DictCap == 0 {
-               c.DictCap = 8 * 1024 * 1024
+               // set an upper limit of 2 GiB-1 for dictionary capacity
+               // to address the zero prefix security issue.
+               c.DictCap = (1 << 31) - 1
+               // original: c.DictCap = 8 * 1024 * 1024
        }
 }
 
@@ -39,10 +46,33 @@
 }
 
 // Reader provides a reader for LZMA files or streams.
+//
+// # Security concerns
+//
+// Note that LZMA format doesn't support a magic marker in the header. So
+// [NewReader] cannot determine whether it reads the actual header. For 
instance
+// the LZMA stream might have a zero byte in front of the reader, leading to
+// larger dictionary sizes and file sizes. The code will detect later that 
there
+// are problems with the stream, but the dictionary has already been allocated
+// and this might consume a lot of memory.
+//
+// Version 0.5.14 introduces built-in mitigations:
+//
+//   - The [ReaderConfig] DictCap field is now interpreted as a limit for the
+//     dictionary size.
+//   - The default is 2 Gigabytes minus 1 byte (2^31-1 bytes).
+//   - Users can check with the [Reader.Header] method what the actual values 
are in
+//     their LZMA files and set a smaller limit using [ReaderConfig].
+//   - The dictionary size doesn't exceed the larger of the file size and
+//     the minimum dictionary size. This is another measure to prevent huge
+//     memory allocations for the dictionary.
+//   - The code supports stream sizes only up to a pebibyte (1024^5).
 type Reader struct {
-       lzma io.Reader
-       h    header
-       d    *decoder
+       lzma   io.Reader
+       header Header
+       // headerOrig stores the original header read from the stream.
+       headerOrig Header
+       d          *decoder
 }
 
 // NewReader creates a new reader for an LZMA stream using the classic
@@ -51,8 +81,37 @@
        return ReaderConfig{}.NewReader(lzma)
 }
 
+// ErrDictSize reports about an error of the dictionary size.
+type ErrDictSize struct {
+       ConfigDictCap  int
+       HeaderDictSize uint32
+       Message        string
+}
+
+// Error returns the error message.
+func (e *ErrDictSize) Error() string {
+       return e.Message
+}
+
+func newErrDictSize(messageformat string,
+       configDictCap int, headerDictSize uint32,
+       args ...interface{}) *ErrDictSize {
+       newArgs := make([]interface{}, len(args)+2)
+       newArgs[0] = configDictCap
+       newArgs[1] = headerDictSize
+       copy(newArgs[2:], args)
+       return &ErrDictSize{
+               ConfigDictCap:  configDictCap,
+               HeaderDictSize: headerDictSize,
+               Message:        fmt.Sprintf(messageformat, newArgs...),
+       }
+}
+
+// We support only files not larger than 1 << 50 bytes (a pebibyte, 1024^5).
+const maxStreamSize = 1 << 50
+
 // NewReader creates a new reader for an LZMA stream in the classic
-// format. The function reads and verifies the the header of the LZMA
+// format. The function reads and verifies the header of the LZMA
 // stream.
 func (c ReaderConfig) NewReader(lzma io.Reader) (r *Reader, err error) {
        if err = c.Verify(); err != nil {
@@ -66,29 +125,63 @@
                return nil, err
        }
        r = &Reader{lzma: lzma}
-       if err = r.h.unmarshalBinary(data); err != nil {
+       if err = r.header.unmarshalBinary(data); err != nil {
                return nil, err
        }
-       if r.h.dictCap < MinDictCap {
-               r.h.dictCap = MinDictCap
+       r.headerOrig = r.header
+       dictSize := int64(r.header.DictSize)
+       if int64(c.DictCap) < dictSize {
+               return nil, newErrDictSize(
+                       "lzma: header dictionary size %[2]d exceeds configured 
dictionary capacity %[1]d",
+                       c.DictCap, uint32(dictSize),
+               )
+       }
+       if dictSize < MinDictCap {
+               dictSize = MinDictCap
+       }
+       // original code: disabled this because there is no point in increasing
+       // the dictionary above what is stated in the file.
+       /*
+               if int64(c.DictCap) > int64(dictSize) {
+                       dictSize = int64(c.DictCap)
+               }
+       */
+       size := r.header.Size
+       if size >= 0 && size < dictSize {
+               dictSize = size
+       }
+       // Protect against modified or malicious headers.
+       if size > maxStreamSize {
+               return nil, fmt.Errorf(
+                       "lzma: stream size %d exceeds a pebibyte (1024^5)",
+                       size)
        }
-       dictCap := r.h.dictCap
-       if c.DictCap > dictCap {
-               dictCap = c.DictCap
+       if dictSize < MinDictCap {
+               dictSize = MinDictCap
        }
 
-       state := newState(r.h.properties)
-       dict, err := newDecoderDict(dictCap)
+       r.header.DictSize = uint32(dictSize)
+
+       state := newState(r.header.Properties)
+       dict, err := newDecoderDict(int(dictSize))
        if err != nil {
                return nil, err
        }
-       r.d, err = newDecoder(ByteReader(lzma), state, dict, r.h.size)
+       r.d, err = newDecoder(ByteReader(lzma), state, dict, r.header.Size)
        if err != nil {
                return nil, err
        }
        return r, nil
 }
 
+// Header returns the header as read from the LZMA stream. It is intended to
+// allow the user to understand what parameters are typically provided in the
+// headers of the LZMA files and set the DictCap field in [ReaderConfig]
+// accordingly.
+func (r *Reader) Header() (h Header, ok bool) {
+       return r.headerOrig, r.d != nil
+}
+
 // EOSMarker indicates that an EOS marker has been encountered.
 func (r *Reader) EOSMarker() bool {
        return r.d.eosMarker
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/github.com/ulikunitz/xz/lzma/writer.go 
new/vendor/github.com/ulikunitz/xz/lzma/writer.go
--- old/vendor/github.com/ulikunitz/xz/lzma/writer.go   2025-08-24 
21:20:38.000000000 +0200
+++ new/vendor/github.com/ulikunitz/xz/lzma/writer.go   2025-08-29 
15:49:46.000000000 +0200
@@ -96,21 +96,21 @@
 }
 
 // header returns the header structure for this configuration.
-func (c *WriterConfig) header() header {
-       h := header{
-               properties: *c.Properties,
-               dictCap:    c.DictCap,
-               size:       -1,
+func (c *WriterConfig) header() Header {
+       h := Header{
+               Properties: *c.Properties,
+               DictSize:   uint32(c.DictCap),
+               Size:       -1,
        }
        if c.SizeInHeader {
-               h.size = c.Size
+               h.Size = c.Size
        }
        return h
 }
 
 // Writer writes an LZMA stream in the classic format.
 type Writer struct {
-       h   header
+       h   Header
        bw  io.ByteWriter
        buf *bufio.Writer
        e   *encoder
@@ -130,12 +130,12 @@
                w.buf = bufio.NewWriter(lzma)
                w.bw = w.buf
        }
-       state := newState(w.h.properties)
-       m, err := c.Matcher.new(w.h.dictCap)
+       state := newState(w.h.Properties)
+       m, err := c.Matcher.new(int(w.h.DictSize))
        if err != nil {
                return nil, err
        }
-       dict, err := newEncoderDict(w.h.dictCap, c.BufSize, m)
+       dict, err := newEncoderDict(int(w.h.DictSize), c.BufSize, m)
        if err != nil {
                return nil, err
        }
@@ -171,8 +171,8 @@
 
 // Write puts data into the Writer.
 func (w *Writer) Write(p []byte) (n int, err error) {
-       if w.h.size >= 0 {
-               m := w.h.size
+       if w.h.Size >= 0 {
+               m := w.h.Size
                m -= w.e.Compressed() + int64(w.e.dict.Buffered())
                if m < 0 {
                        m = 0
@@ -192,9 +192,9 @@
 // Close closes the writer stream. It ensures that all data from the
 // buffer will be compressed and the LZMA stream will be finished.
 func (w *Writer) Close() error {
-       if w.h.size >= 0 {
+       if w.h.Size >= 0 {
                n := w.e.Compressed() + int64(w.e.dict.Buffered())
-               if n != w.h.size {
+               if n != w.h.Size {
                        return errSize
                }
        }
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' 
'--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt
--- old/vendor/modules.txt      2025-08-24 21:20:38.000000000 +0200
+++ new/vendor/modules.txt      2025-08-29 15:49:46.000000000 +0200
@@ -49,7 +49,7 @@
 # github.com/spf13/pflag v1.0.7
 ## explicit; go 1.12
 github.com/spf13/pflag
-# github.com/ulikunitz/xz v0.5.13
+# github.com/ulikunitz/xz v0.5.15
 ## explicit; go 1.12
 github.com/ulikunitz/xz
 github.com/ulikunitz/xz/internal/hash

Reply via email to