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-12-05 16:51:39 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/regclient (Old) and /work/SRC/openSUSE:Factory/.regclient.new.1939 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "regclient" Fri Dec 5 16:51:39 2025 rev:11 rq:1321050 version:0.11.0 Changes: -------- --- /work/SRC/openSUSE:Factory/regclient/regclient.changes 2025-11-10 19:21:06.621831689 +0100 +++ /work/SRC/openSUSE:Factory/.regclient.new.1939/regclient.changes 2025-12-05 16:53:14.235857569 +0100 @@ -1,0 +2,15 @@ +Thu Dec 04 06:08:31 UTC 2025 - Johannes Kastl <[email protected]> + +- Update to version 0.11.0: + * Features: + - Build artifacts for riscv64. (PR 1011) + - Generate FreeBSD amd64 binaries. (PR 1013) + - Add support for cosign v3 bundles. (PR 1018) + * Fixes: + - Fix ECR Helper version pin. (PR 1017) + - Fix the cosign use-signing-config flag. (PR 1019) + - Improve reproducibility in Dockerfiles. (PR 1020) + * Other Changes: + - Add a policy for LLM generated contributions. (PR 1016) + +------------------------------------------------------------------- Old: ---- regclient-0.10.0.obscpio New: ---- regclient-0.11.0.obscpio ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ regclient.spec ++++++ --- /var/tmp/diff_new_pack.WjNiAh/_old 2025-12-05 16:53:15.203898042 +0100 +++ /var/tmp/diff_new_pack.WjNiAh/_new 2025-12-05 16:53:15.203898042 +0100 @@ -17,7 +17,7 @@ Name: regclient -Version: 0.10.0 +Version: 0.11.0 Release: 0 Summary: OCI Registry Client in Go and tooling using those libraries License: Apache-2.0 ++++++ _service ++++++ --- /var/tmp/diff_new_pack.WjNiAh/_old 2025-12-05 16:53:15.267900717 +0100 +++ /var/tmp/diff_new_pack.WjNiAh/_new 2025-12-05 16:53:15.271900885 +0100 @@ -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.10.0</param> + <param name="revision">v0.11.0</param> <param name="versionformat">@PARENT_TAG@</param> <param name="versionrewrite-pattern">v(.*)</param> <param name="changesgenerate">enable</param> ++++++ _servicedata ++++++ --- /var/tmp/diff_new_pack.WjNiAh/_old 2025-12-05 16:53:15.315902724 +0100 +++ /var/tmp/diff_new_pack.WjNiAh/_new 2025-12-05 16:53:15.327903226 +0100 @@ -1,6 +1,6 @@ <servicedata> <service name="tar_scm"> <param name="url">https://github.com/regclient/regclient</param> - <param name="changesrevision">c3de9bb7b04ad3cd96bb73bc0c72986b83572d12</param></service></servicedata> + <param name="changesrevision">9a4fd6b957345e2f625f0c18dfbea4db59fc2b23</param></service></servicedata> (No newline at EOF) ++++++ regclient-0.10.0.obscpio -> regclient-0.11.0.obscpio ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/HEAD new/regclient-0.11.0/.git/HEAD --- old/regclient-0.10.0/.git/HEAD 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/HEAD 2025-12-01 20:38:07.000000000 +0100 @@ -1 +1 @@ -c3de9bb7b04ad3cd96bb73bc0c72986b83572d12 +9a4fd6b957345e2f625f0c18dfbea4db59fc2b23 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/ORIG_HEAD new/regclient-0.11.0/.git/ORIG_HEAD --- old/regclient-0.10.0/.git/ORIG_HEAD 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/ORIG_HEAD 2025-12-01 20:38:07.000000000 +0100 @@ -1 +1 @@ -c3de9bb7b04ad3cd96bb73bc0c72986b83572d12 +9a4fd6b957345e2f625f0c18dfbea4db59fc2b23 Binary files old/regclient-0.10.0/.git/index and new/regclient-0.11.0/.git/index differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/logs/HEAD new/regclient-0.11.0/.git/logs/HEAD --- old/regclient-0.10.0/.git/logs/HEAD 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/logs/HEAD 2025-12-01 20:38:07.000000000 +0100 @@ -1,2 +1,2 @@ -0000000000000000000000000000000000000000 2a0496d240396e626d9c30aab63064a812735ca7 Johannes Kastl <[email protected]> 1762779779 +0100 clone: from https://github.com/regclient/regclient -2a0496d240396e626d9c30aab63064a812735ca7 c3de9bb7b04ad3cd96bb73bc0c72986b83572d12 Johannes Kastl <[email protected]> 1762779779 +0100 checkout: moving from main to v0.10.0 +0000000000000000000000000000000000000000 1b734bf7e919e7df1e35417f33afd068b5bc07a2 kastl <[email protected]> 1764828511 +0100 clone: from https://github.com/regclient/regclient +1b734bf7e919e7df1e35417f33afd068b5bc07a2 9a4fd6b957345e2f625f0c18dfbea4db59fc2b23 kastl <[email protected]> 1764828511 +0100 checkout: moving from main to v0.11.0 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/logs/refs/heads/main new/regclient-0.11.0/.git/logs/refs/heads/main --- old/regclient-0.10.0/.git/logs/refs/heads/main 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/logs/refs/heads/main 2025-12-01 20:38:07.000000000 +0100 @@ -1 +1 @@ -0000000000000000000000000000000000000000 2a0496d240396e626d9c30aab63064a812735ca7 Johannes Kastl <[email protected]> 1762779779 +0100 clone: from https://github.com/regclient/regclient +0000000000000000000000000000000000000000 1b734bf7e919e7df1e35417f33afd068b5bc07a2 kastl <[email protected]> 1764828511 +0100 clone: from https://github.com/regclient/regclient diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/logs/refs/remotes/origin/HEAD new/regclient-0.11.0/.git/logs/refs/remotes/origin/HEAD --- old/regclient-0.10.0/.git/logs/refs/remotes/origin/HEAD 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/logs/refs/remotes/origin/HEAD 2025-12-01 20:38:07.000000000 +0100 @@ -1 +1 @@ -0000000000000000000000000000000000000000 2a0496d240396e626d9c30aab63064a812735ca7 Johannes Kastl <[email protected]> 1762779779 +0100 clone: from https://github.com/regclient/regclient +0000000000000000000000000000000000000000 1b734bf7e919e7df1e35417f33afd068b5bc07a2 kastl <[email protected]> 1764828511 +0100 clone: from https://github.com/regclient/regclient Binary files old/regclient-0.10.0/.git/objects/pack/pack-9b83ec8d296acf7a03f63199947c559ca30a13e8.idx and new/regclient-0.11.0/.git/objects/pack/pack-9b83ec8d296acf7a03f63199947c559ca30a13e8.idx differ Binary files old/regclient-0.10.0/.git/objects/pack/pack-9b83ec8d296acf7a03f63199947c559ca30a13e8.pack and new/regclient-0.11.0/.git/objects/pack/pack-9b83ec8d296acf7a03f63199947c559ca30a13e8.pack differ Binary files old/regclient-0.10.0/.git/objects/pack/pack-9b83ec8d296acf7a03f63199947c559ca30a13e8.rev and new/regclient-0.11.0/.git/objects/pack/pack-9b83ec8d296acf7a03f63199947c559ca30a13e8.rev differ Binary files old/regclient-0.10.0/.git/objects/pack/pack-d78df5fde3b1b54ff71823fa74ef53a7bf9c58d3.idx and new/regclient-0.11.0/.git/objects/pack/pack-d78df5fde3b1b54ff71823fa74ef53a7bf9c58d3.idx differ Binary files old/regclient-0.10.0/.git/objects/pack/pack-d78df5fde3b1b54ff71823fa74ef53a7bf9c58d3.pack and new/regclient-0.11.0/.git/objects/pack/pack-d78df5fde3b1b54ff71823fa74ef53a7bf9c58d3.pack differ Binary files old/regclient-0.10.0/.git/objects/pack/pack-d78df5fde3b1b54ff71823fa74ef53a7bf9c58d3.rev and new/regclient-0.11.0/.git/objects/pack/pack-d78df5fde3b1b54ff71823fa74ef53a7bf9c58d3.rev differ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/packed-refs new/regclient-0.11.0/.git/packed-refs --- old/regclient-0.10.0/.git/packed-refs 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/packed-refs 2025-12-01 20:38:07.000000000 +0100 @@ -1,7 +1,8 @@ # pack-refs with: peeled fully-peeled sorted -2a0496d240396e626d9c30aab63064a812735ca7 refs/remotes/origin/main +1b734bf7e919e7df1e35417f33afd068b5bc07a2 refs/remotes/origin/main daa734a0b4dc9c19231cfe691a241f0ce2a7b2f4 refs/remotes/origin/releases/0.0 c3de9bb7b04ad3cd96bb73bc0c72986b83572d12 refs/remotes/origin/releases/0.10 +9a4fd6b957345e2f625f0c18dfbea4db59fc2b23 refs/remotes/origin/releases/0.11 4c6dd972a3c609f7c0997bb6e464aee431f8c971 refs/remotes/origin/releases/0.2 6a1a13c410f734f5e18a6032936bc6764814eae7 refs/remotes/origin/releases/0.3 847254c7ac7d6f027dcdfb196a9aa4c11eb61ed9 refs/remotes/origin/releases/0.4 @@ -24,6 +25,8 @@ ^daa734a0b4dc9c19231cfe691a241f0ce2a7b2f4 5b0d2934d50bc60c49b71003411f3c98b59345b1 refs/tags/v0.10.0 ^c3de9bb7b04ad3cd96bb73bc0c72986b83572d12 +3d39816ed1fd27384e80977617ca14dff38269b4 refs/tags/v0.11.0 +^9a4fd6b957345e2f625f0c18dfbea4db59fc2b23 f5e39881d000960a706d1840f2a43eac7b3fd9de refs/tags/v0.2.0 ^5906ef88ec6ec3f6709d286756d27b77982fa55b 25bacba961cde26845ce0bf5a90edbb8a2bdb2e4 refs/tags/v0.2.1 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.git/refs/heads/main new/regclient-0.11.0/.git/refs/heads/main --- old/regclient-0.10.0/.git/refs/heads/main 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.git/refs/heads/main 2025-12-01 20:38:07.000000000 +0100 @@ -1 +1 @@ -2a0496d240396e626d9c30aab63064a812735ca7 +1b734bf7e919e7df1e35417f33afd068b5bc07a2 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/ISSUE_TEMPLATE/feature.md new/regclient-0.11.0/.github/ISSUE_TEMPLATE/feature.md --- old/regclient-0.10.0/.github/ISSUE_TEMPLATE/feature.md 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/ISSUE_TEMPLATE/feature.md 2025-12-01 20:38:07.000000000 +0100 @@ -52,3 +52,4 @@ <!-- Links? References? Anything that will give us more context about the issue that you are encountering! --> +<!-- markdownlint-disable-file MD001 --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/ISSUE_TEMPLATE/issue.md new/regclient-0.11.0/.github/ISSUE_TEMPLATE/issue.md --- old/regclient-0.10.0/.github/ISSUE_TEMPLATE/issue.md 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/ISSUE_TEMPLATE/issue.md 2025-12-01 20:38:07.000000000 +0100 @@ -52,3 +52,4 @@ <!-- Links? References? Anything that will give us more context about the issue that you are encountering! --> +<!-- markdownlint-disable-file MD001 --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/ISSUE_TEMPLATE/question.md new/regclient-0.11.0/.github/ISSUE_TEMPLATE/question.md --- old/regclient-0.10.0/.github/ISSUE_TEMPLATE/question.md 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/ISSUE_TEMPLATE/question.md 2025-12-01 20:38:07.000000000 +0100 @@ -38,3 +38,4 @@ <!-- Links? References? Anything that will give us more context about the issue that you are encountering! --> +<!-- markdownlint-disable-file MD001 --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/PULL_REQUEST_TEMPLATE.md new/regclient-0.11.0/.github/PULL_REQUEST_TEMPLATE.md --- old/regclient-0.10.0/.github/PULL_REQUEST_TEMPLATE.md 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/PULL_REQUEST_TEMPLATE.md 2025-12-01 20:38:07.000000000 +0100 @@ -27,8 +27,9 @@ <!-- Mark the following with an [X] to verify they are included --> - [ ] Tests have been added or not applicable -- [ ] Documentation has been added, updated, or not applicable +- [ ] Documentation updates are included or not applicable (most documentation should be in the regclient.org repo) - [ ] Changes have been rebased to main - [ ] Multiple commits to the same code have been squashed +- [ ] All changes have been human generated or created with a reproducible tool <!-- markdownlint-disable-file MD041 --> diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/workflows/ci-registry.yml new/regclient-0.11.0/.github/workflows/ci-registry.yml --- old/regclient-0.10.0/.github/workflows/ci-registry.yml 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/workflows/ci-registry.yml 2025-12-01 20:38:07.000000000 +0100 @@ -23,10 +23,10 @@ steps: - name: Check out code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: "Set up Go ${{ env.RELEASE_GO_VER }}" - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 + uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: "${{ env.RELEASE_GO_VER }}" check-latest: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/workflows/docker.yml new/regclient-0.11.0/.github/workflows/docker.yml --- old/regclient-0.10.0/.github/workflows/docker.yml 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/workflows/docker.yml 2025-12-01 20:38:07.000000000 +0100 @@ -33,7 +33,7 @@ steps: - name: Check out code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: Prepare id: prep @@ -108,7 +108,7 @@ with: context: . file: ./build/Dockerfile.${{ matrix.image }}.buildkit - platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x + platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,linux/riscv64 target: release-${{ matrix.type }} outputs: type=oci,oci-artifact=true,dest=output/${{matrix.image}}-${{matrix.type}}.tar provenance: version=v1,mode=max @@ -122,18 +122,18 @@ if: github.event_name != 'pull_request' && github.repository_owner == 'regclient' uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0 with: - cosign-release: "v2.6.1" + cosign-release: "v3.0.2" - name: Install syft if: github.event_name != 'pull_request' && github.repository_owner == 'regclient' - uses: anchore/sbom-action/download-syft@8e94d75ddd33f69f691467e42275782e4bfefe84 # v0.20.9 + uses: anchore/sbom-action/download-syft@fbfd9c6c189226748411491745178e0c2017392d # v0.20.10 id: syft with: - syft-version: "v1.37.0" + syft-version: "v1.38.0" # Dogfooding, use regctl to modify regclient images to improve reproducibility - name: Install regctl - uses: regclient/actions/regctl-installer@df29323daedc1f78ee74b261bd8d849327cb4ff0 # main + uses: regclient/actions/regctl-installer@ed5268e995795eb54f4187ada5728d118ad674f3 # main if: github.event_name != 'pull_request' && github.repository_owner == 'regclient' with: release: main @@ -209,6 +209,8 @@ else echo "Pushing ${tag}" regctl image copy --referrers "ocidir://output/${{matrix.image}}:${{matrix.type}}@${digest}" "${tag}" - cosign sign -y -r "${tag}@${digest}" + # sign both with and without the bundle to support older clients + cosign sign -y -r --new-bundle-format=false --use-signing-config=false "${tag}@${digest}" + cosign sign -y -r --new-bundle-format=true --use-signing-config=true "${tag}@${digest}" fi done diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/workflows/go.yml new/regclient-0.11.0/.github/workflows/go.yml --- old/regclient-0.10.0/.github/workflows/go.yml 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/workflows/go.yml 2025-12-01 20:38:07.000000000 +0100 @@ -32,10 +32,10 @@ steps: - name: Check out code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: "Set up Go ${{ matrix.gover }}" - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 + uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: "${{ matrix.gover }}" check-latest: true @@ -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@8e94d75ddd33f69f691467e42275782e4bfefe84 # v0.20.9 + uses: anchore/sbom-action/download-syft@fbfd9c6c189226748411491745178e0c2017392d # v0.20.10 id: syft with: - syft-version: "v1.37.0" + syft-version: "v1.38.0" - name: Build artifacts if: startsWith( github.ref, 'refs/tags/v' ) || github.ref == 'refs/heads/main' @@ -73,7 +73,7 @@ if: ( startsWith( github.ref, 'refs/tags/v' ) || github.ref == 'refs/heads/main' ) && matrix.gover == env.RELEASE_GO_VER uses: sigstore/cosign-installer@faadad0cce49287aee09b3a48701e75088a2c6ad # v4.0.0 with: - cosign-release: "v2.6.1" + cosign-release: "v3.0.2" - name: Package artifacts if: ( startsWith( github.ref, 'refs/tags/v' ) || github.ref == 'refs/heads/main' ) && matrix.gover == env.RELEASE_GO_VER @@ -82,27 +82,35 @@ for artifact in \ regbot-darwin-amd64 \ regbot-darwin-arm64 \ + regbot-freebsd-amd64 \ regbot-linux-amd64 \ regbot-linux-arm64 \ regbot-linux-ppc64le \ regbot-linux-s390x \ + regbot-linux-riscv64 \ regbot-windows-amd64.exe \ regctl-darwin-amd64 \ regctl-darwin-arm64 \ + regctl-freebsd-amd64 \ regctl-linux-amd64 \ regctl-linux-arm64 \ regctl-linux-ppc64le \ regctl-linux-s390x \ + regctl-linux-riscv64 \ regctl-windows-amd64.exe \ regsync-darwin-amd64 \ regsync-darwin-arm64 \ + regsync-freebsd-amd64 \ regsync-linux-amd64 \ regsync-linux-arm64 \ regsync-linux-ppc64le \ regsync-linux-s390x \ + regsync-linux-riscv64 \ regsync-windows-amd64.exe \ ; do - cosign sign-blob -y --output-signature "${artifact%.exe}.sig" --output-certificate "${artifact%.exe}.pem" "${artifact}" + # sign content with and without the bundle to simplify client migrations + cosign sign-blob -y --new-bundle-format=false --use-signing-config=false --output-signature "${artifact%.exe}.sig" --output-certificate "${artifact%.exe}.pem" "${artifact}" + cosign sign-blob -y --new-bundle-format=true --use-signing-config=true --bundle "${artifact%.exe}.sigstore.json" "${artifact}" done tar -cvzf metadata.tgz *.sig *.pem *.json @@ -121,7 +129,7 @@ - name: Create release if: steps.release_details.outputs.valid == 'true' && matrix.gover == env.RELEASE_GO_VER id: release_create - uses: softprops/action-gh-release@5be0e66d93ac7ed76da52eca8bb058f665c3a5fe # v2.4.2 + uses: softprops/action-gh-release@a06a81a03ee405af7f2048a818ed3f03bbf83c7b # v2.5.0 env: GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }} with: @@ -132,24 +140,30 @@ files: | ./artifacts/regbot-darwin-amd64 ./artifacts/regbot-darwin-arm64 + ./artifacts/regbot-freebsd-amd64 ./artifacts/regbot-linux-amd64 ./artifacts/regbot-linux-arm64 ./artifacts/regbot-linux-ppc64le ./artifacts/regbot-linux-s390x + ./artifacts/regbot-linux-riscv64 ./artifacts/regbot-windows-amd64.exe ./artifacts/regctl-darwin-amd64 ./artifacts/regctl-darwin-arm64 + ./artifacts/regctl-freebsd-amd64 ./artifacts/regctl-linux-amd64 ./artifacts/regctl-linux-arm64 ./artifacts/regctl-linux-ppc64le ./artifacts/regctl-linux-s390x + ./artifacts/regctl-linux-riscv64 ./artifacts/regctl-windows-amd64.exe ./artifacts/regsync-darwin-amd64 ./artifacts/regsync-darwin-arm64 + ./artifacts/regsync-freebsd-amd64 ./artifacts/regsync-linux-amd64 ./artifacts/regsync-linux-arm64 ./artifacts/regsync-linux-ppc64le ./artifacts/regsync-linux-s390x + ./artifacts/regsync-linux-riscv64 ./artifacts/regsync-windows-amd64.exe ./artifacts/metadata.tgz diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.github/workflows/version-check.yml new/regclient-0.11.0/.github/workflows/version-check.yml --- old/regclient-0.10.0/.github/workflows/version-check.yml 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/workflows/version-check.yml 2025-12-01 20:38:07.000000000 +0100 @@ -15,7 +15,7 @@ steps: - name: Check out code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.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.10.0/.github/workflows/vulnscans.yml new/regclient-0.11.0/.github/workflows/vulnscans.yml --- old/regclient-0.10.0/.github/workflows/vulnscans.yml 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.github/workflows/vulnscans.yml 2025-12-01 20:38:07.000000000 +0100 @@ -17,10 +17,10 @@ steps: - name: Check out code - uses: actions/checkout@08c6903cd8c0fde910a37f88322edcfb5dd907a8 # v5.0.0 + uses: actions/checkout@1af3b93b6815bc44a9784bd300feb67ff0d1eeb3 # v6.0.0 - name: "Set up Go" - uses: actions/setup-go@44694675825211faa026b3c33043df3e48a5fa00 # v6.0.0 + uses: actions/setup-go@4dc6199c7b1a012772edbd06daecab0f50c9053c # v6.1.0 with: go-version: "${{ env.RELEASE_GO_VER }}" check-latest: true diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/.version-bump.lock new/regclient-0.11.0/.version-bump.lock --- old/regclient-0.10.0/.version-bump.lock 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.version-bump.lock 2025-12-01 20:38:07.000000000 +0100 @@ -1,6 +1,6 @@ {"name":"docker-arg-alpine-digest","key":"docker.io/library/alpine:3.22.2","version":"sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412"} {"name":"docker-arg-alpine-tag","key":"docker.io/library/alpine","version":"3.22.2"} -{"name":"docker-arg-ecr","key":"https://github.com/awslabs/amazon-ecr-credential-helper.git","version":"v0.10.1"} +{"name":"docker-arg-ecr","key":"https://github.com/awslabs/amazon-ecr-credential-helper.git","version":"v0.11.0"} {"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.4-alpine","version":"sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb"} {"name":"docker-arg-go-tag","key":"docker.io/library/golang","version":"1.25.4"} @@ -9,44 +9,44 @@ {"name":"gha-alpine-digest","key":"docker.io/library/alpine:3.22.2","version":"sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412"} {"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.2"} -{"name":"gha-cosign-version","key":"https://github.com/sigstore/cosign.git","version":"v2.6.1"} +{"name":"gha-cosign-version","key":"https://github.com/sigstore/cosign.git","version":"v3.0.2"} {"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.37.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:v6.0.0","version":"44694675825211faa026b3c33043df3e48a5fa00"} +{"name":"gha-syft-version","key":"docker.io/anchore/syft","version":"v1.38.0"} +{"name":"gha-uses-commit","key":"https://github.com/actions/checkout.git:v6.0.0","version":"1af3b93b6815bc44a9784bd300feb67ff0d1eeb3"} +{"name":"gha-uses-commit","key":"https://github.com/actions/setup-go.git:v6.1.0","version":"4dc6199c7b1a012772edbd06daecab0f50c9053c"} {"name":"gha-uses-commit","key":"https://github.com/actions/stale.git:v10.1.0","version":"5f858e3efba33a5ca4407a664cc011ad407f2008"} {"name":"gha-uses-commit","key":"https://github.com/actions/upload-artifact.git:v5.0.0","version":"330a01c490aca151604b8cf639adc76d48f6c5d4"} -{"name":"gha-uses-commit","key":"https://github.com/anchore/sbom-action.git:v0.20.9","version":"8e94d75ddd33f69f691467e42275782e4bfefe84"} +{"name":"gha-uses-commit","key":"https://github.com/anchore/sbom-action.git:v0.20.10","version":"fbfd9c6c189226748411491745178e0c2017392d"} {"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.6.0","version":"5e57cd118135c172c3672efd75eb46360885c0ef"} {"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":"df29323daedc1f78ee74b261bd8d849327cb4ff0"} +{"name":"gha-uses-commit","key":"https://github.com/regclient/actions.git:main","version":"ed5268e995795eb54f4187ada5728d118ad674f3"} {"name":"gha-uses-commit","key":"https://github.com/sigstore/cosign-installer.git:v4.0.0","version":"faadad0cce49287aee09b3a48701e75088a2c6ad"} -{"name":"gha-uses-commit","key":"https://github.com/softprops/action-gh-release.git:v2.4.2","version":"5be0e66d93ac7ed76da52eca8bb058f665c3a5fe"} -{"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":"v6.0.0"} +{"name":"gha-uses-commit","key":"https://github.com/softprops/action-gh-release.git:v2.5.0","version":"a06a81a03ee405af7f2048a818ed3f03bbf83c7b"} +{"name":"gha-uses-semver","key":"https://github.com/actions/checkout.git","version":"v6.0.0"} +{"name":"gha-uses-semver","key":"https://github.com/actions/setup-go.git","version":"v6.1.0"} {"name":"gha-uses-semver","key":"https://github.com/actions/stale.git","version":"v10.1.0"} {"name":"gha-uses-semver","key":"https://github.com/actions/upload-artifact.git","version":"v5.0.0"} -{"name":"gha-uses-semver","key":"https://github.com/anchore/sbom-action.git","version":"v0.20.9"} +{"name":"gha-uses-semver","key":"https://github.com/anchore/sbom-action.git","version":"v0.20.10"} {"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.6.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":"v4.0.0"} -{"name":"gha-uses-semver","key":"https://github.com/softprops/action-gh-release.git","version":"v2.4.2"} +{"name":"gha-uses-semver","key":"https://github.com/softprops/action-gh-release.git","version":"v2.5.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.10"} +{"name":"makefile-ci-zot","key":"ghcr.io/project-zot/zot-linux-amd64","version":"v2.1.11"} {"name":"makefile-go-vulncheck","key":"https://go.googlesource.com/vuln.git","version":"v1.1.4"} {"name":"makefile-gofumpt","key":"https://github.com/mvdan/gofumpt.git","version":"v0.9.2"} {"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.10"} -{"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.4"} +{"name":"makefile-markdown-lint","key":"docker.io/davidanson/markdownlint-cli2","version":"v0.19.1"} +{"name":"makefile-osv-scanner","key":"https://github.com/google/osv-scanner.git","version":"v2.3.0"} {"name":"makefile-staticcheck","key":"https://github.com/dominikh/go-tools.git","version":"v0.6.1"} -{"name":"makefile-syft-container-digest","key":"anchore/syft:v1.37.0","version":"sha256:48d679480c6d272c1801cf30460556959c01d4826795be31d4fd8b53750b7d91"} -{"name":"makefile-syft-container-tag","key":"anchore/syft","version":"v1.37.0"} -{"name":"makefile-syft-version","key":"docker.io/anchore/syft","version":"v1.37.0"} +{"name":"makefile-syft-container-digest","key":"anchore/syft:v1.38.0","version":"sha256:825cad3a952c87676a6d07e9a3bb05ac9c401d598360070e970aa46d54c1727e"} +{"name":"makefile-syft-container-tag","key":"anchore/syft","version":"v1.38.0"} +{"name":"makefile-syft-version","key":"docker.io/anchore/syft","version":"v1.38.0"} {"name":"osv-golang-release","key":"docker.io/library/golang","version":"1.25.4"} {"name":"shell-alpine-digest","key":"docker.io/library/alpine:3.22.2","version":"sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412"} {"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.10.0/.version-bump.yml new/regclient-0.11.0/.version-bump.yml --- old/regclient-0.10.0/.version-bump.yml 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/.version-bump.yml 2025-12-01 20:38:07.000000000 +0100 @@ -106,13 +106,14 @@ regexp: '^ARG ECR_HELPER_VER=(?P<Version>v?\d+\.\d+\.\d+)\s*$' sourceArgs: url: "https://github.com/awslabs/amazon-ecr-credential-helper.git" - # temp hack to back rev due to missing tag on sub-module + # get the version for the ecr-login nested package in the repo + filter: + expr: '^ecr-login/v?\d+\.\d+\.\d+$' + # sort and output only the version number without the package name prefix sort: method: "semver" - offset: 1 - # TODO: support templating the output of a filter in version-bump so versions on the sub-module can be used - # filter: - # expr: '^ecr-login/v?\d+\.\d+\.\d+$' + template: '{{ index (split . "/") 1 }}' + template: '{{ index (split .Version "/") 1 }}' docker-arg-gcr: <<: *git-tag-semver scanArgs: @@ -161,7 +162,7 @@ sourceArgs: url: "https://github.com/sigstore/cosign.git" filter: - expr: '^v?2\.\d+\.\d+$' # pin to v2 pending cosign-installer upgrade + expr: '^v?3\.\d+\.\d+$' # pin to v3, v4 will remove support for older clients gha-golang-matrix: <<: *registry-tag-semver key: "golang-matrix" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/CONTRIBUTING.md new/regclient-0.11.0/CONTRIBUTING.md --- old/regclient-0.10.0/CONTRIBUTING.md 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/CONTRIBUTING.md 2025-12-01 20:38:07.000000000 +0100 @@ -6,7 +6,7 @@ ## Reporting other issues -Please search for similar issues and if none are seen, report an issue at [github.com/regclient/regclient/issues](https://github.com/regclient/regclient/issues) +Please search for similar issues and if none are seen, report an issue at [github.com/regclient/regclient/issues](https://github.com/regclient/regclient/issues). ## Code style @@ -18,6 +18,12 @@ - Unit tests are strongly encouraged with a focus on test coverage of the successful path and common errors. - Linters and other style formatting tools are used, please run `make all` before committing any changes. +## LLM Policy + +This project expects all contributions to be developed by a human or created with a reproducible tool. +Developers using an AI/LLM tool to generate their contribution are expected to fully understand the entire contribution and the logic behind its design. +Contributions that appear to have been generated by an AI/LLM without a human review may result in a ban from future contributions to the project. + ## Pull requests PRs are welcome following the below guides: diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/Makefile new/regclient-0.11.0/Makefile --- old/regclient-0.10.0/Makefile 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/Makefile 2025-12-01 20:38:07.000000000 +0100 @@ -1,9 +1,9 @@ COMMANDS?=regctl regsync regbot BINARIES?=$(addprefix bin/,$(COMMANDS)) IMAGES?=$(addprefix docker-,$(COMMANDS)) -ARTIFACT_PLATFORMS?=linux-amd64 linux-arm64 linux-ppc64le linux-s390x darwin-amd64 darwin-arm64 windows-amd64.exe +ARTIFACT_PLATFORMS?=linux-amd64 linux-arm64 linux-ppc64le linux-s390x linux-riscv64 darwin-amd64 darwin-arm64 windows-amd64.exe freebsd-amd64 ARTIFACTS?=$(foreach cmd,$(addprefix artifacts/,$(COMMANDS)),$(addprefix $(cmd)-,$(ARTIFACT_PLATFORMS))) -TEST_PLATFORMS?=linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x +IMAGE_PLATFORMS?=linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,linux/riscv64 VCS_REPO?="https://github.com/regclient/regclient.git" VCS_REF?=$(shell git rev-list -1 HEAD) ifneq ($(shell git status --porcelain 2>/dev/null),) @@ -35,16 +35,16 @@ -u "$(shell id -u):$(shell id -g)" \ $(VER_BUMP_CONTAINER) endif -MARKDOWN_LINT_VER?=v0.18.1 +MARKDOWN_LINT_VER?=v0.19.1 GOFUMPT_VER?=v0.9.2 GOMAJOR_VER?=v0.15.0 GOSEC_VER?=v2.22.10 GO_VULNCHECK_VER?=v1.1.4 -OSV_SCANNER_VER?=v2.2.4 +OSV_SCANNER_VER?=v2.3.0 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.37.0 -SYFT_CONTAINER?=anchore/syft:v1.37.0@sha256:48d679480c6d272c1801cf30460556959c01d4826795be31d4fd8b53750b7d91 +SYFT_VERSION?=v1.38.0 +SYFT_CONTAINER?=anchore/syft:v1.38.0@sha256:825cad3a952c87676a6d07e9a3bb05ac9c401d598360070e970aa46d54c1727e ifneq "$(SYFT_CMD_VER)" "$(SYFT_VERSION)" SYFT=docker run --rm \ -v "$(shell pwd)/:$(shell pwd)/" -w "$(shell pwd)" \ @@ -53,7 +53,7 @@ endif STATICCHECK_VER?=v0.6.1 CI_DISTRIBUTION_VER?=3.0.0 -CI_ZOT_VER?=v2.1.10 +CI_ZOT_VER?=v2.1.11 .PHONY: .FORCE .FORCE: @@ -137,15 +137,15 @@ oci-image: $(addprefix oci-image-,$(COMMANDS)) ## Build reproducible images to an OCI Layout oci-image-%: bin/regctl .FORCE - PATH="$(PWD)/bin:$(PATH)" build/oci-image.sh -r scratch -i "$*" -p "$(TEST_PLATFORMS)" - PATH="$(PWD)/bin:$(PATH)" build/oci-image.sh -r alpine -i "$*" -p "$(TEST_PLATFORMS)" -b "alpine:3" + PATH="$(PWD)/bin:$(PATH)" build/oci-image.sh -r scratch -i "$*" -p "$(IMAGE_PLATFORMS)" + PATH="$(PWD)/bin:$(PATH)" build/oci-image.sh -r alpine -i "$*" -p "$(IMAGE_PLATFORMS)" -b "alpine:3" .PHONY: test-docker test-docker: $(addprefix test-docker-,$(COMMANDS)) ## Build multi-platform docker images (but do not tag) test-docker-%: - docker buildx build --platform="$(TEST_PLATFORMS)" -f build/Dockerfile.$*.buildkit . - docker buildx build --platform="$(TEST_PLATFORMS)" -f build/Dockerfile.$*.buildkit --target release-alpine . + docker buildx build --platform="$(IMAGE_PLATFORMS)" -f build/Dockerfile.$*.buildkit . + docker buildx build --platform="$(IMAGE_PLATFORMS)" -f build/Dockerfile.$*.buildkit --target release-alpine . .PHONY: ci ci: ci-distribution ci-zot ## Run CI tests against self hosted registries diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/Dockerfile.regbot new/regclient-0.11.0/build/Dockerfile.regbot --- old/regclient-0.10.0/build/Dockerfile.regbot 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/Dockerfile.regbot 2025-12-01 20:38:07.000000000 +0100 @@ -1,7 +1,7 @@ ARG REGISTRY=docker.io ARG ALPINE_VER=3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 ARG GO_VER=1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb -ARG ECR_HELPER_VER=v0.10.1 +ARG ECR_HELPER_VER=v0.11.0 ARG GCR_HELPER_VER=v2.1.30 ARG LUNAJSON_COMMIT=3d10600874527d71519b33ecbb314eb93ccd1df6 ARG SEMVER_COMMIT=a4b708ba243208d46e575da870af969dca46a94d @@ -9,20 +9,21 @@ FROM ${REGISTRY}/library/golang:${GO_VER} AS golang RUN apk add --no-cache \ - ca-certificates \ git \ make WORKDIR /src FROM golang AS build -RUN addgroup -g 1000 appuser \ - && adduser -u 1000 -G appuser -D appuser \ - && mkdir -p /home/appuser/.docker \ - && chown -R appuser /home/appuser COPY go.* /src/ RUN go mod download COPY . /src/ RUN make bin/regbot + +FROM build AS debug +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser USER appuser CMD [ "/src/bin/regbot" ] @@ -61,9 +62,12 @@ && ln -s lunajson.lua json.lua \ && SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}" sh -c 'find . -exec touch --date="@${SOURCE_DATE_EPOCH}" {} \;' -FROM build AS release-base -USER root -RUN mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ +FROM ${REGISTRY}/library/alpine:${ALPINE_VER} AS release-base +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser \ + && mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ && cp -a /etc/passwd /etc/group /output/etc/ \ && cp -a /etc/ssl/certs/ca-certificates.crt /output/etc/ssl/certs/ \ && cp -a /home/appuser /output/home/ \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/Dockerfile.regbot.buildkit new/regclient-0.11.0/build/Dockerfile.regbot.buildkit --- old/regclient-0.10.0/build/Dockerfile.regbot.buildkit 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/Dockerfile.regbot.buildkit 2025-12-01 20:38:07.000000000 +0100 @@ -3,7 +3,7 @@ ARG REGISTRY=docker.io ARG ALPINE_VER=3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 ARG GO_VER=1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb -ARG ECR_HELPER_VER=v0.10.1 +ARG ECR_HELPER_VER=v0.11.0 ARG GCR_HELPER_VER=v2.1.30 ARG LUNAJSON_COMMIT=3d10600874527d71519b33ecbb314eb93ccd1df6 ARG SEMVER_COMMIT=a4b708ba243208d46e575da870af969dca46a94d @@ -11,16 +11,11 @@ FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/golang:${GO_VER} AS golang RUN apk add --no-cache \ - ca-certificates \ git \ make WORKDIR /src FROM --platform=$BUILDPLATFORM golang AS build -RUN addgroup -g 1000 appuser \ - && adduser -u 1000 -G appuser -D appuser \ - && mkdir -p /home/appuser/.docker \ - && chown -R appuser /home/appuser COPY go.* /src/ ARG TARGETOS ARG TARGETARCH @@ -33,6 +28,12 @@ --mount=type=cache,id=goroot,target=/root/.cache/go-build \ GOOS=${TARGETOS} GOARCH=${TARGETARCH} \ make bin/regbot + +FROM --platform=$BUILDPLATFORM build AS debug +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser USER appuser CMD [ "bin/regbot" ] @@ -79,9 +80,12 @@ && ln -s lunajson.lua json.lua \ && SOURCE_DATE_EPOCH="${SOURCE_DATE_EPOCH:-$(date +%s)}" sh -c 'find . -exec touch --date="@${SOURCE_DATE_EPOCH}" {} \;' -FROM --platform=$BUILDPLATFORM build AS release-base -USER root -RUN mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ +FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/alpine:${ALPINE_VER} AS release-base +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser \ + && mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ && cp -a /etc/passwd /etc/group /output/etc/ \ && cp -a /etc/ssl/certs/ca-certificates.crt /output/etc/ssl/certs/ \ && cp -a /home/appuser /output/home/ \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/Dockerfile.regctl new/regclient-0.11.0/build/Dockerfile.regctl --- old/regclient-0.10.0/build/Dockerfile.regctl 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/Dockerfile.regctl 2025-12-01 20:38:07.000000000 +0100 @@ -1,26 +1,27 @@ ARG REGISTRY=docker.io ARG ALPINE_VER=3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 ARG GO_VER=1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb -ARG ECR_HELPER_VER=v0.10.1 +ARG ECR_HELPER_VER=v0.11.0 ARG GCR_HELPER_VER=v2.1.30 ARG VCS_VERSION=(devel) FROM ${REGISTRY}/library/golang:${GO_VER} AS golang RUN apk add --no-cache \ - ca-certificates \ git \ make WORKDIR /src FROM golang AS build -RUN addgroup -g 1000 appuser \ - && adduser -u 1000 -G appuser -D appuser \ - && mkdir -p /home/appuser/.regctl \ - && chown -R appuser /home/appuser/.regctl COPY go.* /src/ RUN go mod download COPY . /src/ RUN make bin/regctl + +FROM build AS debug +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker /home/appuser/.regctl \ + && chown -R appuser /home/appuser/ USER appuser CMD [ "bin/regctl" ] @@ -42,9 +43,12 @@ && ( cp "${GOPATH}/bin/docker-credential-gcr" /usr/local/bin/docker-credential-gcr \ || cp "${GOPATH}/bin/${TARGETOS}_${TARGETARCH}/docker-credential-gcr" /usr/local/bin/docker-credential-gcr ) -FROM build AS release-base -USER root -RUN mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ +FROM ${REGISTRY}/library/alpine:${ALPINE_VER} AS release-base +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker /home/appuser/.regctl \ + && chown -R appuser /home/appuser/ \ + && mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ && cp -a /etc/passwd /etc/group /output/etc/ \ && cp -a /etc/ssl/certs/ca-certificates.crt /output/etc/ssl/certs/ \ && cp -a /home/appuser /output/home/ \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/Dockerfile.regctl.buildkit new/regclient-0.11.0/build/Dockerfile.regctl.buildkit --- old/regclient-0.10.0/build/Dockerfile.regctl.buildkit 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/Dockerfile.regctl.buildkit 2025-12-01 20:38:07.000000000 +0100 @@ -3,22 +3,17 @@ ARG REGISTRY=docker.io ARG ALPINE_VER=3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 ARG GO_VER=1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb -ARG ECR_HELPER_VER=v0.10.1 +ARG ECR_HELPER_VER=v0.11.0 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 \ - ca-certificates \ git \ make WORKDIR /src FROM --platform=$BUILDPLATFORM golang AS build -RUN addgroup -g 1000 appuser \ - && adduser -u 1000 -G appuser -D appuser \ - && mkdir -p /home/appuser/.regctl \ - && chown -R appuser /home/appuser/.regctl COPY go.* /src/ ARG TARGETOS ARG TARGETARCH @@ -31,6 +26,12 @@ --mount=type=cache,id=goroot,target=/root/.cache/go-build \ GOOS=${TARGETOS} GOARCH=${TARGETARCH} \ make bin/regctl + +FROM --platform=$BUILDPLATFORM build AS debug +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker /home/appuser/.regctl \ + && chown -R appuser /home/appuser USER appuser CMD [ "bin/regctl" ] @@ -60,9 +61,12 @@ && ( cp "${GOPATH}/bin/docker-credential-gcr" /usr/local/bin/docker-credential-gcr \ || cp "${GOPATH}/bin/${TARGETOS}_${TARGETARCH}/docker-credential-gcr" /usr/local/bin/docker-credential-gcr ) -FROM --platform=$BUILDPLATFORM build AS release-base -USER root -RUN mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ +FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/alpine:${ALPINE_VER} AS release-base +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker /home/appuser/.regctl \ + && chown -R appuser /home/appuser \ + && mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ && cp -a /etc/passwd /etc/group /output/etc/ \ && cp -a /etc/ssl/certs/ca-certificates.crt /output/etc/ssl/certs/ \ && cp -a /home/appuser /output/home/ \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/Dockerfile.regsync new/regclient-0.11.0/build/Dockerfile.regsync --- old/regclient-0.10.0/build/Dockerfile.regsync 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/Dockerfile.regsync 2025-12-01 20:38:07.000000000 +0100 @@ -1,26 +1,27 @@ ARG REGISTRY=docker.io ARG ALPINE_VER=3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 ARG GO_VER=1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb -ARG ECR_HELPER_VER=v0.10.1 +ARG ECR_HELPER_VER=v0.11.0 ARG GCR_HELPER_VER=v2.1.30 ARG VCS_VERSION=(devel) FROM ${REGISTRY}/library/golang:${GO_VER} AS golang RUN apk add --no-cache \ - ca-certificates \ git \ make WORKDIR /src FROM golang AS build -RUN addgroup -g 1000 appuser \ - && adduser -u 1000 -G appuser -D appuser \ - && mkdir -p /home/appuser/.docker \ - && chown -R appuser /home/appuser COPY go.* /src/ RUN go mod download COPY . /src/ RUN make bin/regsync + +FROM build AS debug +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser USER appuser CMD [ "bin/regsync" ] @@ -42,9 +43,12 @@ && ( cp "${GOPATH}/bin/docker-credential-gcr" /usr/local/bin/docker-credential-gcr \ || cp "${GOPATH}/bin/${TARGETOS}_${TARGETARCH}/docker-credential-gcr" /usr/local/bin/docker-credential-gcr ) -FROM build AS release-base -USER root -RUN mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ +FROM ${REGISTRY}/library/alpine:${ALPINE_VER} AS release-base +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser \ + && mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ && cp -a /etc/passwd /etc/group /output/etc/ \ && cp -a /etc/ssl/certs/ca-certificates.crt /output/etc/ssl/certs/ \ && cp -a /home/appuser /output/home/ \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/Dockerfile.regsync.buildkit new/regclient-0.11.0/build/Dockerfile.regsync.buildkit --- old/regclient-0.10.0/build/Dockerfile.regsync.buildkit 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/Dockerfile.regsync.buildkit 2025-12-01 20:38:07.000000000 +0100 @@ -3,22 +3,17 @@ ARG REGISTRY=docker.io ARG ALPINE_VER=3.22.2@sha256:4b7ce07002c69e8f3d704a9c5d6fd3053be500b7f1c69fc0d80990c2ad8dd412 ARG GO_VER=1.25.4-alpine@sha256:d3f0cf7723f3429e3f9ed846243970b20a2de7bae6a5b66fc5914e228d831bbb -ARG ECR_HELPER_VER=v0.10.1 +ARG ECR_HELPER_VER=v0.11.0 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 \ - ca-certificates \ git \ make WORKDIR /src FROM --platform=$BUILDPLATFORM golang AS build -RUN addgroup -g 1000 appuser \ - && adduser -u 1000 -G appuser -D appuser \ - && mkdir -p /home/appuser/.docker \ - && chown -R appuser /home/appuser COPY go.* /src/ ARG TARGETOS ARG TARGETARCH @@ -31,6 +26,12 @@ --mount=type=cache,id=goroot,target=/root/.cache/go-build \ GOOS=${TARGETOS} GOARCH=${TARGETARCH} \ make bin/regsync + +FROM --platform=$BUILDPLATFORM build AS debug +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser USER appuser CMD [ "bin/regsync" ] @@ -60,9 +61,12 @@ && ( cp "${GOPATH}/bin/docker-credential-gcr" /usr/local/bin/docker-credential-gcr \ || cp "${GOPATH}/bin/${TARGETOS}_${TARGETARCH}/docker-credential-gcr" /usr/local/bin/docker-credential-gcr ) -FROM --platform=$BUILDPLATFORM build AS release-base -USER root -RUN mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ +FROM --platform=$BUILDPLATFORM ${REGISTRY}/library/alpine:${ALPINE_VER} AS release-base +RUN addgroup -g 1000 appuser \ + && adduser -u 1000 -G appuser -D appuser \ + && mkdir -p /home/appuser/.docker \ + && chown -R appuser /home/appuser \ + && mkdir -p /output/etc/ssl/certs/ /output/home /output/tmp /output/usr/local/bin \ && cp -a /etc/passwd /etc/group /output/etc/ \ && cp -a /etc/ssl/certs/ca-certificates.crt /output/etc/ssl/certs/ \ && cp -a /home/appuser /output/home/ \ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/build/oci-image.sh new/regclient-0.11.0/build/oci-image.sh --- old/regclient-0.10.0/build/oci-image.sh 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/build/oci-image.sh 2025-12-01 20:38:07.000000000 +0100 @@ -2,7 +2,7 @@ set -e image="regctl" -platforms="linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x" +platforms="linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x,linux/riscv64" base_name="" release="scratch" push_tags="" diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/cmd/regctl/completion.go new/regclient-0.11.0/cmd/regctl/completion.go --- old/regclient-0.10.0/cmd/regctl/completion.go 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/cmd/regctl/completion.go 2025-12-01 20:38:07.000000000 +0100 @@ -33,11 +33,11 @@ func completeArgPlatform(cmd *cobra.Command, args []string, toComplete string) ([]string, cobra.ShellCompDirective) { return []string{ - "local", "linux", "windows", + "local", "linux", "windows", "freebsd", "linux/amd64", "linux/386", "linux/arm/v5", "linux/arm/v6", "linux/arm/v7", "linux/arm64", "linux/mips64le", "linux/ppc64le", "linux/riscv64", "linux/s390x", - "windows/amd64", + "windows/amd64", "freebsd/amd64", }, cobra.ShellCompDirectiveNoFileComp } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/go.mod new/regclient-0.11.0/go.mod --- old/regclient-0.10.0/go.mod 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/go.mod 2025-12-01 20:38:07.000000000 +0100 @@ -4,8 +4,8 @@ require ( github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 - github.com/goccy/go-yaml v1.18.0 - github.com/klauspost/compress v1.18.1 + github.com/goccy/go-yaml v1.19.0 + github.com/klauspost/compress v1.18.2 github.com/olareg/olareg v0.1.2 github.com/opencontainers/go-digest v1.0.0 github.com/robfig/cron/v3 v3.0.1 @@ -14,7 +14,7 @@ github.com/ulikunitz/xz v0.5.15 github.com/yuin/gopher-lua v1.1.1 golang.org/x/sys v0.38.0 - golang.org/x/term v0.36.0 + golang.org/x/term v0.37.0 ) require ( diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/go.sum new/regclient-0.11.0/go.sum --- old/regclient-0.10.0/go.sum 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/go.sum 2025-12-01 20:38:07.000000000 +0100 @@ -4,12 +4,12 @@ github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 h1:UhxFibDNY/bfvqU5CAUmr9zpesgbU6SWc8/B4mflAE4= github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7/go.mod h1:cyGadeNEkKy96OOhEzfZl+yxihPEzKnqJwvfuSUqbZE= -github.com/goccy/go-yaml v1.18.0 h1:8W7wMFS12Pcas7KU+VVkaiCng+kG8QiFeFwzFb+rwuw= -github.com/goccy/go-yaml v1.18.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= +github.com/goccy/go-yaml v1.19.0 h1:EmkZ9RIsX+Uq4DYFowegAuJo8+xdX3T/2dwNPXbxEYE= +github.com/goccy/go-yaml v1.19.0/go.mod h1:XBurs7gK8ATbW4ZPGKgcbrY1Br56PdM69F7LkFRi1kA= github.com/inconshreveable/mousetrap v1.1.0 h1:wN+x4NVGpMsO7ErUn/mUI3vEoE6Jt13X2s0bqwp9tc8= github.com/inconshreveable/mousetrap v1.1.0/go.mod h1:vpF70FUmC8bwa3OWnCshd2FqLfsEA9PFc4w1p2J65bw= -github.com/klauspost/compress v1.18.1 h1:bcSGx7UbpBqMChDtsF28Lw6v/G94LPrrbMbdC3JH2co= -github.com/klauspost/compress v1.18.1/go.mod h1:ZQFFVG+MdnR0P+l6wpXgIL4NTtwiKIdBnrBd8Nrxr+0= +github.com/klauspost/compress v1.18.2 h1:iiPHWW0YrcFgpBYhsA6D1+fqHssJscY/Tm/y2Uqnapk= +github.com/klauspost/compress v1.18.2/go.mod h1:R0h/fSBs8DE4ENlcrlib3PsXS61voFxhIs2DeRhCvJ4= github.com/olareg/olareg v0.1.2 h1:75G8X6E9FUlzL/CSjgFcYfMgNzlc7CxULpUUNsZBIvI= github.com/olareg/olareg v0.1.2/go.mod h1:TWs+N6pO1S4bdB6eerzUm/ITRQ6kw91mVf9ZYeGtw+Y= github.com/opencontainers/go-digest v1.0.0 h1:apOUWs51W5PlhuyGyz9FCeeBIOUDA/6nW8Oi/yOhh5U= @@ -36,8 +36,8 @@ golang.org/x/sys v0.0.0-20220715151400-c0bba94af5f8/go.mod h1:oPkhp1MJrh7nUepCBck5+mAzfO9JrbApNNgaTdGDITg= golang.org/x/sys v0.38.0 h1:3yZWxaJjBmCWXqhN1qh02AkOnCQ1poK6oF+a7xWL6Gc= golang.org/x/sys v0.38.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= -golang.org/x/term v0.36.0 h1:zMPR+aF8gfksFprF/Nc/rd1wRS1EI6nDBGyWAvDzx2Q= -golang.org/x/term v0.36.0/go.mod h1:Qu394IJq6V6dCBRgwqshf3mPF85AqzYEzofzRdZkWss= +golang.org/x/term v0.37.0 h1:8EGAD0qCmHYZg6J17DvsMy9/wJ7/D/4pV/wfnld5lTU= +golang.org/x/term v0.37.0/go.mod h1:5pB4lxRNYYVZuTLmy8oR2BH8dflOR+IbTYFD8fi3254= 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.10.0/release.md new/regclient-0.11.0/release.md --- old/regclient-0.10.0/release.md 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/release.md 2025-12-01 20:38:07.000000000 +0100 @@ -1,46 +1,30 @@ -# Release v0.10.0 +# Release v0.11.0 Features: -- Feat: Support DOCKER_AUTH_CONFIG variable. ([PR 996][pr-996]) -- Feat: Add regctl repo copy. ([PR 997][pr-997]) -- Feat: regsync support for semantic versioning(semver) for matching tags ([PR 1005][pr-1005]) -- Feat: Add `tagSets` to regsync. ([PR 1008][pr-1008]) - -Changes: - -- Chore: Add go:fix lines to deprecated code. ([PR 994][pr-994]) -- Chore: Add gofumpt to the build. ([PR 995][pr-995]) -- Chore: Remove the unused bps field. ([PR 998][pr-998]) -- Fix: Handle semver compare of numeric prerelease ([PR 1007][pr-1007]) - -Security: - -- CVE-2025-58187: Fixed with Go upgrade (<https://osv.dev/GO-2025-4007>). -- CVE-2025-58189: Fixed with Go upgrade (<https://osv.dev/GO-2025-4008>). -- CVE-2025-61723: Fixed with Go upgrade (<https://osv.dev/GO-2025-4009>). -- CVE-2025-47912: Fixed with Go upgrade (<https://osv.dev/GO-2025-4010>). -- CVE-2025-58185: Fixed with Go upgrade (<https://osv.dev/GO-2025-4011>). -- CVE-2025-58186: Fixed with Go upgrade (<https://osv.dev/GO-2025-4012>). -- CVE-2025-58188: Fixed with Go upgrade (<https://osv.dev/GO-2025-4013>). -- CVE-2025-58183: Fixed with Go upgrade (<https://osv.dev/GO-2025-4014>). -- CVE-2025-9230: Fixed with Alpine image upgrade. -- CVE-2025-9230: Fixed with Alpine image upgrade. -- CVE-2025-9232: Fixed with Alpine image upgrade. -- CVE-2025-9232: Fixed with Alpine image upgrade. -- CVE-2025-9231: Fixed with Alpine image upgrade. -- CVE-2025-9231: Fixed with Alpine image upgrade. +- Build artifacts for riscv64. ([PR 1011][pr-1011]) +- Generate FreeBSD amd64 binaries. ([PR 1013][pr-1013]) +- Add support for cosign v3 bundles. ([PR 1018][pr-1018]) + +Fixes: + +- Fix ECR Helper version pin. ([PR 1017][pr-1017]) +- Fix the cosign use-signing-config flag. ([PR 1019][pr-1019]) +- Improve reproducibility in Dockerfiles. ([PR 1020][pr-1020]) + +Other Changes: + +- Add a policy for LLM generated contributions. ([PR 1016][pr-1016]) Contributors: -- @daimoniac +- @ffgan - @sudo-bmitch -[pr-994]: https://github.com/regclient/regclient/pull/994 -[pr-995]: https://github.com/regclient/regclient/pull/995 -[pr-996]: https://github.com/regclient/regclient/pull/996 -[pr-997]: https://github.com/regclient/regclient/pull/997 -[pr-998]: https://github.com/regclient/regclient/pull/998 -[pr-1005]: https://github.com/regclient/regclient/pull/1005 -[pr-1007]: https://github.com/regclient/regclient/pull/1007 -[pr-1008]: https://github.com/regclient/regclient/pull/1008 +[pr-1011]: https://github.com/regclient/regclient/pull/1011 +[pr-1013]: https://github.com/regclient/regclient/pull/1013 +[pr-1016]: https://github.com/regclient/regclient/pull/1016 +[pr-1017]: https://github.com/regclient/regclient/pull/1017 +[pr-1018]: https://github.com/regclient/regclient/pull/1018 +[pr-1019]: https://github.com/regclient/regclient/pull/1019 +[pr-1020]: https://github.com/regclient/regclient/pull/1020 diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/types/platform/compare.go new/regclient-0.11.0/types/platform/compare.go --- old/regclient-0.10.0/types/platform/compare.go 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/types/platform/compare.go 2025-12-01 20:38:07.000000000 +0100 @@ -77,7 +77,7 @@ // This accounts for Docker Desktop for Mac and Windows using a Linux VM. func (c *compare) Compatible(target Platform) bool { (&target).normalize() - if c.host.OS == "linux" { + if c.host.OS == "linux" || c.host.OS == "freebsd" { return c.host.OS == target.OS && c.host.Architecture == target.Architecture && variantCompatible(c.host.Variant, target.Variant) } else if c.host.OS == "windows" { @@ -109,7 +109,7 @@ if c.host.OS != target.OS { return false } - if c.host.OS == "linux" { + if c.host.OS == "linux" || c.host.OS == "freebsd" { return c.host.Architecture == target.Architecture && c.host.Variant == target.Variant } else if c.host.OS == "windows" { return c.host.Architecture == target.Architecture && c.host.Variant == target.Variant && diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/regclient-0.10.0/types/platform/compare_test.go new/regclient-0.11.0/types/platform/compare_test.go --- old/regclient-0.10.0/types/platform/compare_test.go 2025-11-09 21:27:16.000000000 +0100 +++ new/regclient-0.11.0/types/platform/compare_test.go 2025-12-01 20:38:07.000000000 +0100 @@ -123,6 +123,31 @@ expectBetter: false, }, { + name: "freebsd host", + host: Platform{OS: "freebsd", Architecture: "amd64"}, + target: Platform{OS: "linux", Architecture: "amd64"}, + expectMatch: false, + expectCompat: false, + expectBetter: false, + }, + { + name: "freebsd match", + host: Platform{OS: "freebsd", Architecture: "amd64", Variant: "v2"}, + target: Platform{OS: "freebsd", Architecture: "amd64", Variant: "v2"}, + prev: Platform{OS: "freebsd", Architecture: "amd64"}, + expectMatch: true, + expectCompat: true, + expectBetter: true, + }, + { + name: "freebsd target", + host: Platform{OS: "linux", Architecture: "amd64"}, + target: Platform{OS: "freebsd", Architecture: "amd64"}, + expectMatch: false, + expectCompat: false, + expectBetter: false, + }, + { name: "windows compatible", host: Platform{OS: "windows", Architecture: "amd64"}, target: Platform{OS: "linux", Architecture: "amd64"}, ++++++ regclient.obsinfo ++++++ --- /var/tmp/diff_new_pack.WjNiAh/_old 2025-12-05 16:53:16.367946709 +0100 +++ /var/tmp/diff_new_pack.WjNiAh/_new 2025-12-05 16:53:16.371946876 +0100 @@ -1,5 +1,5 @@ name: regclient -version: 0.10.0 -mtime: 1762720036 -commit: c3de9bb7b04ad3cd96bb73bc0c72986b83572d12 +version: 0.11.0 +mtime: 1764617887 +commit: 9a4fd6b957345e2f625f0c18dfbea4db59fc2b23 ++++++ vendor.tar.gz ++++++ diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/ast/ast.go new/vendor/github.com/goccy/go-yaml/ast/ast.go --- old/vendor/github.com/goccy/go-yaml/ast/ast.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/ast/ast.go 2025-12-01 20:38:07.000000000 +0100 @@ -1450,16 +1450,25 @@ } return fmt.Sprintf("%s%s: %s", space, n.Key.String(), value) } else if keyIndentLevel < valueIndentLevel && !n.IsFlowStyle { + valueStr := n.Value.String() + // For flow-style values indented on the next line, we need to add the proper indentation + if m, ok := n.Value.(*MappingNode); ok && m.IsFlowStyle { + valueIndent := strings.Repeat(" ", n.Value.GetToken().Position.Column-1) + valueStr = valueIndent + valueStr + } else if s, ok := n.Value.(*SequenceNode); ok && s.IsFlowStyle { + valueIndent := strings.Repeat(" ", n.Value.GetToken().Position.Column-1) + valueStr = valueIndent + valueStr + } if keyComment != nil { return fmt.Sprintf( "%s%s: %s\n%s", space, n.Key.stringWithoutComment(), keyComment.String(), - n.Value.String(), + valueStr, ) } - return fmt.Sprintf("%s%s:\n%s", space, n.Key.String(), n.Value.String()) + return fmt.Sprintf("%s%s:\n%s", space, n.Key.String(), valueStr) } else if m, ok := n.Value.(*MappingNode); ok && (m.IsFlowStyle || len(m.Values) == 0) { return fmt.Sprintf("%s%s: %s", space, n.Key.String(), n.Value.String()) } else if s, ok := n.Value.(*SequenceNode); ok && (s.IsFlowStyle || len(s.Values) == 0) { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/decode.go new/vendor/github.com/goccy/go-yaml/decode.go --- old/vendor/github.com/goccy/go-yaml/decode.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/decode.go 2025-12-01 20:38:07.000000000 +0100 @@ -40,6 +40,7 @@ isResolvedReference bool validator StructValidator disallowUnknownField bool + allowedFieldPrefixes []string allowDuplicateMapKey bool useOrderedMap bool useJSONUnmarshaler bool @@ -1446,12 +1447,21 @@ // Unknown fields are expected (they could be fields from the parent struct). if len(unknownFields) != 0 && d.disallowUnknownField && src.GetToken() != nil { for key, node := range unknownFields { - return errors.ErrUnknownField(fmt.Sprintf(`unknown field "%s"`, key), node.GetToken()) + var ok bool + for _, prefix := range d.allowedFieldPrefixes { + if strings.HasPrefix(key, prefix) { + ok = true + break + } + } + if !ok { + return errors.ErrUnknownField(fmt.Sprintf(`unknown field "%s"`, key), node.GetToken()) + } } } if d.validator != nil { - if err := d.validator.Struct(dst.Addr().Interface()); err != nil { + if err := d.validator.Struct(dst.Interface()); err != nil { ev := reflect.ValueOf(err) if ev.Type().Kind() == reflect.Slice { for i := 0; i < ev.Len(); i++ { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/encode.go new/vendor/github.com/goccy/go-yaml/encode.go --- old/vendor/github.com/goccy/go-yaml/encode.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/encode.go 2025-12-01 20:38:07.000000000 +0100 @@ -712,9 +712,15 @@ anchorNode.Value = encoded encoded = anchorNode } + + kn, err := e.encodeValue(ctx, reflect.ValueOf(key), column) + keyNode, ok := kn.(ast.MapKeyNode) + if !ok || err != nil { + keyNode = e.encodeString(fmt.Sprint(key), column) + } node.Values = append(node.Values, ast.MappingValue( nil, - e.encodeString(keyText, column), + keyNode, encoded, )) e.setSmartAnchor(vRef, keyText) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/option.go new/vendor/github.com/goccy/go-yaml/option.go --- old/vendor/github.com/goccy/go-yaml/option.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/option.go 2025-12-01 20:38:07.000000000 +0100 @@ -69,6 +69,15 @@ } } +// AllowFieldPrefixes, when paired with [DisallowUnknownField], allows fields +// with the specified prefixes to bypass the unknown field check. +func AllowFieldPrefixes(prefixes ...string) DecodeOption { + return func(d *Decoder) error { + d.allowedFieldPrefixes = append(d.allowedFieldPrefixes, prefixes...) + return nil + } +} + // AllowDuplicateMapKey ignore syntax error when mapping keys that are duplicates. func AllowDuplicateMapKey() DecodeOption { return func(d *Decoder) error { diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/path.go new/vendor/github.com/goccy/go-yaml/path.go --- old/vendor/github.com/goccy/go-yaml/path.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/path.go 2025-12-01 20:38:07.000000000 +0100 @@ -258,6 +258,10 @@ // FilterFile filter from ast.File by YAMLPath. func (p *Path) FilterFile(f *ast.File) (ast.Node, error) { for _, doc := range f.Docs { + // For simplicity, directives cannot be the target of operations + if doc.Body != nil && doc.Body.Type() == ast.DirectiveType { + continue + } node, err := p.FilterNode(doc.Body) if err != nil { return nil, err @@ -352,6 +356,10 @@ // ReplaceNode replace ast.File with ast.Node. func (p *Path) ReplaceWithNode(dst *ast.File, node ast.Node) error { for _, doc := range dst.Docs { + // For simplicity, directives cannot be the target of operations + if doc.Body != nil && doc.Body.Type() == ast.DirectiveType { + continue + } if node.Type() == ast.DocumentType { node = node.(*ast.DocumentNode).Body } @@ -364,7 +372,7 @@ // AnnotateSource add annotation to passed source ( see section 5.1 in README.md ). func (p *Path) AnnotateSource(source []byte, colored bool) ([]byte, error) { - file, err := parser.ParseBytes([]byte(source), 0) + file, err := parser.ParseBytes(source, 0) if err != nil { return nil, err } diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/scanner/scanner.go new/vendor/github.com/goccy/go-yaml/scanner/scanner.go --- old/vendor/github.com/goccy/go-yaml/scanner/scanner.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/scanner/scanner.go 2025-12-01 20:38:07.000000000 +0100 @@ -777,6 +777,15 @@ func (s *Scanner) scanMultiLine(ctx *Context, c rune) error { state := ctx.getMultiLineState() ctx.addOriginBuf(c) + // normalize CR and CRLF to LF + if c == '\r' { + if ctx.nextChar() == '\n' { + ctx.addOriginBuf('\n') + s.progress(ctx, 1) + s.offset++ + } + c = '\n' + } if ctx.isEOS() { if s.isFirstCharAtLine && c == ' ' { state.addIndent(ctx, s.column) @@ -1148,14 +1157,25 @@ s.progress(ctx, 1) // skip '|' or '>' character var progress int + var crlf bool for idx, c := range ctx.src[ctx.idx:] { progress = idx ctx.addOriginBuf(c) if s.isNewLineChar(c) { + nextIdx := ctx.idx + idx + 1 + if c == '\r' && nextIdx < len(ctx.src) && ctx.src[nextIdx] == '\n' { + crlf = true + continue // process \n in the next iteration + } break } } - value := strings.TrimRight(ctx.source(ctx.idx, ctx.idx+progress), " ") + endPos := ctx.idx + progress + if crlf { + // Exclude \r + endPos = endPos - 1 + } + value := strings.TrimRight(ctx.source(ctx.idx, endPos), " ") commentValueIndex := strings.Index(value, "#") opt := value if commentValueIndex > 0 { @@ -1189,7 +1209,7 @@ ctx.setFolded(s.lastDelimColumn, opt) } if commentIndex > 0 { - comment := string(value[commentValueIndex+1:]) + comment := value[commentValueIndex+1:] s.offset += len(headerBuf) s.column += len(headerBuf) ctx.addToken(token.Comment(comment, string(ctx.obuf[len(headerBuf):]), s.pos())) diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/goccy/go-yaml/yaml.go new/vendor/github.com/goccy/go-yaml/yaml.go --- old/vendor/github.com/goccy/go-yaml/yaml.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/goccy/go-yaml/yaml.go 2025-12-01 20:38:07.000000000 +0100 @@ -324,3 +324,34 @@ return unmarshaler(ctx, v.(*T), b) } } + +// RawMessage is a raw encoded YAML value. It implements [BytesMarshaler] and +// [BytesUnmarshaler] and can be used to delay YAML decoding or precompute a YAML +// encoding. +// It also implements [json.Marshaler] and [json.Unmarshaler]. +// +// This is similar to [json.RawMessage] in the stdlib. +type RawMessage []byte + +func (m RawMessage) MarshalYAML() ([]byte, error) { + if m == nil { + return []byte("null"), nil + } + return m, nil +} + +func (m *RawMessage) UnmarshalYAML(dt []byte) error { + if m == nil { + return errors.New("yaml.RawMessage: UnmarshalYAML on nil pointer") + } + *m = append((*m)[0:0], dt...) + return nil +} + +func (m *RawMessage) UnmarshalJSON(b []byte) error { + return m.UnmarshalYAML(b) +} + +func (m RawMessage) MarshalJSON() ([]byte, error) { + return YAMLToJSON(m) +} diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/github.com/klauspost/compress/README.md new/vendor/github.com/klauspost/compress/README.md --- old/vendor/github.com/klauspost/compress/README.md 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/github.com/klauspost/compress/README.md 2025-12-01 20:38:07.000000000 +0100 @@ -27,6 +27,16 @@ # changelog +* Oct 20, 2025 - [1.18.1](https://github.com/klauspost/compress/releases/tag/v1.18.1) + * zstd: Add simple zstd EncodeTo/DecodeTo functions https://github.com/klauspost/compress/pull/1079 + * zstd: Fix incorrect buffer size in dictionary encodes https://github.com/klauspost/compress/pull/1059 + * s2: check for cap, not len of buffer in EncodeBetter/Best by @vdarulis in https://github.com/klauspost/compress/pull/1080 + * zlib: Avoiding extra allocation in zlib.reader.Reset by @travelpolicy in https://github.com/klauspost/compress/pull/1086 + * gzhttp: remove redundant err check in zstdReader by @ryanfowler in https://github.com/klauspost/compress/pull/1090 + * flate: Faster load+store https://github.com/klauspost/compress/pull/1104 + * flate: Simplify matchlen https://github.com/klauspost/compress/pull/1101 + * flate: Use exact sizes for huffman tables https://github.com/klauspost/compress/pull/1103 + * Feb 19th, 2025 - [1.18.0](https://github.com/klauspost/compress/releases/tag/v1.18.0) * Add unsafe little endian loaders https://github.com/klauspost/compress/pull/1036 * fix: check `r.err != nil` but return a nil value error `err` by @alingse in https://github.com/klauspost/compress/pull/1028 @@ -36,6 +46,9 @@ * flate: Fix matchlen L5+L6 https://github.com/klauspost/compress/pull/1049 * flate: Cleanup & reduce casts https://github.com/klauspost/compress/pull/1050 +<details> + <summary>See changes to v1.17.x</summary> + * Oct 11th, 2024 - [1.17.11](https://github.com/klauspost/compress/releases/tag/v1.17.11) * zstd: Fix extra CRC written with multiple Close calls https://github.com/klauspost/compress/pull/1017 * s2: Don't use stack for index tables https://github.com/klauspost/compress/pull/1014 @@ -102,7 +115,8 @@ * s2: Do 2 overlapping match checks https://github.com/klauspost/compress/pull/839 * flate: Add amd64 assembly matchlen https://github.com/klauspost/compress/pull/837 * gzip: Copy bufio.Reader on Reset by @thatguystone in https://github.com/klauspost/compress/pull/860 - + +</details> <details> <summary>See changes to v1.16.x</summary> @@ -669,3 +683,4 @@ # license This code is licensed under the same conditions as the original Go code. See LICENSE file. + diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/golang.org/x/term/terminal.go new/vendor/golang.org/x/term/terminal.go --- old/vendor/golang.org/x/term/terminal.go 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/golang.org/x/term/terminal.go 2025-12-01 20:38:07.000000000 +0100 @@ -413,7 +413,7 @@ } } -// countToLeftWord returns then number of characters from the cursor to the +// countToLeftWord returns the number of characters from the cursor to the // start of the previous word. func (t *Terminal) countToLeftWord() int { if t.pos == 0 { @@ -438,7 +438,7 @@ return t.pos - pos } -// countToRightWord returns then number of characters from the cursor to the +// countToRightWord returns the number of characters from the cursor to the // start of the next word. func (t *Terminal) countToRightWord() int { pos := t.pos @@ -478,7 +478,7 @@ return length } -// histroryAt unlocks the terminal and relocks it while calling History.At. +// historyAt unlocks the terminal and relocks it while calling History.At. func (t *Terminal) historyAt(idx int) (string, bool) { t.lock.Unlock() // Unlock to avoid deadlock if History methods use the output writer. defer t.lock.Lock() // panic in At (or Len) protection. diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn' '--exclude=.svnignore' old/vendor/modules.txt new/vendor/modules.txt --- old/vendor/modules.txt 2025-11-09 21:27:16.000000000 +0100 +++ new/vendor/modules.txt 2025-12-01 20:38:07.000000000 +0100 @@ -1,7 +1,7 @@ # github.com/docker/libtrust v0.0.0-20160708172513-aabc10ec26b7 ## explicit github.com/docker/libtrust -# github.com/goccy/go-yaml v1.18.0 +# github.com/goccy/go-yaml v1.19.0 ## explicit; go 1.21.0 github.com/goccy/go-yaml github.com/goccy/go-yaml/ast @@ -15,7 +15,7 @@ # github.com/inconshreveable/mousetrap v1.1.0 ## explicit; go 1.18 github.com/inconshreveable/mousetrap -# github.com/klauspost/compress v1.18.1 +# github.com/klauspost/compress v1.18.2 ## explicit; go 1.23 github.com/klauspost/compress github.com/klauspost/compress/fse @@ -66,6 +66,6 @@ golang.org/x/sys/plan9 golang.org/x/sys/unix golang.org/x/sys/windows -# golang.org/x/term v0.36.0 +# golang.org/x/term v0.37.0 ## explicit; go 1.24.0 golang.org/x/term
