Branch and release conventions, continuous integration.
Development
The project follows GitHub Flow:
mainis always releasable and protected: changes reach it only through pull requests, nobody pushes to it directly.- Every change starts on a short-lived branch from
main, named after its type:feat/<name>,fix/<name>,docs/<name>,ci/<name>, … - Push the branch and open a pull request into
main; CI runs on it. - Merge when CI is green, then delete the branch.
Releasing is a change like any other: on a chore/release-X.Y.Z branch, bump
version in pyproject.toml and move the Unreleased entries of
CHANGELOG.md under the new version; merge the pull request, then tag
vX.Y.Z on main. The release workflow builds the packages and attaches
them to the GitHub release.
A versioned pre-push hook refuses direct pushes to main. Enable it once per
clone with git config core.hooksPath .githooks (emergency override:
ALLOW_MAIN_PUSH=1 git push).
The README images are made by scripts/: make_logo.py (logo),
readme_images.py (Blender renders through bpy of every preset and every
connector family, connector sheet, GitHub social preview
docs/images/social_preview.png, to upload in the repository's Settings >
General > Social preview), drop_gif.py (the MuJoCo drop animation), coil_gif.py (the coiled cord
pulled and let go).
Continuous integration
| Workflow | When | What |
|---|---|---|
ci.yml |
every push to main, every pull request |
ruff check and ruff format --check; pytest on Python 3.11–3.13 (Linux) and 3.12 (macOS, Windows); a command-line smoke test with the OpenUSD validators; the MuJoCo checks of every preset; the Blender checks of every preset through the add-on (with the bpy module, Python 3.13), and for comparison the same with rigid bodies set by hand; reports kept as run artifacts; build the wheel and sdist, twine check, install the wheel in a clean environment. |
release.yml |
a pushed tag v* |
checks the tag matches the version in pyproject.toml, tests, builds, then creates the GitHub release with the packages and the Blender add-on attached and the notes taken from CHANGELOG.md. Versions with a, b or rc are marked as pre-releases. |
| Dependabot | monthly | pull requests to update the GitHub Actions and the Python dependencies. |