Reading/Web/Release process/experiment

Rationale
Previously, all extensions were developed in the master branch, which was deployed to the beta cluster continuously, and released following the release train.

This resulted in work in progress (reviewed and merged, but not signed off by design or product) being released to production when it shouldn't have, creating quality and coordination issues in the team's work.

In order to decouple the development process from the release process, so that we can develop and share the work in progress with design and product without worrying about that it will be pushed to production, we are following the release process detailed below.

Projects under the release process

 * QuickSurveys (HISTORY)
 * Gather (HISTORY)

Development

 * For all projects under the release process, development in Gerrit is done on the dev branch.
 * Such branch is pulled every 10 minutes to the reading web staging environment.
 * The staging environment is used for reviewing and sign off.
 * Beta cluster is used for pre-production testing when releasing.
 * Tests run by zuul on patches in dev are matched against the `dev` branch of any other extensions. For example if MobileFrontend and Gather browser and unit tests will be run together against the dev branch of each of these extensions as outlined here. See T116221 for further information.

When to release
Use good judgement when deciding what to release and the release cadence. In general if an extension is in active development we could expect a release cadence that matches the sprint cadence of the teams working on it (for us it is 2 weeks).

When there's a critical bug in production, we fix it on master and swat deploy it, and rebase the dev branch with the hot fix.

Version numbers follow the SemVer specification.

Creating release notes and merging
Follow the instructions on How to Release. Release notes are stored in a History file in the repository, like this one.

How to make an extension follow the release process

 * 1) Add dev branch in Gerrit and migrate default branch from master to dev.
 * 2) Add continuous deploys for dev branch to a staging environment.

Who can release?
In general the tech lead of the Reading Web team will be in charge of releasing the extensions that the Reading Web team, or appointing to someone to do so.

If you want to do a release of some extension create a Phabricator task asking for it and the reasons and add the project of the extension you would like to see a release of. Pinging team members on the irc channel   would also be helpful.

Can I directly merge to master?
Ask your questions on the talk page.

Related discussions

 * https://gist.github.com/phuedx/c41d95648fa86e01ad91
 * https://phabricator.wikimedia.org/T100296