A few highlights relative to our existing CI: - Add a FreeBSD 12.2 and 13.0 runner so we have some FreeBSD CI. - Windows builds use msbuild with the Visual-Studio-provided clang toolchain to test clang - The matrix builds describe the axes of the matrix, not all points. - The Arm builds now cross-compile with a native clang and run the tests with qemu, rather than running the compiler, linker, and ctest all with qemu. This also includes a fix for one of the tests that was doing `static_cast<unsigned int>(1) << 36`, which is undefined behaviour and was sometimes causing qemu to hang. There is now an assert to catch this in the future.
Keeping CI images up to date
Re-building an image after updating the docker file
Run docker build -t snmallocciteam/build_${IMG}:latest -f ci/${IMG} . from the root of the repo,
where $IMG is the image you want to rebuild, for example linux_x64
If you are building a multiarch image, ie. an image targeting an architecture other than
the one you are running, you will need to install the qemu handler before you can build:
sudo docker run --rm --privileged multiarch/qemu-user-static:register --reset
Testing locally
Having built a docker image, you can build your current tree therein with
docker run --rm -u $(id -u) -v ${PWD}:/opt:ro snmallocciteam/build_${IMG}:latest \
sh -c "cd /tmp; CC=clang-10 CXX=clang++-10 BUILD_TYPE=Debug SNMALLOC_SRC=/opt /opt/ci/scripts/build.sh && (cd build; ninja test)"
Pushing the updated docker image to Docker Hub
Run docker push snmallocciteam/$IMG:latest
Permissions
You must be part of the snmalloc ci team to push updated images. Contact @mjp41, or @achamayou to be given access.