Recently I've been working on a project where certain devs are not privvy to client-specific details, and this aspect has lead to a rather interesting build workflow.
As such, devs are only able to build
debug specific Android releases, and
release type releases for debugging purposes. However, actual release-builds require certain changes to the specific app Gradle config, and this is why I am maintaining a dedicated
release branch alongside
dev. It should be noted, that the
release branch was infact a fork of
This workflow is based on the excellent Successful Git branching Model by nvie and cutting a release has a couple extra steps.
-> % git co dev -> % git co -b release-0.1.7 Switched to a new branch 'release-0.1.7' -> % mvim CHANGELOG.md -> % git st ## release-0.1.7 M CHANGELOG.md M MyApp/app/build.gradle -> % git c "Bump version for release" [release-0.1.7 032e3c2] Bump version for release 2 files changed, 9 insertions(+), 2 deletions(-) # For this particular workflow, we maintain a branch called `release`, originally a fork of `dev`. # # The `release` branch contains release specific details, that we do not wish to share with rest # of the team, such as specific Gradle configs etc. -> % git co release Switched to branch 'release' Your branch is up-to-date with 'bitbucket/release'. -> % git co -b prep/release-0.1.7 Switched to a new branch 'prep/release-0.1.7' # Here we merge our release changes into the dedicated `prep/release` branch. -> % git merge --no-ff release-0.1.7 # This is where we create the final build, and merge this back to `release` with any changes. -> % git co release Switched to branch 'release' Your branch is up-to-date with 'bitbucket/release'. -> % git merge --no-ff prep/release-0.1.7 -> % git b -d prep/release-0.1.7 Deleted branch prep/release-0.1.7 (was 425f5f6). # Finish the release, by merging back to master. -> % git co master Switched to branch 'master' Your branch is up-to-date with 'origin/master'. -> % git merge --no-ff release-0.1.7 -> % git tag -a v0.1.7 -m "Release v0.1.7" # Merge any changes in the release back to dev. -> % git co dev Switched to branch 'dev' Your branch is up-to-date with 'origin/dev'. -> % git merge --no-ff release-0.1.7 Merge made by the 'recursive' strategy. CHANGELOG.md | 7 +++++++ MyApp/app/build.gradle | 4 ++-- 2 files changed, 9 insertions(+), 2 deletions(-) -> % git b -d release-0.1.7