Script 'mail_helper' called by obssrc
Hello community,
here is the log from the commit of package ca-certificates for openSUSE:Factory
checked in at 2026-07-17 20:38:16
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Comparing /work/SRC/openSUSE:Factory/ca-certificates (Old)
and /work/SRC/openSUSE:Factory/.ca-certificates.new.24530 (New)
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "ca-certificates"
Fri Jul 17 20:38:16 2026 rev:58 rq:1366313 version:2+git20260717.2e3a23b
Changes:
--------
--- /work/SRC/openSUSE:Factory/ca-certificates/ca-certificates.changes
2026-04-21 12:42:38.432992685 +0200
+++
/work/SRC/openSUSE:Factory/.ca-certificates.new.24530/ca-certificates.changes
2026-07-17 20:38:17.686107638 +0200
@@ -1,0 +2,20 @@
+Fri Jul 17 06:18:20 UTC 2026 - Thorsten Kukuk <[email protected]>
+
+- Update to version 2+git20260717.2e3a23b:
+ * Fix for 458d37d, logic got wrong
+
+-------------------------------------------------------------------
+Wed Jul 08 12:18:26 UTC 2026 - Thorsten Kukuk <[email protected]>
+
+- Update to version 2+git20260708.2380cdb:
+ * Remove duplicate I from help text
+ * Blacken test_update_ca_certificates
+ * Replace backticks in shell scripts
+ * Unify quoting in shell scripts
+ * Refactor to POSIX sh
+ * Reduce slashes in shell paths
+ * Unify indentation style in shell scripts
+ * CI: remove black format check and update actions
+ * CI: create /etc/ca-certificates in the container
+
+-------------------------------------------------------------------
Old:
----
ca-certificates-2+git20260420.2a8e251.obscpio
New:
----
ca-certificates-2+git20260717.2e3a23b.obscpio
++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Other differences:
------------------
++++++ ca-certificates.spec ++++++
--- /var/tmp/diff_new_pack.jpl8iY/_old 2026-07-17 20:38:18.626139475 +0200
+++ /var/tmp/diff_new_pack.jpl8iY/_new 2026-07-17 20:38:18.630139611 +0200
@@ -35,7 +35,7 @@
%bcond_without cabundle
Name: ca-certificates
-Version: 2+git20260420.2a8e251%{git_version}
+Version: 2+git20260717.2e3a23b%{git_version}
Release: 0
Summary: Utilities for system wide CA certificate installation
License: GPL-2.0-or-later
++++++ _servicedata ++++++
--- /var/tmp/diff_new_pack.jpl8iY/_old 2026-07-17 20:38:18.690141643 +0200
+++ /var/tmp/diff_new_pack.jpl8iY/_new 2026-07-17 20:38:18.694141778 +0200
@@ -3,6 +3,6 @@
<param
name="url">http://github.com/openSUSE/ca-certificates.git</param>
<param
name="changesrevision">d16f02666b959e10f5bc64b6ab26b398f388ad0b</param></service><service
name="tar_scm">
<param
name="url">https://github.com/openSUSE/ca-certificates.git</param>
- <param
name="changesrevision">2a8e251e80f98a899069d6fb7e0fc7acaf2807ef</param></service></servicedata>
+ <param
name="changesrevision">2e3a23b5e6aa7bf6ce0a260efc23cae7f14db276</param></service></servicedata>
(No newline at EOF)
++++++ ca-certificates-2+git20260420.2a8e251.obscpio ->
ca-certificates-2+git20260717.2e3a23b.obscpio ++++++
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ca-certificates-2+git20260420.2a8e251/.github/workflows/ci.yml
new/ca-certificates-2+git20260717.2e3a23b/.github/workflows/ci.yml
--- old/ca-certificates-2+git20260420.2a8e251/.github/workflows/ci.yml
2026-04-20 09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/.github/workflows/ci.yml
2026-07-17 08:17:47.000000000 +0200
@@ -8,27 +8,14 @@
pull_request:
jobs:
- format:
- name: Ensure code is black formatted
- runs-on: ubuntu-latest
- steps:
- - name: checkout source code
- uses: actions/checkout@v2
- - name: set up Python
- uses: actions/setup-python@v2
- - name: install dependencies
- run: pip install --user black
- - name: run tests
- run: black --check --diff *py
-
tests:
name: Test containers
runs-on: ubuntu-latest
steps:
- name: checkout source code
- uses: actions/checkout@v2
+ uses: actions/checkout@v6
- name: set up Python
- uses: actions/setup-python@v2
+ uses: actions/setup-python@v6
- name: install dependencies
run: pip install --user pytest-xdist testinfra
- name: run tests
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ca-certificates-2+git20260420.2a8e251/certbundle.run
new/ca-certificates-2+git20260717.2e3a23b/certbundle.run
--- old/ca-certificates-2+git20260420.2a8e251/certbundle.run 2026-04-20
09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/certbundle.run 2026-07-17
08:17:47.000000000 +0200
@@ -1,26 +1,32 @@
-#!/bin/bash
-# vim: syntax=sh
+#!/bin/sh
+# vim: syntax=sh noexpandtab
set -e
[ -d "$statedir" ]
-cafile="$destdir/$statedir/ca-bundle.pem"
-cadir="$destdir/$statedir/pem"
+cafile="${destdir}${statedir}/ca-bundle.pem"
+cadir="${destdir}${statedir}/pem"
for i in "$@"; do
- if [ "$i" = "-f" ]; then
- fresh=1
- elif [ "$i" = "-v" ]; then
- verbose=1
- fi
+ if [ "$i" = "-f" ]; then
+ fresh=1
+ elif [ "$i" = "-v" ]; then
+ verbose=1
+ fi
done
-if [ -z "$fresh" -a "$cafile" -nt "$cadir" ]; then
- exit 0
+last_modified()
+{
+ # -c is available in both busybox and coreutils
+ stat -c '%Y' "$1"
+}
+
+if [ -z "$fresh" ] && [ "$(last_modified "$cafile")" -gt "$(last_modified
"$cadir")" ]; then
+ exit 0
fi
[ -z "$verbose" ] || echo "creating $cafile ..."
-trust extract --format=pem-bundle --purpose=server-auth --filter=ca-anchors
--overwrite $cafile.tmp
-cat - $cafile.tmp > "$cafile.new" <<EOF
+trust extract --format=pem-bundle --purpose=server-auth --filter=ca-anchors
--overwrite "$cafile.tmp"
+cat - "$cafile.tmp" > "$cafile.new" <<EOF
#
# automatically created by $0. Do not edit!
#
@@ -33,10 +39,10 @@
# - gnutls: gnutls_certificate_set_x509_system_trust(cred)
#
EOF
-rm -f $cafile.tmp
+rm -f "$cafile.tmp"
mv -f "$cafile.new" "$cafile"
-if ! test -e $destdir/etc/ssl/ca-bundle.pem && ! test -L
$destdir/etc/ssl/ca-bundle.pem; then
- [ -z "$verbose" ] || echo "restoring $destdir/etc/ssl/ca-bundle.pem ..."
- install -d -m 0755 $destdir/etc/ssl
- ln -s ../../var/lib/ca-certificates/ca-bundle.pem
$destdir/etc/ssl/ca-bundle.pem
+if ! test -e "$destdir"/etc/ssl/ca-bundle.pem && ! test -L
"$destdir"/etc/ssl/ca-bundle.pem; then
+ [ -z "$verbose" ] || echo "restoring $destdir/etc/ssl/ca-bundle.pem ..."
+ install -d -m 0755 "$destdir"/etc/ssl
+ ln -s ../../var/lib/ca-certificates/ca-bundle.pem
"$destdir"/etc/ssl/ca-bundle.pem
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ca-certificates-2+git20260420.2a8e251/conftest.py
new/ca-certificates-2+git20260717.2e3a23b/conftest.py
--- old/ca-certificates-2+git20260420.2a8e251/conftest.py 2026-04-20
09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/conftest.py 2026-07-17
08:17:47.000000000 +0200
@@ -4,7 +4,6 @@
import pytest
import testinfra
-
TUMBLEWEED_CONTAINER = ["registry.opensuse.org/opensuse/tumbleweed:latest"]
LEAP_CONTAINERS = [
"registry.opensuse.org/opensuse/leap:15.3",
@@ -82,6 +81,18 @@
],
)
+ # Create hook directories needed by tests
+ subprocess.check_call(
+ [
+ "podman",
+ "exec",
+ container_id,
+ "mkdir",
+ "-p",
+ "/etc/ca-certificates/update.d",
+ ]
+ )
+
yield testinfra.get_host(f"podman://{container_id}")
subprocess.check_call(["podman", "rm", "-f", container_id])
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ca-certificates-2+git20260420.2a8e251/etc_ssl.run
new/ca-certificates-2+git20260717.2e3a23b/etc_ssl.run
--- old/ca-certificates-2+git20260420.2a8e251/etc_ssl.run 2026-04-20
09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/etc_ssl.run 2026-07-17
08:17:47.000000000 +0200
@@ -1,5 +1,5 @@
-#!/bin/bash -e
-# vim:syntax=sh
+#!/bin/sh -e
+# vim:syntax=sh noexpandtab
#
# Copyright (c) 2010,2013 SUSE Linux Products GmbH
# Copyright (c) 2020 SUSE LLC
@@ -29,32 +29,32 @@
help_and_exit()
{
- cat <<-EOF
- USAGE: $0 [OPTIONS]
- OPTIIONS:
- --verbose, -v verbose output
- --fresh, -f start from scratch
- --help, -h this screen
-EOF
- exit 0
+ cat <<-EOF
+ USAGE: $0 [OPTIONS]
+ OPTIONS:
+ --verbose, -v verbose output
+ --fresh, -f start from scratch
+ --help, -h this screen
+ EOF
+ exit 0
}
case "$1" in
- -v|--verbose) verbose='-v'; shift ;;
- -f|--fresh) fresh='-f'; shift ;;
- -h|--help) help_and_exit ;;
- -*) echo "invalid option: $1" >&2; exit 1 ;;
+ -v|--verbose) verbose='-v'; shift ;;
+ -f|--fresh) fresh='-f'; shift ;;
+ -h|--help) help_and_exit ;;
+ -*) echo "invalid option: $1" >&2; exit 1 ;;
esac
install -d -m 0755 "${destdir}$pemdir"
trust extract --purpose=server-auth --filter=ca-anchors
--format=pem-directory-hash -f "${destdir}$pemdir"
# fix up /etc/ssl/certs if it's not a link pointing to
/var/lib/ca-certificates/pem
-if ! [ -L "$etccertsdir" -a "`readlink $etccertsdir`" = "../..$pemdir" ]; then
- [ -z "$verbose" ] || echo "restoring $etccertsdir ..."
- if [ -d "$etccertsdir" ]; then
- mv -Tv --backup=numbered "$etccertsdir" "$etccertsdir.old"
- fi
- install -d -m 0755 "${etccertsdir%/*}"
- ln -Tsv --backup=numbered "../..$pemdir" "$etccertsdir"
+if ! { [ -L "$etccertsdir" ] && [ "$(readlink "$etccertsdir")" =
"../..$pemdir" ]; }; then
+ [ -z "$verbose" ] || echo "restoring $etccertsdir ..."
+ if [ -d "$etccertsdir" ]; then
+ mv -Tv --backup=numbered "$etccertsdir" "$etccertsdir.old"
+ fi
+ install -d -m 0755 "${etccertsdir%/*}"
+ ln -Tsv --backup=numbered "../..$pemdir" "$etccertsdir"
fi
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ca-certificates-2+git20260420.2a8e251/java.run
new/ca-certificates-2+git20260717.2e3a23b/java.run
--- old/ca-certificates-2+git20260420.2a8e251/java.run 2026-04-20
09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/java.run 2026-07-17
08:17:47.000000000 +0200
@@ -1,22 +1,20 @@
-#!/bin/bash
+#!/bin/sh
+# vim:syntax=sh noexpandtab
set -e
[ -d "$statedir" ]
-cafile="$destdir/$statedir/java-cacerts"
-cafile_gcj="$destdir/$statedir/gcj-cacerts"
-
+cafile="${destdir}${statedir}/java-cacerts"
+cafile_gcj="${destdir}${statedir}/gcj-cacerts"
for i in "$@"; do
- if [ "$i" = "-f" ]; then
- fresh=1
- elif [ "$i" = "-v" ]; then
- verbose=1
- fi
+ if [ "$i" = "-f" ]; then
+ fresh=1
+ elif [ "$i" = "-v" ]; then
+ verbose=1
+ fi
done
[ -z "$verbose" ] || echo "creating $cafile ..."
-trust extract --format=java-cacerts --purpose=server-auth --filter=ca-anchors
--overwrite $cafile.new
-mv $cafile.new $cafile
-
-# vim: syntax=sh
+trust extract --format=java-cacerts --purpose=server-auth --filter=ca-anchors
--overwrite "$cafile.new"
+mv "$cafile.new" "$cafile"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ca-certificates-2+git20260420.2a8e251/openssl.run
new/ca-certificates-2+git20260717.2e3a23b/openssl.run
--- old/ca-certificates-2+git20260420.2a8e251/openssl.run 2026-04-20
09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/openssl.run 2026-07-17
08:17:47.000000000 +0200
@@ -1,21 +1,20 @@
-#!/bin/bash
+#!/bin/sh
+# vim:syntax=sh noexpandtab
set -e
[ -d "$statedir" ]
-cadir="$destdir/$statedir/openssl"
+cadir="${destdir}${statedir}/openssl"
for i in "$@"; do
- if [ "$i" = "-f" ]; then
- fresh=1
- elif [ "$i" = "-v" ]; then
- verbose=1
- fi
+ if [ "$i" = "-f" ]; then
+ fresh=1
+ elif [ "$i" = "-v" ]; then
+ verbose=1
+ fi
done
[ -z "$verbose" ] || echo "creating $cadir ..."
install -d -m 0755 -p "$cadir"
-trust extract --format=openssl-directory --filter=ca-anchors --overwrite $cadir
-
-# vim: syntax=sh
+trust extract --format=openssl-directory --filter=ca-anchors --overwrite
"$cadir"
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore' old/ca-certificates-2+git20260420.2a8e251/pyproject.toml
new/ca-certificates-2+git20260717.2e3a23b/pyproject.toml
--- old/ca-certificates-2+git20260420.2a8e251/pyproject.toml 2026-04-20
09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/pyproject.toml 2026-07-17
08:17:47.000000000 +0200
@@ -1,6 +1,2 @@
-[tool.black]
-line-length = 79
-target-version = ['py36']
-
[tool.pytest.ini_options]
xfail_strict = true
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ca-certificates-2+git20260420.2a8e251/test_update_ca_certificates.py
new/ca-certificates-2+git20260717.2e3a23b/test_update_ca_certificates.py
--- old/ca-certificates-2+git20260420.2a8e251/test_update_ca_certificates.py
2026-04-20 09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/test_update_ca_certificates.py
2026-07-17 08:17:47.000000000 +0200
@@ -1,17 +1,13 @@
import pytest
-
HOOKSDIR1 = "/etc/ca-certificates/update.d"
HOOKSDIR2 = "/usr/lib/ca-certificates/update.d"
HOOK_ARGS_PATH = "/hook_args"
LISTENER_SCRIPT_DEST = HOOKSDIR2 + "/foo.run"
-LISTENER_SCRIPT = (
- r"""#!/bin/bash
-echo "\$@" > """
- + HOOK_ARGS_PATH
-)
+LISTENER_SCRIPT = r"""#!/bin/sh
+echo "\$@" > """ + HOOK_ARGS_PATH
BAR_HOOK = "bar.run"
@@ -94,7 +90,7 @@
def test_prefers_hooks_in_etc(container):
for hookdir in (HOOKSDIR1, HOOKSDIR2):
dest = hookdir + "/" + BAR_HOOK
- container.run_expect([0], 'echo "#!/bin/bash" >' + dest)
+ container.run_expect([0], 'echo "#!/bin/sh" >' + dest)
container.run_expect([0], "chmod +x " + dest)
res = container.run_expect([0], "/bin/update-ca-certificates -v")
@@ -132,7 +128,7 @@
subdir = hookdir + "/" + "test"
dest = subdir + "/" + BAR_HOOK
container.run_expect([0], "mkdir " + subdir)
- container.run_expect([0], 'echo "#!/bin/bash" >' + dest)
+ container.run_expect([0], 'echo "#!/bin/sh" >' + dest)
container.run_expect([0], "chmod +x " + dest)
container.run_expect([0], dest)
@@ -145,7 +141,7 @@
def test_runs_hooks_in_sorted_order(container):
hooks = [HOOKSDIR1 + "/" + hook for hook in ("10foo.run", "20bar.run")]
for hook in hooks:
- container.run_expect([0], 'echo "#!/bin/bash" >' + hook)
+ container.run_expect([0], 'echo "#!/bin/sh" >' + hook)
container.run_expect([0], "chmod +x " + hook)
container.run_expect([0], hook)
diff -urN '--exclude=CVS' '--exclude=.cvsignore' '--exclude=.svn'
'--exclude=.svnignore'
old/ca-certificates-2+git20260420.2a8e251/update-ca-certificates
new/ca-certificates-2+git20260717.2e3a23b/update-ca-certificates
--- old/ca-certificates-2+git20260420.2a8e251/update-ca-certificates
2026-04-20 09:58:58.000000000 +0200
+++ new/ca-certificates-2+git20260717.2e3a23b/update-ca-certificates
2026-07-17 08:17:47.000000000 +0200
@@ -1,9 +1,11 @@
-#!/bin/bash
+#!/bin/sh
+# vim:syntax=sh noexpandtab
#
# update-ca-certificates
#
# Copyright (c) 2010,2013 SUSE Linux Products GmbH
-# Copyright (c) 2020,2021 SUSE LLC
+# Copyright (c) 2020-2026 SUSE LLC
+# Copyright (c) 2025 Georg Pfuetzenreuter
# Author: Ludwig Nussel
#
# Inspired by Debian's update-ca-certificates
@@ -35,31 +37,31 @@
help_and_exit()
{
- cat <<-EOF
- USAGE: $0 [OPTIONS]
- OPTIONS:
- --verbose, -v verbose output
- --root <Directory> Root directory to use (default: $destdir)
- --fresh, -f start from scratch
- --help, -h this screen
-EOF
- exit 0
+ cat <<-EOF
+ USAGE: $0 [OPTIONS]
+ OPTIONS:
+ --verbose, -v verbose output
+ --root <Directory> Root directory to use (default: $destdir)
+ --fresh, -f start from scratch
+ --help, -h this screen
+ EOF
+ exit 0
}
-args=("$@")
+args="$*"
while [ $# -gt 0 ]; do
- param="$1"
- arg="$2"
- test "$arg" = "${arg#-}" || arg=
- shift
- case "$param" in
- -v|--verbose) verbose='-v' ;;
- -f|--fresh) fresh='-f' ;;
- -r|--root) destdir="$arg"; shift
- if [ -z "$destdir" ]; then
- echo "-r option requires parameter <directory>"
- exit 1
- fi
+ param="$1"
+ arg="$2"
+ test "$arg" = "${arg#-}" || arg=
+ shift
+ case "$param" in
+ -v|--verbose) verbose='-v' ;;
+ -f|--fresh) fresh='-f' ;;
+ -r|--root) destdir="$arg"; shift
+ if [ -z "$destdir" ]; then
+ echo "-r option requires parameter <directory>"
+ exit 1
+ fi
;;
-h|--help) help_and_exit ;;
-*) echo "invalid option: $param" >&2; exit 1 ;;
@@ -69,45 +71,48 @@
# set sane umask
umask 0222;
-case "${TRANSACTIONAL_UPDATE,,*}" in
- true|yes|1)
- [ -z "$verbose" ] || echo "transactional update in progress, not
running any scripts" >&2
- > /etc/pki/trust/.updated
- exit 0
+case "${TRANSACTIONAL_UPDATE}" in
+ true|TRUE|yes|YES|1)
+ [ -z "$verbose" ] || echo "transactional update in progress,
not running any scripts" >&2
+ : > /etc/pki/trust/.updated
+ exit 0
;;
esac
rm -f /etc/pki/trust/.updated
export destdir
-install -d -m 0755 "$destdir/$statedir"
+install -d -m 0755 "${destdir}${statedir}"
# serialize calls if we can
-if [ -z "$_CA_CERTIFICATES_LOCKED" -a -x /usr/bin/flock ]; then
- export _CA_CERTIFICATES_LOCKED="1"
- set -- "${args[@]}"
- exec /usr/bin/flock "$destdir/$statedir" "$0" "$@"
- echo "failed to lock $destdir/$statedir\n" >&2
- exit 1
+if [ -z "$_CA_CERTIFICATES_LOCKED" ] && [ -x /usr/bin/flock ]; then
+ export _CA_CERTIFICATES_LOCKED="1"
+ # shellcheck disable=SC2086 # expected splitting
+ set -- $args
+ exec /usr/bin/flock "${destdir}${statedir}" "$0" "$@"
+ printf 'failed to lock %s/%s\n\n' "$destdir" "$statedir" >&2
+ exit 1
fi
-function find_hooks {
- shopt -s nullglob
- for hooksdir in $hooksdir1 $hooksdir2; do
- for f in "$hooksdir"/*.run; do
- if [ -L "$f" ] || [ -f "$f" ]; then
- echo "${f##*/}" "$f"
- fi
+find_hooks()
+{
+ for hooksdir in $hooksdir1 $hooksdir2; do
+ for f in "$hooksdir"/*.run; do
+ if [ -L "$f" ] || [ -f "$f" ]; then
+ echo "${f##*/}" "$f"
+ fi
+ done
done
- done
}
-while read s f; do
- if [ -L "$f" -a "`readlink "$f"`" = "/dev/null" ]; then
- [ -z "$verbose" ] || echo "skipping $f"
- continue
- else
- [ -z "$verbose" ] || echo "running $f .."
- fi
- "$f" $fresh $verbose
-done < <(find_hooks|sort -k 1,1 -u)
-chmod 0555 "$destdir/$statedir"
+# shellcheck disable=SC2162 # no backslashes expected
+find_hooks | sort -k 1,1 -u | while read _ f; do
+ if [ -L "$f" ] && [ "$(readlink "$f")" = '/dev/null' ]; then
+ [ -z "$verbose" ] || echo "skipping $f"
+ continue
+ else
+ [ -z "$verbose" ] || echo "running $f .."
+ fi
+ "$f" $fresh $verbose
+done
+
+chmod 0555 "${destdir}${statedir}"
++++++ ca-certificates.obsinfo ++++++
--- /var/tmp/diff_new_pack.jpl8iY/_old 2026-07-17 20:38:18.862147468 +0200
+++ /var/tmp/diff_new_pack.jpl8iY/_new 2026-07-17 20:38:18.866147604 +0200
@@ -1,5 +1,5 @@
name: ca-certificates
-version: 2+git20260420.2a8e251
-mtime: 1776671938
-commit: 2a8e251e80f98a899069d6fb7e0fc7acaf2807ef
+version: 2+git20260717.2e3a23b
+mtime: 1784269067
+commit: 2e3a23b5e6aa7bf6ce0a260efc23cae7f14db276