README.md raw

CI quick-reference

All CI is just bash and nix.

- .github/workflows/ci.yml – lists the jobs (default, llvm, …).

- ci/scripts/run.sh – spins up the Nix shell then calls… - ci/scripts/ci.sh – …to configure, build, and test.

- ci/configs/*.sh – defines flags for each job. - shell.nix – defines build environment (compilers, tools, libraries).

- build-*/ – separate build directories (like build-default, build-llvm) will be created for each job.

To run jobs locally:

CI_CONFIG=ci/configs/default.bash  ci/scripts/run.sh
CI_CONFIG=ci/configs/llvm.bash     ci/scripts/run.sh
CI_CONFIG=ci/configs/gnu32.bash    ci/scripts/run.sh
CI_CONFIG=ci/configs/sanitize.bash ci/scripts/run.sh
CI_CONFIG=ci/configs/olddeps.bash  ci/scripts/run.sh

By default CI jobs will reuse their build directories. CI_CLEAN=1 can be specified to delete them before running instead.

Running workflows with act

You can run either the entire workflow or a single matrix entry locally. On macOS or Linux:

  1. Install `act` and either Docker or

Podman.

  1. Inside the Podman VM, create a named volume for the Nix store (ext4,

case-sensitive) so builds persist across runs. Recreate it any time you want a clean cache: `bash podman volume create libmultiprocess-nix `

  1. From the repo root, launch the workflow. The example below targets the

sanitize matrix entry; drop the --matrix flag to run every configuration. `bash act \ --reuse \ -P ubuntu-latest=ghcr.io/catthehacker/ubuntu:act-24.04 \ --container-options "-v libmultiprocess-nix:/nix" \ -j build \ --matrix config:sanitize `