Skip to content

Branching, Versioning & Release Strategy

Andrés Pedraza Míguez edited this page Dec 7, 2025 · 5 revisions

This project implements a highly automated GitFlow-inspired workflow. We use GitHub Actions to handle branch creation, version bumping, changelog generation, and APK distribution.

🚀 The Golden Rule

Never modify version.properties manually. The CI/CD pipelines manage the version numbers based on the branch names and PR labels.


♻️ The Development Lifecycle

1. Start with an Issue

Everything starts by opening a GitHub Issue.

  • Describe the Feature, Bug, or Enhancement.
  • Automation: A GitHub Action will detect the issue type and automatically create a branch for you.
  • Feedback: The bot will post a comment on the issue with the git command to checkout your new branch.

2. Development

  • Switch to the branch created by the bot (e.g., feature/EXSHAPP-0123).
  • Push your commits normally.

3. Pull Request (PR)

  • When ready, open a PR targeting develop (for features) or main (for hotfixes).
  • Naming Convention: The pipeline validates your branch name. It must follow the pattern: type/EXSHAPP-xxxx.
  • Auto-Labeling: The bot will label your PR (feature, bug, etc.) based on the branch prefix.

4. Merging & Release

When a PR is merged, specific workflows trigger based on the target branch.


🌿 Branching Model

Branch Type Prefix Base Branch Target Branch Auto-Increment Logic
Feature feature/ develop develop None (Stays on Snapshot)
Bugfix bugfix/ develop develop None (Stays on Snapshot)
Refactor refactor/ develop develop None (Stays on Snapshot)
Hotfix hotfix/ main main Patch (0.11.0 -> 0.11.1)
Release release/ develop main Removes Snapshot

📦 How to Release

Standard Release (Minor Bump)

  1. Create a PR from develop to main.
  2. The label release is automatically added to the PR.
  3. Action: The "Prepare Version" workflow runs automatically.
    • Removes -SNAPSHOT from version.properties.
    • Commits the change to the PR.
  4. Merge: Once merged into main:
    • Build: A signed Release APK is generated.
    • Publish: A GitHub Release is created with the automated Changelog.
    • Sync: main is merged back into develop.
    • Bump: develop version is bumped to the next Minor + SNAPSHOT (e.g., 0.11.0 -> 0.12.0-SNAPSHOT).

Major Release (Major Bump)

  1. Follow the Standard Release steps.
  2. Add the label major to the PR (along with release).
  3. Action: The workflow will bump the Major version instead (e.g., 0.11.0 -> 1.0.0).

Hotfix (Patch Bump)

  1. Create an issue for the bug.
  2. The bot creates a hotfix/EXSHAPP-xxxx branch from main.
  3. Fix the bug and open a PR to main.
  4. Action: The workflow detects the hotfix/ prefix.
    • Bumps the Patch version (e.g., 0.11.0 -> 0.11.1).
    • Removes -SNAPSHOT.
  5. Merge: Releases the new patch version and syncs the fix back to develop.

📄 Configuration Files

  • version.properties: Source of truth for the app version. Managed by bots.
  • .github/workflows/: Contains all the automation logic (sync, release, branch-naming, etc.).

Clone this wiki locally