This repository uses regular CI for pull requests and a short two-action release process:
- Open a generated release-prep PR that updates every version surface.
- Merge it; the release workflow creates the matching
vX.Y.Ztag and publishes.
- Triggered on pushes and pull requests to
mainwhen Rust sources, manifests, proto files, scripts, workflow files, package metadata, or toolchain files change. - Runs formatting, Clippy, tests, and release-mode build checks across Linux and macOS.
- Clippy stays in regular CI; release publishing is gated by formatting, tests, validation, asset verification, and publish dry-runs.
- Started manually from Run workflow.
- Inputs:
version: target version with or without avprefix, for examplev0.5.5.changelog: optional fallback markdown ifCHANGELOG.mdhas no## [Unreleased]section.
- Opens a PR with a conventional commit such as
chore: prepare release v0.5.5. - Updates:
- root workspace version in
Cargo.toml - explicit internal dependency versions in
lla/Cargo.tomlandlla_plugin_utils/Cargo.toml - every
plugins/*/Cargo.tomlpackage version Cargo.lockCHANGELOG.md, by promoting## [Unreleased]into## [X.Y.Z] - YYYY-MM-DDand leaving a fresh empty## [Unreleased]section
- root workspace version in
- Triggered when a release-prep PR with the
releaselabel is merged intomain. - Also triggered by pushing a tag that matches
v*.*.*. - Can be rerun manually with
workflow_dispatchand an existingrelease_tag. - Validates before doing release work:
- tag is semver with a
vprefix - tag commit is reachable from
main - tag version matches the workspace, internal dependency, and plugin versions
CHANGELOG.mdhas a section for the version- crates.io state can be resumed safely
- tag is semver with a
- Runs release gates:
cargo fmt --all -- --checkcargo test --workspace
- Builds and verifies all release assets before publishing:
- CLI binaries:
lla-linux-*,lla-macos-* - plugin archives:
plugins-*.tar.gzandplugins-*.zip - Linux packages:
.deb,.rpm,.apk,.pkg.tar.zst themes.zip- final
SHA256SUMS
- CLI binaries:
- Publishes crates.io packages in dependency order:
lla_plugin_interfacella_plugin_utilslla
- Runs
cargo publish --dry-runimmediately before each crate publish; dependent crates are dry-run only after their internal dependencies are visible on crates.io. - Creates or updates the GitHub release as a draft, uploads verified assets, verifies uploaded assets, then publishes the release.
- Add release notes under
## [Unreleased]inCHANGELOG.md. - Run Prepare Release with the target version.
- Review and merge the generated
chore: prepare release vX.Y.ZPR. - Watch the Release workflow; it creates the matching tag automatically.
- If the workflow fails after partial publishing, rerun Release manually with the same tag. Existing crates and release assets are skipped when safe.
GITHUB_TOKEN: provided by GitHub Actions.CRATES_IO_TOKEN: required for publishinglla_plugin_interface,lla_plugin_utils, andlla.
.github/scripts/prepare_release.shupdates release versions and changelog content for the generated PR..github/scripts/release_helpers.shcontains shared validation, expected asset, checksum, crates.io, and GitHub release helpers.scripts/build_plugins.shbuilds plugin dynamic libraries and produces both.tar.gzand.ziparchives for each release target.