Versioning and releases
Marbble follows semantic versioning. Prereleases carry a suffix
(0.1.0-alpha.1, 0.1.0-alpha.2, …), and every release is tagged v<version>.
CHANGELOG.md records each release in the Keep a Changelog format.
The version is recorded in the root Cargo.toml ([workspace.package] version, inherited by
every crate) and Cargo.lock, package.json and package-lock.json,
src-tauri/tauri.conf.json, and nix/package.nix. scripts/set-version.sh <version> rewrites
all of them (the three workspace crates in Cargo.lock), refuses anything that isn’t a
semver version, and prints the result. It needs GNU sed: on macOS install it (brew install gnu-sed) and put gsed first in PATH as sed.
To make a release:
- Move the
[Unreleased]entries inCHANGELOG.mdunder a new## [<version>] - <date>heading. The release notes are taken from that section. scripts/set-version.sh <version>.- Commit, for example
git commit -am "Release <version>". - Tag and push the tag:
git tag v<version> && git push origin main v<version>.
Pushing a v* tag runs .github/workflows/release.yml:
create-releasemakes a draft GitHub release named “Marbble v”, with the version’s CHANGELOG section plus download and unsigned-build notes. A version with a -suffix is marked as a prerelease.buildrunstauri-actionon five runners and uploads the bundles to the draft: Linux x86_64 (ubuntu-24.04) and aarch64 (ubuntu-24.04-arm):.deband.AppImage, plus.rpmfor versions without a prerelease suffix (RPM versions can’t contain-); Windows (windows-latest): the NSIS installer (_x64-setup.exe); macOS (macos-latest):.appand.dmgforaarch64-apple-darwinandx86_64-apple-darwin.publishtakes the release out of draft once every build has finished.
To try a change to the workflow without releasing anything, push it to the release-check
branch: the same builds run, and nothing is created or published. The bundles are not signed
or notarized yet.
.github/workflows/ci.yml runs on pushes to main, on pull requests and on demand, on
ubuntu-24.04, windows-latest and macos-latest: npm ci, npm run build (type check and
frontend build), npm test, cargo test -p daw-engine --lib, cargo test -p daw and
cargo check --workspace --all-targets (so the examples must compile). On Linux it then checks
cargo fmt and runs clippy with -D warnings, both on the pinned LINT_TOOLCHAIN, and runs
scripts/headless-checks.sh: the headless checks that need no third-party plug-ins, on ALSA’s
null device (the runner has no sound card or audio server) with a generated test tone. A
separate nix job runs nix flake check, which builds the Nix package. pdc_check,
freeze_check and the plug-in parts of the other checks need real plug-ins, so they don’t run
in CI; run them locally.
The main branch is main on https://github.com/JackMechem/marbble.