|
microlisp 0.1.0
A small Scheme-subset interpreter in modern C.
|
Thanks for considering a contribution! Please read this before opening a pull request.
Three repository settings have to be flipped by hand the first time this project is published; the CI pipeline and the issue/support workflows assume all three are in place:
pages job in .github/workflows/ci.yml deploys the Doxygen site on every push to main and will fail until this is set..github/workflows/codeql.yml can upload SARIF results..github/ISSUE_TEMPLATE/config.yml both redirect how-to / design questions to Discussions; the links 404 until the feature is on.This is a single-maintainer project (@jkindrix). Pull requests are merged when:
.github/workflows/ci.yml plus the CodeQL workflow).Releases are cut when the [Unreleased] section of CHANGELOG.md accumulates a meaningful set of changes, or when a critical fix lands. Conduct in any project space is governed by the Code of Conduct.
scripts/format.sh and scripts/lint.sh before pushing.Run the sanitizer build at least once before opening a PR:
CI runs against the tools shipped on GitHub's hosted runners. If your local distribution is older, scripts/lint.sh and the coverage preset may report clean locally and still fail CI. The cases that have actually bitten C-library projects of this shape:
| Concern | What CI runs | What older distros ship | Mitigation |
|---|---|---|---|
clang-tidy | ≥ 18 | Debian 12 ships 14 | sudo apt install clang-tidy-19; run BUILD_DIR=build/debug clang-tidy-19 ... (or let CI catch it on the PR). |
lcov | 2.x | Debian 12 ships 1.16 | Run scripts/coverage.sh instead of hand-copying CI commands — it auto-detects your lcov major version. |
head, stdbuf | GNU coreutils on Linux runners; BSD on macOS | GNU on most Linux | Linux-only CTest entries are gated with CMAKE_SYSTEM_NAME STREQUAL "Linux" rather than CMAKE_HOST_UNIX. |
If you can, run the same compiler family CI uses (CC=clang-19).
Linux ≥ 6.x defaults vm.mmap_rnd_bits to 32, which collides with the shadow memory layout used by Clang ≤ 15's ASan / TSan / MSan / libFuzzer runtimes. Symptoms: FATAL: ...Sanitizer: unexpected memory mapping or sporadic SEGFAULTs.
Use Clang ≥ 16 for sanitizer/fuzz builds:
Or lower the ASLR entropy at runtime (doesn't persist across reboots):
CI's ubuntu-latest runners are unaffected.
Use Conventional Commits:
Subject ≤ 72 characters; body explains why when not obvious.
cmake --preset debug and --preset release.ctest --preset default passes.ctest --preset asan passes (no ASan/UBSan diagnostics).scripts/format.sh is a no-op (code already formatted).scripts/lint.sh reports no new warnings.tests/check_exports.sh's expected list and in README.md's "Public API at a glance".CHANGELOG.md updated under ## [Unreleased].