This document outlines the process for preparing and making a release for Meshtastic.
- Branching Strategy
- Preparing for a Release
- Creating a Release Branch
- Docs Release Step
- Documentation Publishing & Website Sync
- Finalizing the Release
- Main Branch (
main): This is the main development branch where daily development occurs. - Release Branch (
X.YY.ZZ-release): This branch is created frommainfor preparing a specific release version.
- Ensure all desired features and fixes are merged into the
mainbranch. - Update the version number in the relevant files.
- Update the project documentation to reflect the upcoming release.
- Create a release branch from
main../scripts/create-release-branch.sh
Before creating the final tag, rebuild the in-app docs without the pre-release banner and commit the result. This ensures App Store users see clean documentation without the “Pre-release — subject to change” warning.
- Ensure
MARKETING_VERSIONin the Xcode project already matches the version you are about to release (this is typically set weeks earlier when the build entered TestFlight). - Run the release docs script:
The script will:
bash scripts/cut-release-docs.sh X.YY.ZZ
- Verify
MARKETING_VERSIONmatches the argument - Rebuild all bundled HTML
- Commit the result with message
docs: rebuild for vX.YY.ZZ release - Create annotated tag
vX.YY.ZZ
- Verify
- Push the commit and tag:
git push origin X.YY.ZZ-release git push origin vX.YY.ZZ
For full details and error recovery, see
specs/013-docs-release-versioning/quickstart.md.
Documentation publishes only at a tagged release — never from day-to-day commits
to main. Pushing the vX.YY.ZZ tag (step 3 above) runs two GitHub Actions
workflows:
| Workflow | What it does |
|---|---|
docs-release.yml |
Builds and deploys this repo's GitHub Pages docs site. |
docs-release-bundle.yml |
Creates the GitHub Release for the tag and attaches meshtastic-apple-docs-<version>.tar.gz — the canonical English user/developer guides and screenshots, in the repo's docs/ layout. |
Website (meshtastic.org) sync. The main docs site pulls Apple docs from this repo
via its sync-apple-docs job. That job downloads the latest Meshtastic-Apple
release asset (meshtastic-apple-docs-*.tar.gz) and runs sync-apple-docs.js
against it — it does not clone main. So the published Apple docs are pegged to
the released app version and only change when a new vX.YY.ZZ tag is cut, not on
every docs commit to main.
The website sync runs on a weekly schedule (and on demand). The first sync after a release picks up the new bundle automatically; to publish sooner, manually run the
Sync Apple App Documentationworkflow in themeshtastic/meshtasticrepo.
- Perform final testing and quality checks on the
X.YY.ZZ-releasebranch. a. If any hotfix changes are required, merge those changes intoX.YY.ZZ-release. b. After merging these changes into the release branch, cherry-pick the changes ontomain. - Once everything is ready, push the final release tag. Use the
v-prefixed form — this is the samevX.YY.ZZtag created by the Docs Release Step, and the docs release workflows only trigger onv*.*.*(a bareX.YY.ZZtag would never publish the docs bundle or Pages). See Documentation Publishing & Website Sync.git tag -a vX.YY.ZZ -m "Release vX.YY.ZZ" git push origin vX.YY.ZZ
Thank you for following the release process and helping to ensure the stability and quality of Meshtastic!
Feel free to modify this template to better fit your project's specific needs.