8.2 KiB
Meshtastic-Android Release Process
zzThis 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 (select the desired branch/tag/commit).
The workflow automatically:
- Determines version information (version name from the tag, version code via a script).
- Builds F-Droid (APK) and Google (AAB, APK) artifacts in parallel.
- Generates a changelog.
- Creates a draft GitHub Release. The release is marked as a "pre-release" if the tag name contains
-internal,-closed, or-open. - Attaches build artifacts,
version_info.txt, andchangelog.txtto the draft GitHub Release. - Attests build provenance for the artifacts.
- Uploads the AAB to the Google Play Console as a draft to a track determined by the tag name:
internal(for tags with-internal)NewAlpha(for tags with-closed)beta(for tags with-open)production(for tags without these suffixes)
Finalizing and publishing the GitHub Release and the Google Play Store submission are 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 (unit, integration, UI) must be passing on the release candidate code, and CI checks on pull requests must be green.
- Versioning and Tagging Strategy:
- The primary source for the release version name in the CI workflow is the Git tag (e.g.,
v1.2.3results in version name1.2.3). - Tags must start with
vand generally follow Semantic Versioning (e.g.,vX.X.X). - For pre-releases, use suffixes that the workflow recognizes to set the GitHub pre-release flag and Play Store track:
- Internal/QA:
vX.X.X-internal.Y(e.g.,v1.2.3-internal.1) - Closed Alpha:
vX.X.X-closed.Y(e.g.,v1.2.3-closed.1) - Open Alpha/Beta:
vX.X.X-open.Y(e.g.,v1.2.3-open.1)
- Internal/QA:
- Production releases use no suffix (e.g.,
vX.X.X). TheYin suffixes is an increment for iterations of the same pre-release type. - Recommendation: Before tagging, update
VERSION_NAME_BASEinbuildSrc/src/main/kotlin/Configs.ktto match theX.X.Xpart of your tag. This ensures consistency if the app uses this value internally. The CI workflow derivesAPP_VERSION_NAMEdirectly from the tag and passes it to Gradle.
- The primary source for the release version name in the CI workflow is the Git tag (e.g.,
- Final Checks: Perform thorough manual testing of critical user flows and new features on various devices and Android versions.
Core Release Workflow: Triggering via Tag Push
The primary way to initiate a release is by creating and pushing a tag:
- Ensure Local Branch is Synced:
# Example: if releasing from main git checkout main git pull origin main - Create and Push Tag:
Tag the commit you intend to release (e.g., the head of
mainor a release branch).
Or, for a production release:# Example for an open beta release git tag v1.2.3-open.1 git push origin v1.2.3-open.1git tag v1.2.3 git push origin v1.2.3
Pushing the tag automatically triggers the release.yml GitHub Action, which performs the automated steps listed in the "Note on Automation" section at the beginning of this document.
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(e.g.,v1.2.3-internal.1) - Branching (Optional):
- Consider creating a
release/x.x.xbranch frommain. - Update
Configs.kton this branch. - Create a draft PR from
release/x.x.xtomain. Tag a commit on this branch.
- Consider creating a
- Manual Steps Post-Workflow:
- GitHub:
- Navigate to the "Releases" page of the repository.
- Find the draft release (e.g., "Release v1.2.3-internal.1"). It will be marked as "pre-release".
- Verify the attached artifacts.
- You can choose to publish this pre-release if you want it formally listed, or simply use the artifacts from the draft for internal distribution.
- Google Play Console:
- The AAB will be uploaded as a draft to the
qatrack. - Review the draft release in the Play Console and promote/submit it as needed for your internal testers.
- The AAB will be uploaded as a draft to the
- GitHub:
Phase 2: Closed Alpha Release
- Tag format:
vX.X.X-closed.Y(e.g.,v1.2.3-closed.1) - Manual Steps Post-Workflow:
- GitHub:
- Find the draft release. It will be marked as "pre-release".
- Verify artifacts. Consider publishing it as a pre-release for wider internal visibility if appropriate.
- Google Play Console:
- The AAB will be a draft on the
newalphatrack. - Review and submit it for your closed alpha testers.
- The AAB will be a draft on the
- GitHub:
Phase 3: Open Alpha / Beta Release
- Tag format:
vX.X.X-open.Y(e.g.,v1.2.3-open.1) - Manual Steps Post-Workflow:
- GitHub:
- Find the draft release. It will be marked as "pre-release".
- Edit the release: Review the title (e.g., "Release v1.2.3-open.1") and the auto-generated changelog.
- Ensure "This is a pre-release" is checked.
- Publish the release on GitHub. This makes it visible to the public.
- Google Play Console:
- The AAB will be a draft on the
betatrack. - Review, add release notes (can copy from GitHub changelog), and submit it for your open testers.
- The AAB will be a draft on the
- GitHub:
Phase 4: Production Release
- Tag format:
vX.X.X(e.g.,v1.2.3) - Branching:
- Ensure all changes for the release are merged into
main. - Tag the final merge commit on
main.
- Ensure all changes for the release are merged into
- Manual Steps Post-Workflow:
- GitHub:
- Find the draft release (e.g., "Release v1.2.3").
- Edit the release: Review title and changelog.
- Crucially, uncheck "This is a pre-release".
- Publish the release on GitHub.
- Google Play Console:
- The AAB will be a draft on the
productiontrack. - Review, add release notes.
- Start a staged rollout or release to 100% of users.
- The AAB will be a draft on the
- GitHub:
Iterating on Pre-Releases
If bugs are found in an internal, closed, or open alpha/beta:
- Commit fixes to your development branch (e.g.,
release/x.x.xormain). - Create a new, incremented tag (e.g., if
v1.2.3-open.1had bugs, usev1.2.3-open.2). - Push the new tag.
- Follow the manual post-workflow steps for that release phase again.
Post-Release Activities
- Monitoring: Closely monitor app performance, crash reports, and user feedback.
- Communication: Announce the new release to the user community as appropriate.
- Hotfixes (for Production Releases):
- If a critical bug is found in a production release:
- Create a hotfix branch (e.g.,
hotfix/x.x.y) frommain(or directly from the production tagvX.X.X). - Implement and test the fix.
- Update
VERSION_NAME_BASEinbuildSrc/src/main/kotlin/Configs.ktfor the patch version (e.g.,1.2.4). - Merge the hotfix branch into
main. - Tag the merge commit on
mainwith the new patch version (e.g.,v1.2.4). - Push the new tag (e.g.,
git push origin v1.2.4). This triggers therelease.ymlworkflow. - Follow the Manual Steps Post-Workflow for a Production Release (uncheck "pre-release" on GitHub, manage production track draft in Play Console).
- Create a hotfix branch (e.g.,
- If a critical bug is found in a production release: