5.2 KiB
Meshtastic-Android Release Process
This document outlines the steps for releasing a new version of the Meshtastic-Android application. Adhering to this process ensures consistency and helps manage the release lifecycle, leveraging automation via the release.yml GitHub Action.
Note on Automation: The release.yml GitHub Action is primarily triggered by pushing a Git tag matching the pattern v* (e.g., v1.2.3, v1.2.3-open.1). It can also be manually triggered via workflow_dispatch from the GitHub Actions UI.
The workflow uses a simple and robust "upload-only" model. It automatically:
- Determines a
versionNamefrom the Git tag. - Generates a unique, always-increasing
versionCodebased on the number of minutes since the Unix epoch. This preventsversionCodeconflicts and will not overflow until the year 6052. - Builds fresh F-Droid (APK) and Google (AAB, APK) artifacts for every run.
- Creates a draft GitHub Release and attaches the artifacts.
- Attests build provenance for the artifacts.
- Uploads the newly built AAB directly to the appropriate track in the Google Play Console based on the tag.
There is no promotion of builds between tracks; every release is a new, independent upload. Finalizing and publishing the GitHub Release and the Google Play Store submission remain manual steps.
Prerequisites
Before initiating the release process, ensure the following are completed:
- Main Branch Stability: The
mainbranch (or your chosen release branch) must be stable, with all features and bug fixes intended for the release merged and thoroughly tested. - Automated Testing: All automated tests must be passing.
- Versioning and Tagging Strategy:
- Tags must start with
vand follow Semantic Versioning (e.g.,vX.X.X). - Use the correct suffixes for the desired release track:
- Internal/QA:
vX.X.X-internal.Y - Closed Alpha:
vX.X.X-closed.Y - Open Alpha/Beta:
vX.X.X-open.Y - Production:
vX.X.X(no suffix)
- Internal/QA:
- Recommendation: Before tagging, update
VERSION_NAME_BASEinbuildSrc/src/main/kotlin/Configs.ktto match theX.X.Xpart of your tag. This ensures consistency for local development builds.
- Tags must start with
Core Release Workflow: Triggering via Tag Push
- Create and push a tag for the desired release track.
# This build will be uploaded and rolled out on the 'internal' track git tag v1.2.3-internal.1 git push origin v1.2.3-internal.1 - Wait for the workflow to complete.
- Verify the build in the Google Play Console and with testers.
- When ready to advance to the next track, create and push a new tag.
# This will create and upload a NEW build to the 'NewAlpha' (closed alpha) track git tag v1.2.3-closed.1 git push origin v1.2.3-closed.1
Iterating on a Bad Build
If you discover a critical bug in a build, the process is simple:
- Fix the Code: Merge the necessary bug fixes into your main branch.
- Create a New Iteration Tag: Create a new tag for the same release phase, simply incrementing the final number.
# If v1.2.3-internal.1 was bad, the new build is v1.2.3-internal.2 git tag v1.2.3-internal.2 git push origin v1.2.3-internal.2 - A New Build is Uploaded: The workflow will run, generate a new epoch-minute-based
versionCode, and upload a fresh build to theinternaltrack. There is no risk of aversionCodecollision.
Managing Different Release Phases (Manual Steps Post-Workflow)
After the release.yml workflow completes, manual actions are needed on GitHub and in the Google Play Console.
Phase 1: Internal / QA Release
- Tag format:
vX.X.X-internal.Y - Automated Action: The AAB is uploaded to the
internaltrack and rolled out automatically. - Manual Steps:
- GitHub: Find the draft release, verify artifacts, and publish it if desired.
- Google Play Console: Verify the release has been successfully rolled out to internal testers.
Phase 2: Closed Alpha Release
- Tag format:
vX.X.X-closed.Y - Automated Action: A new AAB is built and uploaded as a draft to the
NewAlphatrack. - Manual Steps:
- GitHub: Find and publish the draft release.
- Google Play Console: Manually review the draft release and submit it for your closed alpha testers.
Phase 3: Open Alpha / Beta Release
- Tag format:
vX.X.X-open.Y - Automated Action: A new AAB is built and uploaded as a draft to the
betatrack. - Manual Steps:
- GitHub: Find and publish the draft pre-release.
- Google Play Console: Manually review the draft, add release notes, and submit it.
Phase 4: Production Release
- Tag format:
vX.X.X - Automated Action: A new AAB is built and uploaded to the
productiontrack. By default, it is configured for a 10% staged rollout. - Manual Steps:
- GitHub: Find the draft release. Crucially, uncheck "This is a pre-release" before publishing.
- Google Play Console: Manually review the release, add release notes, and start the staged rollout.