How the repo works
mainis protected. Every change goes through a pull request and the merge queue. There are no direct pushes tomain, and CI never commits ontomain.- You bump the crate version in the PR when the title is a releasing change (
feat/fix/perf/ breaking). - On merge, CI reads
Cargo.toml, creates tagvX.Y.Z, publishes to crates.io, and opens a GitHub Release (withinclude/arcane_sdk.h). Non-releasing titles skip that.
Pull request checklist
- Use a Conventional Commits PR title (validated by CI).
- If the title releases, bump
Cargo.toml(andCargo.lock) to the expected SemVer. - Keep
include/arcane_sdk.hin sync if you changesrc/ffi.rs. - Rebase onto
mainwhen the queue says you are behind — then fix the version if another releasing PR landed first.
SemVer vs title
.github/scripts/check-version-bump.sh. A releasing PR with the wrong version fails. A non-releasing PR that touches the version also fails.
Parallel PRs and the merge queue
Severalfeat PRs can all target the next minor while main is still on the old version. That is fine until one merges.
After another releasing PR lands:
- Rebase (or merge)
maininto your branch — the queue requires an up-to-date branch. - Run
bump-version.shagain with your PR title soCargo.tomlmatches the new base. - Push and let checks re-run, then re-enter the queue.
main is 0.1.0. PR A and PR B both bump to 0.2.0. A merges first → tag v0.2.0. B rebases and bumps to 0.3.0.
C header
If you change the FFI insrc/ffi.rs, regenerate the committed header (cbindgen 0.29.4):
Local docs preview
Fromdocumentation/:
What maintainers configure once
Documented for operators (GitHub Settings):- Ruleset on
main: PR + merge queue, require branch up to date, signed commits optional - Required checks: conventional title, version bump, CI (check + C header)
- Allow Actions to create tags
v*(not commits onmain) - Secrets:
CARGO_REGISTRY_TOKEN(crates.io); optionalRELEASE_TOKENif the default token cannot create tags/releases