Release Management & Fastlane
Relevant source files
The following files were used as context for generating this wiki page:
Release Management in LuCI Mobile encompasses the automated procedures for versioning, tagging, and deploying the application to various distribution platforms. The project uses a CI-driven approach where local scripts initiate the release workflow, and external tools like Fastlane manage store-specific metadata and assets.
The system ensures that every release follows Semantic Versioning and maintains consistent metadata across the Google Play Store, Apple App Store, and IzzyOnDroid.
Sources: scripts/release.sh:1-3, CONTRIBUTING.md:278-283, README.md:12-21
Versioning System
The project adheres to Semantic Versioning (SemVer) principles to manage the evolution of the software. Version identifiers are defined in the pubspec.yaml file and consist of a version name and a build number.
Version Components
| Component | Format | Purpose |
|---|---|---|
| MAJOR | X.0.0 | Incremented for breaking changes. |
| MINOR | 0.X.0 | Incremented for backward-compatible new features. |
| PATCH | 0.0.X | Incremented for backward-compatible bug fixes. |
| Build Number | +N | Incremented with every release; used as versionCode (Android) and CFBundleVersion (iOS). |
Sources: CONTRIBUTING.md:278-285, pubspec.yaml:7-19
Automation with release.sh
The scripts/release.sh script automates the local portion of the release process. It ensures the environment is valid, updates versioning strings, and triggers the CI pipeline via Git tags.
Release Execution Flow
The script follows a linear progression to transition the codebase from a development state to a tagged release state.
The diagram shows the logic used by the release script to validate the environment and increment version numbers before pushing to the remote repository.
Sources: scripts/release.sh:23-42, scripts/release.sh:88-109
Key Script Logic
- Environment Validation: The script verifies it is running in the project root by checking for
pubspec.yamland ensures no uncommitted changes exist. - Version Parsing: It extracts version components using
grepandsedfrom thepubspec.yamlfile. - File Update: It uses
sedto replace the version line inpubspec.yamlwith the new version and an incremented build number. - Git Tagging: It creates an annotated tag (e.g.,
v2.0.1) which triggers the GitHub Actions or CI environment.
Sources: scripts/release.sh:23-32, scripts/release.sh:91-104
Fastlane and Metadata Management
The project uses Fastlane to manage store-specific assets and descriptions. This metadata is stored in the fastlane/metadata directory, allowing version-controlled updates to store listings.
Directory Structure and Content
| File Path | Description |
|---|---|
fastlane/metadata/android/en-US/title.txt | The application name displayed in the store. |
fastlane/metadata/android/en-US/full_description.txt | Detailed feature list and requirements for users. |
fastlane/metadata/android/en-US/changelogs/ | Contains numbered .txt files (e.g., 1.txt) for version-specific release notes. |
fastlane/metadata/android/en-US/images/ | Stores phone screenshots used for store previews. |
Sources: fastlane/metadata/android/en-US/full_description.txt:1-40, fastlane/metadata/android/en-US/changelogs/1.txt:1, README.md:46-52
Release Checklist
Before a release is finalized, the following conditions must be met as specified in the contribution guidelines:
- Testing: All unit and integration tests must pass (
flutter test). - Analysis: Static analysis must return no fatal errors (
flutter analyze). - Documentation: The
README.mdand API documentation must reflect new features. - Changelog: Release notes must be added to the appropriate Fastlane metadata directory.
- Clean State: The working directory must be clean before running the release script.
Sources: CONTRIBUTING.md:287-293, scripts/release.sh:29-32, CONTRIBUTING.md:129-136
Conclusion
LuCI Mobile utilizes a structured release process that combines local shell scripts for versioning with CI/CD for final distribution. By strictly following Semantic Versioning and maintaining store metadata within the repository via Fastlane, the project ensures reliable and transparent updates for users across different mobile platforms.
Sources: scripts/release.sh:109, README.md:54-56