Contributing
OpenRig is developed in the open on GitHub. Every kind of help is welcome:
- Reports: open an issue with your board, interface, version and what happened. Reports from real x86_64 mini PCs and from other audio interfaces are especially useful.
- Pull requests: fork, branch, and open a pull request against
main. - Documentation: this site is in its own repository; every page has an edit link at the bottom.
Checks
Section titled “Checks”Every pull request runs cargo fmt --check, cargo clippy and cargo test. Run them locally
first. tests/lv2_hosting_test.rs compiles a small LV2 plugin with the system’s C compiler and
runs it through the host, so LV2 hosting is tested without any plugin installed.
Commits and releases
Section titled “Commits and releases”Commit messages follow conventional commits: feat:,
fix:, perf:, docs:, ci:… Versions follow semantic versioning and
are computed from them.
release-plz keeps a release pull request with the next version and its changelog. Merging it tags the release; a workflow then builds the app for Linux x86_64 and aarch64, the OS images and the signed updates, and attaches them to the release.
Real-time code
Section titled “Real-time code”Code that runs in the audio callback must not allocate, lock (other than try_lock), log or do
I/O. When in doubt, do the work on the chain builder thread and send the result.
Errors and logs
Section titled “Errors and logs”The app must not crash at runtime, and Clippy enforces it (tests are exempt):
- no
unwrap,expect,panic!ortodo!: return aResult(anyhowin the app,thiserrorwhere callers match on the error), or handle the case with a default, an early return or a skipped item, logged when something was lost; - no indexing or slicing that can go out of bounds on data from outside (files, plugins, the
network, the user):
get,split_first, iterators; - locks through
crate::sync::MutexExt::locked()and its siblings, so a panic elsewhere does not poison the rest of the app; unsafeonly where there is no safe way (LV2, JACK, NAM, libc, the hand-off to the DSP workers), each block with a// SAFETY:comment.
Logs go through tracing: syslog on the OS image, the terminal on a desktop. A message is a short
sentence with what varies in fields:
warn!(path = %path.display(), error = %e, "Preset skipped");error when a feature is lost, warn when something was worked around, info for lifecycle and
configuration, debug for developers (RUST_LOG=debug). Never on the audio thread.
License
Section titled “License”OpenRig is GPL-3.0-or-later. By contributing, you agree to license your contribution under the same terms.