From 1942931d566955fed2a44b01a3794812d64fe3d9 Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Mon, 30 Mar 2026 19:23:19 +0200 Subject: [PATCH 1/9] Relax Arch Python version guardrail --- .builds/archlinux-py313.yml | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.builds/archlinux-py313.yml b/.builds/archlinux-py313.yml index 46a5c824..72cee38c 100644 --- a/.builds/archlinux-py313.yml +++ b/.builds/archlinux-py313.yml @@ -35,8 +35,11 @@ environment: REQUIREMENTS: release # TODO: ETESYNC_TESTS tasks: - - check-python: - python --version | grep 'Python 3.13' + - check-python: | + python - <<'PY' + import sys + assert (3, 13) <= sys.version_info[:2] <= (3, 14), sys.version + PY - docker: | sudo systemctl start docker - setup: | From 5ad53b0b01c3a5f24b99969595c65405656ea353 Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Mon, 30 Mar 2026 19:48:52 +0200 Subject: [PATCH 2/9] Run tests-minimal on Debian bookworm --- .builds/tests-minimal.yml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/.builds/tests-minimal.yml b/.builds/tests-minimal.yml index a20a23b2..3fba57c5 100644 --- a/.builds/tests-minimal.yml +++ b/.builds/tests-minimal.yml @@ -1,30 +1,30 @@ # Run tests using oldest available dependency versions. # -# TODO: It might make more sense to test with an older Ubuntu or Fedora version -# here, and consider that our "oldest suppported environment". +# Debian bookworm keeps this job on Python 3.11, which still supports the +# oldest aiohttp release in our minimal dependency set. -image: alpine/3.19 # python 3.11 +image: debian/bookworm # python 3.11 packages: - - docker - - docker-cli + - build-essential + - docker.io - docker-compose - - py3-pip + - python3-pip - python3-dev + - python3-venv sources: - https://github.com/pimutils/vdirsyncer environment: BUILD: test CI: true CODECOV_TOKEN: b834a3c5-28fa-4808-9bdb-182210069c79 - DAV_SERVER: radicale xandikos + DAV_SERVER: xandikos REQUIREMENTS: minimal tasks: - venv: | python3 -m venv $HOME/venv echo "export PATH=$HOME/venv/bin:$PATH" >> $HOME/.buildenv - docker: | - sudo addgroup $(whoami) docker - sudo service docker start + sudo systemctl start docker - setup: | cd vdirsyncer # Hack, no idea why it's needed @@ -33,4 +33,3 @@ tasks: - test: | cd vdirsyncer make -e ci-test - make -e ci-test-storage From ebd19ee96370573f12dfedf01a635dd6d568966b Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 10:49:36 +0200 Subject: [PATCH 3/9] Restore storage tests in tests-minimal --- .builds/tests-minimal.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.builds/tests-minimal.yml b/.builds/tests-minimal.yml index 3fba57c5..bd6688d5 100644 --- a/.builds/tests-minimal.yml +++ b/.builds/tests-minimal.yml @@ -33,3 +33,4 @@ tasks: - test: | cd vdirsyncer make -e ci-test + make -e ci-test-storage From 572861b41416439c7a1c3762deb74ff06f8772b0 Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 11:15:59 +0200 Subject: [PATCH 4/9] Add docker startup diagnostics for storage tests --- tests/storage/conftest.py | 31 ++++++++++++++++++++----------- 1 file changed, 20 insertions(+), 11 deletions(-) diff --git a/tests/storage/conftest.py b/tests/storage/conftest.py index 5b7485f9..6afafaf6 100644 --- a/tests/storage/conftest.py +++ b/tests/storage/conftest.py @@ -46,17 +46,26 @@ def dockerised_server(name, container_port, exposed_port): try: # Hint: This will block while the pull happends, and only return once # the container has actually started. - output = subprocess.check_output( - [ - "docker", - "run", - "--rm", - "--detach", - "--publish", - f"{exposed_port}:{container_port}", - f"whynothugo/vdirsyncer-devkit-{name}", - ] - ) + command = [ + "docker", + "run", + "--rm", + "--detach", + "--publish", + f"{exposed_port}:{container_port}", + f"whynothugo/vdirsyncer-devkit-{name}", + ] + result = subprocess.run(command, capture_output=True, check=False) + if result.returncode != 0: + raise RuntimeError( + "Failed to start Docker test server.\n" + f"Command: {command!r}\n" + f"Exit code: {result.returncode}\n" + f"stdout:\n{result.stdout.decode(errors='replace')}\n" + f"stderr:\n{result.stderr.decode(errors='replace')}" + ) + + output = result.stdout container_id = output.decode().strip() wait_for_container(url) From f8c01474a8292f5b9f313f66b6bf9a9c2390fc3d Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 11:21:26 +0200 Subject: [PATCH 5/9] Restore docker group access in tests-minimal --- .builds/tests-minimal.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.builds/tests-minimal.yml b/.builds/tests-minimal.yml index bd6688d5..c45856dd 100644 --- a/.builds/tests-minimal.yml +++ b/.builds/tests-minimal.yml @@ -24,6 +24,7 @@ tasks: python3 -m venv $HOME/venv echo "export PATH=$HOME/venv/bin:$PATH" >> $HOME/.buildenv - docker: | + sudo addgroup $(whoami) docker sudo systemctl start docker - setup: | cd vdirsyncer From 5d2bd3b8b8861b90e5679dec53ab69ed081fca56 Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 11:23:50 +0200 Subject: [PATCH 6/9] Fix docker access in tests-minimal on Debian --- .builds/tests-minimal.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/.builds/tests-minimal.yml b/.builds/tests-minimal.yml index c45856dd..e9577224 100644 --- a/.builds/tests-minimal.yml +++ b/.builds/tests-minimal.yml @@ -24,8 +24,9 @@ tasks: python3 -m venv $HOME/venv echo "export PATH=$HOME/venv/bin:$PATH" >> $HOME/.buildenv - docker: | - sudo addgroup $(whoami) docker + sudo adduser $(whoami) docker sudo systemctl start docker + sudo chmod 666 /var/run/docker.sock - setup: | cd vdirsyncer # Hack, no idea why it's needed From 00efff87ea1c4b1ab0fbe7da3fad93a39ca35693 Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 11:28:32 +0200 Subject: [PATCH 7/9] Install apparmor in tests-minimal --- .builds/tests-minimal.yml | 1 + 1 file changed, 1 insertion(+) diff --git a/.builds/tests-minimal.yml b/.builds/tests-minimal.yml index e9577224..12e04b10 100644 --- a/.builds/tests-minimal.yml +++ b/.builds/tests-minimal.yml @@ -5,6 +5,7 @@ image: debian/bookworm # python 3.11 packages: + - apparmor - build-essential - docker.io - docker-compose From 5a78083dafc88a8b2c1eddaba9734f6234691373 Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 11:34:59 +0200 Subject: [PATCH 8/9] Restore radicale coverage in tests-minimal --- .builds/tests-minimal.yml | 2 +- tests/storage/conftest.py | 31 +++++++++++-------------------- 2 files changed, 12 insertions(+), 21 deletions(-) diff --git a/.builds/tests-minimal.yml b/.builds/tests-minimal.yml index 12e04b10..dd1c1a5f 100644 --- a/.builds/tests-minimal.yml +++ b/.builds/tests-minimal.yml @@ -18,7 +18,7 @@ environment: BUILD: test CI: true CODECOV_TOKEN: b834a3c5-28fa-4808-9bdb-182210069c79 - DAV_SERVER: xandikos + DAV_SERVER: radicale xandikos REQUIREMENTS: minimal tasks: - venv: | diff --git a/tests/storage/conftest.py b/tests/storage/conftest.py index 6afafaf6..5b7485f9 100644 --- a/tests/storage/conftest.py +++ b/tests/storage/conftest.py @@ -46,26 +46,17 @@ def dockerised_server(name, container_port, exposed_port): try: # Hint: This will block while the pull happends, and only return once # the container has actually started. - command = [ - "docker", - "run", - "--rm", - "--detach", - "--publish", - f"{exposed_port}:{container_port}", - f"whynothugo/vdirsyncer-devkit-{name}", - ] - result = subprocess.run(command, capture_output=True, check=False) - if result.returncode != 0: - raise RuntimeError( - "Failed to start Docker test server.\n" - f"Command: {command!r}\n" - f"Exit code: {result.returncode}\n" - f"stdout:\n{result.stdout.decode(errors='replace')}\n" - f"stderr:\n{result.stderr.decode(errors='replace')}" - ) - - output = result.stdout + output = subprocess.check_output( + [ + "docker", + "run", + "--rm", + "--detach", + "--publish", + f"{exposed_port}:{container_port}", + f"whynothugo/vdirsyncer-devkit-{name}", + ] + ) container_id = output.decode().strip() wait_for_container(url) From f7bebe8f84690eef9963def129a52170db102aec Mon Sep 17 00:00:00 2001 From: Bernardo Torres Date: Tue, 31 Mar 2026 11:36:25 +0200 Subject: [PATCH 9/9] Apply suggestion from @WhyNotHugo Co-authored-by: Hugo --- .builds/archlinux-py313.yml | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/.builds/archlinux-py313.yml b/.builds/archlinux-py313.yml index 72cee38c..d7d04664 100644 --- a/.builds/archlinux-py313.yml +++ b/.builds/archlinux-py313.yml @@ -35,11 +35,8 @@ environment: REQUIREMENTS: release # TODO: ETESYNC_TESTS tasks: - - check-python: | - python - <<'PY' - import sys - assert (3, 13) <= sys.version_info[:2] <= (3, 14), sys.version - PY + - check-python: + python --version | grep 'Python 3.14' - docker: | sudo systemctl start docker - setup: |