Compare commits

...

2 Commits

Author SHA1 Message Date
Xavier Roche
141d065a04 debian: 3.49.10-2, fix buildd FTBFS via quilt patch
3.49.10-1 failed to build on every Debian buildd: tests/28_local-pause
failed instead of skipping when python3 is absent (the local-server tests
need python3, which the minimal buildd chroot lacks). The fix is already
upstream, but the -1 orig is frozen in the archive, so carry it as a quilt
patch and bump to -2. Packaging-only; no upstream code change.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>
2026-06-28 20:19:47 +02:00
Xavier Roche
f9ee4702a2 tests: skip 28_local-pause without python3; add a buildd-reproducing CI job (#445)
* tests: skip 28_local-pause when python3 is absent (Debian buildd)

The local-server tests all skip with exit 77 when python3 is missing, but
28_local-pause runs local-crawl.sh inside a command-substitution with output
redirected to /dev/null, swallowing that exit-77 skip signal. On a host with
no python3 (every Debian buildd) both crawls then run serverless, finish in
0s, and the test reports FAIL instead of SKIP, turning 3.49.10-1 red on all
architectures. Add the same python3 guard the other tests get via
local-crawl.sh, up front, so it skips cleanly.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

* ci: add a no-python3 job reproducing the Debian buildd chroot

GitHub runners ship python3, so every make-check job exercised the
python3-present path and the local-server tests never skipped. The Debian
buildds build in a minimal chroot with no python3, where those tests must
SKIP (exit 77) -- and 28_local-pause failed there instead, FTBFS on every
arch for 3.49.10-1, invisible to CI.

Add a job that builds, removes python3, and runs make check, so the skip
path is exercised on every PR. Verified to fail on the pre-fix tree and pass
after.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Signed-off-by: Xavier Roche <roche@httrack.com>

---------

Signed-off-by: Xavier Roche <roche@httrack.com>
Co-authored-by: Claude Opus 4.8 <noreply@anthropic.com>
2026-06-28 20:12:49 +02:00
5 changed files with 90 additions and 0 deletions

View File

@@ -61,6 +61,50 @@ jobs:
if: failure()
run: cat tests/test-suite.log 2>/dev/null || true
# Reproduce the Debian buildds: they build in a minimal chroot with no
# python3, so the local-server tests must SKIP (exit 77), not fail. GitHub
# runners ship python3, so every other job hides this path; here we remove it
# before `make check`. This is the guard that would have caught the 3.49.10-1
# FTBFS (28_local-pause failed instead of skipping when python3 was absent).
buildd-no-python3:
name: build (no python3, Debian buildd)
runs-on: ubuntu-24.04
steps:
- uses: actions/checkout@v6
with:
submodules: recursive
- name: Install build dependencies
run: |
set -euo pipefail
sudo apt-get update
sudo apt-get install -y --no-install-recommends \
build-essential autoconf automake libtool autoconf-archive \
zlib1g-dev libssl-dev
- name: Configure
run: |
set -euo pipefail
autoreconf -fi
./configure
- name: Build
run: make -j"$(nproc)"
- name: Test without python3
run: |
set -euo pipefail
# Hide every python3* so `command -v python3` fails like it does in the
# buildd chroot; masking with /bin/false would still resolve.
sudo find /usr/bin /usr/local/bin -maxdepth 1 -name 'python3*' \
-exec mv {} {}.hidden \;
! command -v python3
make check
- name: Print the test log on failure
if: failure()
run: cat tests/test-suite.log 2>/dev/null || true
# Portability: build and test on macOS (Darwin/clang) on a native runner --
# no VM. The tree has no __APPLE__ branches, so Darwin exercises the
# generic-Unix path on a second libc and kernel. brew's openssl@3 is keg-only,

9
debian/changelog vendored
View File

@@ -1,3 +1,12 @@
httrack (3.49.10-2) unstable; urgency=medium
* Fix FTBFS: tests/28_local-pause failed instead of skipping when python3 is
absent (the local-server tests need python3, which the buildds lack). Add
patches/skip-local-pause-test-without-python3.patch to guard the test on
python3 up front, like its siblings, so it skips cleanly.
-- Xavier Roche <xavier@debian.org> Sun, 28 Jun 2026 20:18:46 +0200
httrack (3.49.10-1) unstable; urgency=medium
* New upstream release: new download-pacing and URL-handling options plus a

1
debian/patches/series vendored Normal file
View File

@@ -0,0 +1 @@
skip-local-pause-test-without-python3.patch

View File

@@ -0,0 +1,29 @@
Description: skip 28_local-pause when python3 is absent (fixes FTBFS on buildds)
The local-server tests skip (exit 77) when python3 is missing, but
28_local-pause wrapped local-crawl.sh in a command substitution that swallowed
that skip. On the python3-less buildd chroot the test then ran serverless, both
crawls finished in 0s, and the 0s delta was reported as a failure. Guard the
test on python3 up front, like its siblings, so it skips cleanly.
Author: Xavier Roche <roche@httrack.com>
Origin: upstream, https://github.com/xroche/httrack/pull/445
Applied-Upstream: https://github.com/xroche/httrack/commit/45279d7
Forwarded: not-needed
Last-Update: 2026-06-28
diff --git a/tests/28_local-pause.test b/tests/28_local-pause.test
index 8505a75..add95d1 100755
--- a/tests/28_local-pause.test
+++ b/tests/28_local-pause.test
@@ -9,6 +9,13 @@ set -e
: "${top_srcdir:=..}"
+# python3 runs the local server (mirror local-crawl.sh); skip when absent, else
+# run() swallows its exit-77 and the serverless 0s/0s crawl looks like a fail.
+command -v python3 >/dev/null || {
+ echo "python3 not found; skipping local crawl tests"
+ exit 77
+}
+
run() { # echoes the wall-clock seconds of one crawl
local t0 t1
t0=$(date +%s)

View File

@@ -9,6 +9,13 @@ set -e
: "${top_srcdir:=..}"
# python3 runs the local server (mirror local-crawl.sh); skip when absent, else
# run() swallows its exit-77 and the serverless 0s/0s crawl looks like a fail.
command -v python3 >/dev/null || {
echo "python3 not found; skipping local crawl tests"
exit 77
}
run() { # echoes the wall-clock seconds of one crawl
local t0 t1
t0=$(date +%s)