This document covers cutting a release of Napaxi and its Flutter SDK package.
Audience: maintainers with push access to the canonical repository and to the
public Flutter SDK release repository (napaxi_flutter_release).
For repository layout see docs/architecture.md. For
the SDK build flow see docs/sdk-integration.md.
Napaxi uses Semantic Versioning. The workspace shares a single version cadence:
napaxi-core,napaxi_skills,napaxi_evolution,napaxi_api_bridgecarry the same Cargoversion.napaxi_flutter(packages/flutter/pubspec.yaml) follows the sameMAJOR.MINOR.PATCH.
Until 1.0.0, breaking changes may land in a 0.MINOR.0 bump. The
Mobile* naming retirement is scheduled for 0.2.0 per
docs/naming-migration.md; do not ship a
breaking rename outside that planned window.
Run from a clean working tree on the default release branch:
git status # must be clean
cargo fmt --all -- --check
cargo clippy --workspace --all-targets -- -D warnings
cargo check --workspace
cargo test --workspace --no-fail-fast
./tools/scripts/build.sh check-boundary
NAPAXI_RELEASE=1 ./tools/scripts/build.sh check-hygiene # placeholder check enforced
cargo deny check
cargo audit
( cd packages/flutter && flutter analyze --no-fatal-infos && flutter test )
( cd examples/flutter && flutter analyze --no-fatal-infos && flutter test )
cargo bench --workspace -- --quick # eyeball against baselineNAPAXI_RELEASE=1 flips check_release_placeholders from warn to fail; if it
trips, fix the placeholder before bumping the version.
- Bump versions in
Cargo.tomlfornapaxi-core,napaxi_skills,napaxi_evolution,napaxi_api_bridge, and inpackages/flutter/pubspec.yaml. Runcargo check --workspaceonce to refreshCargo.lock. - Promote CHANGELOG: move the
## Unreleasedsection under a new## [X.Y.Z] - YYYY-MM-DDheading; start a fresh empty## Unreleased. - Build native artifacts from a clean tree:
The outputs land under
./tools/scripts/build.sh release android ./tools/scripts/build.sh release ios
packages/flutter/android/jniLibs/*/libnapaxi_api_bridge.soandpackages/flutter/ios/Frameworks/napaxi_api_bridge.xcframework. - Sync the public Flutter SDK repo (
napaxi_flutter_release):Then in the release repo:./tools/scripts/sync_prebuilt_to_release_repo.sh # uses ../napaxi_flutter_release by default ./tools/scripts/sync_prebuilt_to_release_repo.sh path/to/napaxi_flutter_releasegit status --short, commit, tagvX.Y.Z, push. - Tag this repo and push:
git commit -am "release: X.Y.Z" git tag -a vX.Y.Z -m "Napaxi X.Y.Z" git push origin HEAD git push origin vX.Y.Z
- Publish a GitHub Release against the tag. Paste the CHANGELOG section.
Attach any pre-built artifacts maintainers want to advertise. Crate
publishing to crates.io is not part of the default release flow; the
workspace currently sets
package.metadata.dist.dist = falseonnapaxi-core.
- Open a follow-up PR that:
- Adds the new
## Unreleasedsection toCHANGELOG.md(already done in step 2, but verify). - Bumps versions to
X.Y.(Z+1)-devif you use a-devsuffix convention, or leaves them atX.Y.Zuntil the next bump (current convention).
- Adds the new
- Announce in the repository discussions / project channel.
Hotfixes branch from the most recent release tag, not from the default development branch. Cherry-pick the fix, bump the patch version, run the pre-release checklist, repeat steps 3–6 above.
CHANGELOG.md: canonical history; promoted by step 2.docs/naming-migration.md: controls when breakingMobile*renames can ship.vendor/libsql-patched/README.md: rebase cadence for the patched dependency; check before any minor release.tools/scripts/sync_prebuilt_to_release_repo.sh: the script invoked in step 4.