Releasing
Releases are automated end to end. The moving parts:
- Commits on
mainfollow Conventional Commits.fix:bumps the patch version,feat:bumps it too while the project is pre-1.0, and a breaking change bumps the minor version. - release-please watches
mainand keeps a release pull request open, accumulating the changelog and the version bump (the workspace version inCargo.toml, plusversion.txt). A companion job refreshesCargo.lockon that branch. - Merging the release pull request dispatches the build. No tag or release exists yet, so
releases/latestkeeps serving the previous version while binaries build. - The release workflow (generated by cargo-dist) builds binaries for macOS (Apple silicon and Intel), Linux (x86_64 and aarch64, so a Raspberry Pi installs the same way), and Windows, then creates the
vX.Y.Ztag and the GitHub release together with the checksummed binaries and the shell and PowerShell installers, in one step.latestflips atomically; a failed build creates nothing at all. The next release pull request is generated once the release exists (release-please reruns when the pipeline completes).
Cutting a release
Section titled “Cutting a release”- Check that the latest
cianddocsruns onmainare green. A release must never ship from a red tree. - Open the release pull request, read the generated changelog, and merge it.
- Watch the
releaseworkflow. When it finishes, the new version is live at thereleases/latestURLs the install instructions point to.
Verifying
Section titled “Verifying”curl -fsSL https://github.com/sean-reid/miditool/releases/latest/download/miditool-installer.sh | shmiditool --versionThe version printed must match the tag that just shipped.