# Development and Release Workflow
# Environments
# Live
- Production environment
- Deployed from
release/livebranch with tags
# Pre-release
- Regression test environment
- Deployed from
prereleasebranch
# Stage
- Testing environment
- Configuration same as live environment
- Connect to Stage Global Login service
- Deployed from
trunkbranch
# Sandbox
- Playground for developers
- Deployed from
developbranch - Connect to Stage Global Login service
- Global login for CORE disable (so that we don’t need to do MFA)
# Branches
# release/live branch
- Used to track the latest released code
# prerelease branch
- Used for regression test
- Only merge new code to this branch right before a regression test
# golive branch
- Temporary branch, used for each hotfix/normal release
- A few golive branches may exist at the same time. e.g.
golive/2.2.1.4golive/2.2.1.5golive/2.2.2 - Deleted after release
- Naming convention
golive/{version}golive/1.3.5
# trunk
- Used for normal testing
- Pull Request require checks(SonarClould, code review)
# develop
- Playground for developer
- Do not require pull request checks. Developer can push code to
developbranch whenever needed, including debug codes
# feature/bugfix/hotfix branch
- Temporary branch, used for development
- Auto deleted after pull request get merged
- Naming convention
{prefix}/{JIRA story code}/{JIRA story title}feature/CORE-1234/Example-feature-core-story
# Development workflow
- Feature development
- Branch out from
golive/*branch - Once development finished, merge to
trunkbranch for testing - Once testing passed, merge to
golive/*branch
- Branch out from
- Bugfix development
- Branch out from
release/livebranch (in case we want to hotfix release it) - Once development finished, merge to
trunkbranch for testing - Once testing passed, merge to
golive/*branch
- Branch out from
- Hotfix development
- Create
golive/*branch for this hotfix (branch out fromrelease/live) - Create hotfix branch (branch out from the
golive/*branch for this hotfix) - Once development finished, merge to
trunkbranch for testing - Once testing passed, merge to the
golive/*branch for this hotfix
- Create
# Release workflow
Once all tickets in one release have passed tests and marked as done. It's the time to start the release workflow
- Define Regression and PVT scope - Risk Assess areas
- Merge
golive/*branch toprereleasebranch so that it will deploy to thepre-releaseenvironment - QA start regression test on
pre-releaseenvironment- Hotfix on
golive/*branch if defects found
- Hotfix on
- Merge
prereleasetorelease/liveand create a new tag onrelease/livebranch once regression test finished - Compare the new tag with the live tag to make sure the code changes in the new tag are correct to be released
- Announce the scheduled release time in Slack release channel
- Trigger the release
- QA do PVT on live
- Announce the release in Slack to broader team
# Release versioning
- We will use the same version across all repos for feature version change e.g. 2.2.1 to 2.2.2
- For each feature and hotfix release (e.g. 2.2.1.4 to 2.2.1.5), we will always release
core,graphql,appthese 3 repos, even if there are no code changes in one of the repos - When we do a feature release (e.g. 2.2.1 to 2.2.2), releaes all repos (including chat-api, login-api, login-app, statistics, template-lib-api, messaging-service, webhooks, etc.) even if there are no code changes in any of the repos
Example 1:
- We are doing a feature release 2.2.1 to 2.2.2
- We will create tag version 2.2.2 to all repos
- We will release all repos
- Every repo will be at 2.2.2
Example 2:
- We are doing a hotfix release 2.2.1.4 to 2.2.1.5
- We will create tag version 2.2.1.5 only to
core,graphql,app, or if there are code changes from any of the other repo, also create tage verion 2.2.1.5 to it - We will only release
core,graphql,appthese 3 repos if there are no code changes from other repos core,graphql,appwill be at 2.2.1.5- Other repos stays at the feature version 2.2.1