4.0 KiB
Release Process
This document outlines the process for creating and promoting releases for the Meshtastic Android application. The system is designed to be robust, auditable, and highly automated, using a combination of user-facing GitHub Actions "wizards" and a central, tag-triggered "engine".
Philosophy
- Git Tag Driven: The entire release lifecycle is initiated and controlled by pushing version tags to the repository.
- Automated Engine: A central workflow (
release.yml) acts as the engine, listening for new version tags. It handles all the heavy lifting: building, versioning, uploading to Google Play, and managing GitHub Releases. - User-Friendly Wizards: Manually creating tags is discouraged. Instead, two "wizard" workflows (
create-internal-release.ymlandpromote-release.yml) provide a simple UI in the GitHub Actions tab to guide developers through creating and promoting releases safely.
Versioning Scheme
Releases follow a semantic versioning scheme, vX.Y.Z, with suffixes to denote the release channel and iteration.
v2.8.0-internal.1: An internal build, iteration 1.v2.8.0-closed.1: A closed testing (Alpha) build.v2.8.0-open.1: An open testing (Beta) build.v2.8.0: The final production release.
The Release Lifecycle
Step 1: Creating a New Internal Build
This is the starting point for any new release, whether it's a brand-new version, a patch, or a hotfix.
- Navigate to the Actions tab in the GitHub repository.
- Select the "Create Internal Release Tag" workflow.
- Click "Run workflow".
- Fill in the
base_versionfield with the version you want to create (e.g.,2.8.0). - Run the workflow.
What Happens Automatically:
- The wizard calculates the next iteration number (e.g.,
.1,.2, etc.) and pushes a new tag to the commit (e.g.,v2.8.0-internal.1). - The push triggers the
release.ymlengine, which builds the application, uploads it to the Google Play Internal track, and creates a corresponding draft pre-release on GitHub.
Step 2: Promoting an Existing Build
Once an internal build has been tested and is ready for a wider audience, you promote it.
- Navigate to the Actions tab in the GitHub repository.
- Select the "Promote Release" workflow.
- Click "Run workflow".
- Specify the
target_stage(closed,open, orproduction). The default,auto, will automatically promote to the next logical stage. - Optionally, specify the
base_versionto promote. If left blank, the wizard will find the latest internal tag and use its base version. - Run the workflow.
What Happens Automatically:
- The wizard determines the correct commit from the latest internal tag for that
base_version. - It pushes a new promotion tag (e.g.,
v2.8.0-closed.1) to that commit. - The push triggers the
release.ymlengine. It intelligently skips the build steps and proceeds to:- Promote the build on Google Play to the target track.
- Update the existing draft GitHub Release, renaming it and marking it as a non-draft pre-release (or full release for production).
Special Case: Hotfixes / Superseding a Release
The system is designed to handle hotfixes gracefully. If v2.8.0-internal.1 has been created, but a critical bug is found, the process is simple:
- Merge the fix into your main branch.
- Go to the "Create Internal Release Tag" workflow again.
- Enter the same
base_version:2.8.0.
What Happens Automatically:
- The wizard creates and pushes a new tag,
v2.8.0-internal.2, to the new commit. - The
release.ymlengine detects that an existing release forv2.8.0points to an older commit. - It correctly interprets this as a "superseding" event. It automatically deletes the old GitHub release and its base tag, effectively restarting the release process for
v2.8.0from the new, corrected commit. This prevents a broken or outdated build from ever being promoted.