.github/workflows/ci.yml: fast lint jobs (clang-format, testserver
selftest, bootstrap.sh --check) that need no compiler; a gcc/clcang build
matrix and an ASan/UBSan + TSan sanitizer matrix that bootstrap via
tools/bootstrap.sh and run `ctest --preset {ci,dev,tsan}`; advisory
clang-tidy on changed files; and extension-lint + conformance jobs that
short-circuit to a passing "skipped" step until their lane lands, so they
can be marked required now. CMakePresets.json gains matching `tsan` and
`ci` test presets. .github/BRANCH_PROTECTION.md records the intended
required-checks policy (conformance required = the M0 exit gate).
Co-Authored-By: Claude Sonnet 5 <[email protected]>
Claude-Session: https://claude.ai/code/session_01HPPSGhiArbvQgwC2DNiURS
1.6 KiB
Branch protection for main
CI defines the checks; branch protection is a repo setting (Settings → Branches → Add rule) and has to be configured once by an admin. This file records the intended policy so it can be re-applied or audited.
Rule: main
-
Require a pull request before merging. No direct pushes.
-
Require status checks to pass before merging, and require branches to be up to date first. Required checks:
Check (job name in ci.yml)Required from clang-formatnow testservernow bootstrap-scriptnow build (gcc)/build (clang)when the first C++ lane merges sanitizers (dev)/sanitizers (tsan)when the first C++ lane merges conformancewhen tests/conformance/lands — this is the M0 exit gateextension-lintwhen extension/landsclang-tidyis intentionally not required through M1 (continue-on-error: true,.clang-tidyhasWarningsAsErrors: ''). Make it required at M2. -
Require linear history (matches CLAUDE.md §6: rebase onto
main, no merge commits). -
Require conversation resolution before merging.
-
Do not allow force pushes or deletions.
-
Apply the rule to administrators too, except for the initial scaffolding period.
Note on the "skipped" job steps
Several jobs (conformance, extension-lint, clang-tidy) short-circuit to a "skipped"
echo when their lane hasn't landed. They still report success, so they can be marked
required now without blocking — they start doing real work automatically on the commit
that adds the lane.