MergeWorkflow

Not logged in - Log In / Register

Revision 30 as of 2010-11-08 18:30:41

Clear message

This is a description of how a developer branch flows through the different 'official' branches we have, after the developer branch is ready for landing.

Merge Workflow

Branches without db changes (or dependencies on pending db changes) land on the stable branch and are rolled out every 30 minutes to a "QA testing" server for QA. Revisions that have been marked QA-OK are [[https://devpad.canonical.com/~lpqateam/qa_reports/deployment-stable.html|eligible] for deployment. Deployment takes a specific revision of stable and deploys that to a named set of machines. The default set is nodowntime which encompasses all services that we can deploy to without user visible downtime.

Branches that contain db changes land on the db-stable branch, and are QA'd on staging. The db-stable branch automatically merges changes from stable via a push event in Buildbot. DB changes are rolled out to production and merged back into stable once a month.

mergeworkflow.png

(Old image: merge-workflow-draft-2.jpeg)

The QA step

A revision gets deployed only after it has been marked as good in the QA step. This helps ensure that we don't rollout feature to launchpad.net that haven't been QAed.

In addition to this, a revision only gets deployed if all the previous revisions have been marked as good as well. This is because cherrypicking can invalidate QA efforts when patches have non-obvious dependencies.

How the QA step works regarding to marking the revision as good/bad is described on QAProcessContinuousRollouts.

What if I don't do my QA, or my QA is bad?

If someone does not do their QA, or their branch fails QA, then they will block deployments until that revision is reverted and the intervening revisions have also been QA'd. Rollouts from stable to the QA server will still continue, so other developers can still continue their QA as normal.

We assume a two day grace period for QA - if on the third day a branch has not been QA'd, then anyone on the team may revert the offending revision.

What if I have to do QA that takes a few days?

If a feature requires more than one day of QA, then developers have the option to do the QA on the staging.launchpad.net server, to requisition an additional server, (dogfood), or ask for permission to block the daily QA rollouts for more than two or three days.

The Rollout

  1. Block deployments to all machines
  2. lock down devel landings (to release-critical)
  3. merge the qa-approved changes from db-stable to devel
  4. qastaging will then get the db patches included in it
  5. qa up through the db patch merge and nominate the revision to deploy
  6. unlock devel landings
  7. at the scheduled time do a db deploy of the nominated revision
  8. unlock deployments

Large Features That Span Branches

If you have a feature that will span multiple branches, then it is expected that the developers will create a feature switch to optionally enable that part of the code, or that early branches that have no user-facing changes will be marked as qa-untestable.

Emergency Fixes/Cherry Picks

Either (for confidential non-ZOMG fixes):

  1. Block deployments (of the affected servers)
  2. push the current deployed revision to prod-devel
  3. land on prod-devel
  4. deploy from prod stable
  5. merge from prod-stable to devel
  6. wait for qa blessing for everything outstanding up through the fix rev
  7. unblock deployments

Or (for zomg fixes):

  1. Block deployments of the affected servers
  2. use a cowboy
  3. Land on devel
  4. wait for qa blessing for everything outstanding up through the fix rev
  5. unblock deployments