Skip to content

build: fix v3 bundle for SBCL 2.6.5; add bundle CI; fix smoke-test trigger#1752

Merged
dimitri merged 5 commits into
mainfrom
fix/bundle-quicklisp-dist-2026-01-01
Jun 28, 2026
Merged

build: fix v3 bundle for SBCL 2.6.5; add bundle CI; fix smoke-test trigger#1752
dimitri merged 5 commits into
mainfrom
fix/bundle-quicklisp-dist-2026-01-01

Conversation

@dimitri

@dimitri dimitri commented Jun 28, 2026

Copy link
Copy Markdown
Owner

Problem

The bundle has been pinned to Quicklisp dist 2022-02-20 since pgloader 3.6.8. That snapshot ships named-readtables-20220220-git, which fails to build under SBCL 2.6.5 (#1703).

Root cause: SBCL 2.6.5 changed the internal char-macro array to store 0 instead of NIL for absent macro characters. The old named-readtables iterator tested (if reader-fn ...) — truthy for 0 — so it yielded characters with no real macro function attached. check-reader-macro-conflict then found a 0 where it expected a function and signalled an assertion error.

Changes

Makefile — bump BUNDLEDIST from 2022-02-20 to 2026-01-01, the most recent available Quicklisp dist. That dist ships named-readtables-20260101-git (upstream fix by melisgl, 2025-11-09): the grovel-base-chars iterator now tests (and reader-fn (not (eql reader-fn 0))) before yielding. Also picks up ~4 years of other dependency updates.

debian/rules — fix intermittent help2man failure (exit 127) in the Debian package build. The override_dh_installman-arch recipe was calling help2man pgloader and relying on a PATH= prefix to locate the binary; that PATH wasn't consistently inherited by help2man's subprocess. Pass the full path directly instead.

.github/workflows/bundle-ci.yml — new CI workflow that builds pgloader from the Quicklisp bundle and runs the full regression suite. Triggers on Makefile, bundle/**, or src/** changes. Uses pg_virtualenv to spin up a throwaway PostgreSQL cluster, mirroring how debian/tests/testsuite runs autopkgtest.

bundle/Makefile — add prepare before regress in the test target. Without it make test-bundle called make regress directly against databases that hadn't been created yet.

.github/workflows/smoke-test.yml — fix smoke-test trigger. The previous release: prereleased event never fired because softprops/action-gh-release updates an existing pre-release rather than re-creating it, and GitHub only fires prereleased on initial publication. Switch to workflow_run triggered after pgloader v4 Integration Tests completes successfully on main — i.e. exactly when the JAR is actually updated.

Validation

The new bundle-ci.yml workflow runs make bundle (downloads pinned dist, compiles, checks --version) followed by make test-bundle (full regression suite against the bundle binary).

Closes #1703.

The 2022-02-20 Quicklisp dist snapshot shipped named-readtables-20220220-git,
which is incompatible with SBCL 2.6.5: the readtable iterator yielded entries
where the char-macro function is 0 (SBCL 2.6.5 changed from NIL to 0 for
absent macro characters), causing an assertion failure in
check-reader-macro-conflict.

The 2026-01-01 dist ships named-readtables-20260101-git which contains the
upstream fix (melisgl/named-readtables commit 6eea566744, 2025-11-09):
the grovel-base-chars iterator now checks (and reader-fn (not (eql reader-fn 0)))
before yielding, correctly skipping absent entries under both old and new SBCL.

This is also the most recent Quicklisp dist available, picking up ~4 years
of other dependency updates.

Closes #1703.
dimitri added 2 commits June 28, 2026 23:05
help2man was called with 'pgloader' relying on a PATH prefix to locate
the binary at debian/pgloader/usr/bin/. This intermittently failed on
push-event CI runs (exit 127 — binary not found via PATH lookup).

Pass the full path directly so help2man always finds the binary
regardless of how PATH is inherited by its subprocess.
bundle-ci.yml:
  New workflow that builds pgloader from the Quicklisp bundle and runs
  the full regression suite. Triggers on pull_request and push to main
  when Makefile, bundle/, or src/ change — exactly the files that affect
  the v3 bundle output. Uses pg_virtualenv (from postgresql-common) to
  spin up a throwaway PostgreSQL cluster for the regress tests, mirroring
  what debian/tests/testsuite does for autopkgtest.

bundle/Makefile:
  Add 'prepare' before 'regress' in the test target. The prepare step
  creates the pgloader/stocks/ip4r databases and extensions; without it
  the regress targets fail immediately because the databases don't exist.

smoke-test.yml:
  The previous trigger (release: prereleased) never fired because
  softprops/action-gh-release updates an existing pre-release rather than
  re-creating it, and GitHub only fires the prereleased event on initial
  publication. Switch to workflow_run so the smoke test runs automatically
  after every successful integration-tests run on main (which is when the
  v4-dev JAR is actually updated). Add an if condition so the job is
  skipped on workflow failure, not just on success.
@dimitri dimitri changed the title build: bump BUNDLEDIST from 2022-02-20 to 2026-01-01 build: fix v3 bundle for SBCL 2.6.5; add bundle CI; fix smoke-test trigger Jun 28, 2026
dimitri added 2 commits June 28, 2026 23:26
'git archive ... main' fails in CI where the checkout is a detached
HEAD with no local 'main' ref. HEAD always resolves correctly whether
building on main, a PR branch, or a detached HEAD.
pg_virtualenv creates the cluster with the current OS user as
superuser, not 'postgres'. The test Makefile defaults to
PGSUPERUSER=postgres, so createdb -U postgres fails immediately.
Pass PGSUPERUSER=$(id -un) to match what debian/tests/testsuite does.
@dimitri dimitri merged commit 965d6cf into main Jun 28, 2026
38 checks passed
@dimitri dimitri deleted the fix/bundle-quicklisp-dist-2026-01-01 branch June 28, 2026 21:43
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

pgloader-bundle-3.6.8 fails to build under SBCL 2.6.5-85913ede1 (gentoo)

1 participant