This documentation describes the CI/CD system and versioning process for the MoveTopia app.
Our version numbers follow the format:
YYYY.MM.DD+HOTFIX
Example: 2025.04.03+0
- YYYY.MM.DD: Date of the build
- HOTFIX: A number that is automatically incremented when multiple builds are created on the same day
The MoveTopia app follows a branch structure that supports continuous integration and delivery:
-
main: The main branch for stable releases
- Each merge to
maintriggers a complete release build - Creates APK and AAB
- Automatically publishes on GitHub as a release (not pre-release)
- Automatically deploys to the Google Play Store (internal track)
- Each merge to
-
development: Development branch for feature integration
- Each merge to
developmenttriggers a release APK build - Creates only APK (no AAB)
- Publishes on GitHub as a pre-release
- No automatic deployment to Google Play Store
- Each merge to
- Feature branches are branched from
development - Development takes place in feature branches
- Pull Requests are created to
development - After successful CI check, PRs are merged into
development - An automatic pre-release is created
- When
developmentis stable, a PR fromdevelopmenttomainis created - After successful CI check, the PR is merged into
main - Automatic release build is created (APK and AAB)
- Complete GitHub release is created
- AAB is automatically uploaded to the Google Play Store (internal track)
The project uses GitHub Actions for automated builds and releases. The workflows are located in the .github/workflows/ directory.
File: .github/workflows/build-dev-release.yml
This workflow is automatically triggered:
- On every push to the
developmentbranch - Manually via the GitHub interface
Features:
- Creates a release APK
- Uploads the build as an artifact
- Creates a GitHub pre-release with a tag in the format
YYYY.MM.DD+HOTFIX - Marks releases as "pre-release"
File: .github/workflows/build-android-release.yml
This workflow is automatically triggered:
- On every push to the
mainbranch - Manually via the GitHub interface
Features:
- Creates a release APK and an App Bundle (AAB)
- Uploads the build as an artifact
- Creates a GitHub release with a tag in the format
YYYY.MM.DD+HOTFIX - Creates an official release (not marked as pre-release)
- Deploys the AAB to the Google Play Store (internal track)
File: .github/workflows/build-android-debug.yml
This workflow is only triggered manually.
Features:
- Creates a debug APK
- Uploads the build as an artifact
- Does not create a GitHub release
File: .github/workflows/pr-check.yml
This workflow is automatically triggered:
- On Pull Requests to the branches
mainanddevelopment
Features:
- Performs a debug build to check buildability
- Can be skipped with the labels
docs-onlyorno-build
For build process automation, we use Fastlane. The configuration is located in the android/fastlane directory.
- Automatic Version Generation: Based on the current date and existing Git tags
- Android Build Configuration: Updates the
local.propertiesfile for the native Android build (not tracked by Git) - Flutter Version: Generates a
version.dartfile with all version information for the app
build_debug: Creates a debug build of the appbuild_release: Creates a release build of the app without deploymentbuild_debug_with_release: Creates a debug build with complete version informationbuild_release_and_deploy: Creates a release build with complete version information and deploys to the Google Play Store
If you want to set a specific version for a build, you have the following options:
-
Via local.properties: Edit the file
android/local.propertiesand set:flutter.versionName=YOUR.VERSION.HERE.0 flutter.versionCode=YOURCODENUMBERNote: This file is ignored by Git and won't be pushed to the repository.
-
Via Environment Variables: Set the following environment variables before running Fastlane:
export VERSION_NAME="2025.04.03+1" export BUILD_NUMBER="2025040301"
-
Directly in the GitHub Workflow: You can manually define values for env.VERSION_NAME by customizing the workflow.
Note: After a manual version update, you should synchronize your local repository with the current changes.