Branching Workflow (Git-Flow)
See this article on git-flow for pretty pictures, as that is essentially what is being described here.
Branching Conventions
We have 2 branches that never die: main and dev.
main represents current production code. dev represents new changes on "next release"
Then we should also have these sub-types of branches:
feature bugfix hotfix release
It would be great to also enforce a branch naming convention where these are mandatory and also have the github issue included:
<branch-type>/<github-issue-number>+<short-descriptor>
New feature work:
To create a new branch for new work, create a branch off of
devUse this convention:
feature/<github-issue-number>+<short-description>If no github issue exists, create one first. Additional github issue number can be appended when necessary, but ideally we are trying to keep PRs as narrowly focused as possible.
PRs will be opened against
dev.
// pick up issue 777
git fetch
git checkout -b feature/777-implement-annoying-popup origin/dev
git commit -m 'adds annoying popup'
git push
// open PR against dev branchReleases:
Tag and deploy the release to staging using our GitHub action.
Create a release branch off of
devUse this convention:
release/v1.2(just major-minor, as the could have any patch version as bugfixes are merged in)Push to remote
(Bugfixes for this release version will get merged into this branch)
After deploying the release to prod, merge the release branch down into both
mainanddev.Then delete the release branch! We do not need to maintain this branch any longer, it is now part of
main
Bugfixes:
If issues are found in staging environment where release code is deployed...
Create bug GitHub Issue
Checkout the release branch from remote
Create new branch with this convention:
bugfix/<github-issue-number>+<short-description>PRs will be opened against the release branch
After merged, run
Create Releaseaction again, this time off of the release branch, to tag and redeploy to staging. (This will pip the patch version)
// create bugfix issue 778
git fetch
git checkout -b bugfix/778-horrible-error origin/releases/v1.2
git commit -m 'fixed horrible error'
git push
// open PR against releases/v1.2
// run 'Create Release' to redeployHotfixes
If issues are found in production...
Create a hotfix Github issue
Check out
mainCreate a hotfix test branch
hotfix-staging/v0.1(so we can open a proper PR instead of just pushing hotfix code to a test region)Push hotfix test branch to remote.
Create local hotfix branch
hotfix/779-oops-all-berriesOpen PR against
hotfix/v0.1After run, do Create Release again to deploy the hotfix test branch to staging. [ temporarily using staging env for hotfix instead of release code]
After deploying the hotfix to production, we would need merge the
hotfix/v0.1code down into currentreleases/v1.2,dev, andmainRedeploy the release code in AWS