SBCL dev regression testing with client code

Gábor Melis <[email protected]> Fri, 13 Feb 2026 13:17:19 +0100
Newsgroups gmane.lisp.steel-bank.devel
Message-ID <CADJFn4W0D=fVv1bYCW8YeMJyzCaYpsf2960JUjj2U5DK5h841Q@mail.gmail.com>
Hello

Detecting SBCL regressions during the development cycle is much better
than only post freeze or post release. To this end, I explored
(prompted by Xof) how we can make testing user code with dev SBCL
easier. The following prototype solution is for GitHub.

The SBCL side
-------------

I added a rolling "latest-dev" release to SBCL, which gets updated on
push (intended for master only). This release has various binary
distribution tarballs (produced with binary-distribution.sh). These
changes are on the publish-latest-dev branch in my SBCL fork:

https://github.com/melisgl/sbcl/commits/publish-latest-dev/

This is what the latest-dev release that it creates looks like:

https://github.com/melisgl/sbcl/releases


The GitHub client side with Roswell
-----------------------------------

Then, a library can test on the latest and greatest SBCL by
downloading and installing a binary. In the following example, I
integrated this into the testing workflow of PAX:

https://github.com/melisgl/mgl-pax/commits/test-on-latest-sbcl/

PAX has a Roswell based setup because non-SBCL implementations need to
be tested too. I added a roswell-setup action that can download an
SBCL binary distribution tarball and make it available under Roswell.

https://github.com/melisgl/mgl-pax/blob/fda92dabf9def3d54f914ec6326e51b2c85b9d74/.github/actions/roswell-setup/action.yml

PAX's test.yml file is fairly independent from the complications:

https://github.com/melisgl/mgl-pax/blob/fda92dabf9def3d54f914ec6326e51b2c85b9d74/.github/workflows/test.yml

Here is a run:

https://github.com/melisgl/mgl-pax/actions/runs/21980661542

Note that the job gets annotated with the SBCL version because latest-
dev is a moving target. Here, that's "2.6.1.115.HEAD.13-b225129eb",
which includes the git version.

Also note that PAX tests are run on push but also daily to catch SBCL
regressions.


TODO
----

- It would likely be better to update the latest-dev release if tests
  on _all_ stable configurations/platforms pass.

- Note that the roswell-setup action probably belongs in SBCL. It's in
  PAX for ease of prototyping.

- There is no reporting of any kind. One only sees whether the
  individual test-stable and test-dev jobs succeeded. When test-dev
  fails but test-stable does not, that could indicate possible SBCL
  regressions.

- There is no automatic notification of sbcl-devel. That could be a
  can of worms. Maybe it's enough to have a failure in the daily test
  of client code alert the library author, who checks what's wrong
  and reports the issue if it's with SBCL.

- The current logic is based on the entire job suite failing or
  succeeding. Finer-grained regression testing (on the level of
  individual tests) is not considered yet.

- Maybe it would make sense to have a latest-stable rolling release as
  well. Possibly with the same set of binaries as latest-dev to ease
  comparisons.

- Still on GitHub but without Roswell, the situation would be similar
  and also simpler: one only needs to download the binary and install
  it. This could be another GitHub action like roswell-setup.

- In case a company has their own continual testing system, there is
  not a whole lot that this prototype provides yet, apart from the
  availability of a prebuilt library.


Before I take this further, let me know your thoughts about what has
been and what will need to be done.

Cheers,
Gábor

_______________________________________________
Sbcl-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/sbcl-devel