We are currently working on transitioning to Trunk Based Development and starting to look at our deployment pipeline and how we can improve.
Our current workflow:
All engineers work on the trunk, frequently committing, which is automatically deployed to our dev environment
When QA sign-off on dev, we generate a release by cutting a release branch (releases/v1.0) from trunk which then will get deployed to our UAT environment. This is a manual approval step. Once approved, the release branch is generated dynamically and pushed to the repo, and also deployed.
Test team (QE) then essentially performs E2E testing in UAT and they request no new code is merged apart from only cherry-picks for P1 defects identified. We cherry pick from trunk. Devs also continue working on trunk fixing any other P2/P3 defects or adding new features.
Once QE sign-off on UAT, that snapshot can then be pushed along to the next environments if applicable, and eventually PROD.
Questions/Problems
In this approach, UAT is updated from the release branch. How can we handle getting sign-off on future work (P2, P3, features) in UAT? Do we need a separate stage for deploying from DEV?
Basically, I am trying to figure out the best approach to handle releases when there is a long gap between sign-off and actual release. This will change in the future as we have plans to introduce feature flags and eventually aim to get to true CI/CD
We currently use Azure DevOps.