Skip to content

Vienna Development Cycle

Barijaona Ramaholimihaso edited this page Jan 29, 2018 · 1 revision

This is inspired mainly by Firefox and Mira processes, but it has been simplified to fit the size of the ViennaRSS team.

1. Labelling of issues

Classification of issues :

  • level 0 : critical-bug
  • level 1 : bug
  • level 2 : improvement / feature request / development feature

Classification criteria :

  • bug : must be reproductible. A clear description has been provided and a developer has confirmed he is able to reproduce the bug at will and can help in debugging it.
  • critical-bug : a bug that is present in current release version (stable branch), needs to be fixed as soon as possible, and can't wait the end of the current development cycle.

Any admin has a veto right regarding the labelling of an issue as a bug (rather than an improvement) or a critical-bug (rather than an "ordinary" bug). This is done because these specific statuses allow expedited processes which may complicate subsequent merges.

2. Branch names in Vienna RSS repository

  • dev-dddd (the dddd number refers to the issue describing the goal of the development)
  • master (betas) (will mature to become the next X.X.0 release)
  • stable (releases) (current X.X.X release)
  • oldstable (releases compatible with version(s) of macOS older than the current minimum requirement)

Merges into master, stable or oldstable MUST be done through a Pull Request and MUST be reviewed.

As a general rule, merges into stable should be done from master.

masterstable

Changes to solve anything else than bugs are NEVER directly added to stable.

There is also a localizations branch where Crowdin updates are pushed. The role of this branch can be seen in Updating localizations.

3. Principles of the development cycle

The development cycle is two months, the first month being focused on modernization work or addition of features and the second month being focused on stabilization.

The end of the development cycle and the release of a new X.X.0 version should occur on last Sundays of January, March, May, July, September and November.

Betas of the future X.X.0 version should be build after significant evolutions of master; they are to be expected at least on last Sundays of February, April, June, August, October and December (unless nothing new has occurred in between…).

3.1 Treatment of critical bugs

Solutions for critical bugs are pulled directly into stable. Whenever multiple solutions are proposed, the solution having the least impact on existing stable code will be privileged and it will be applied as soon as possible.

Longer term solutions can still be proposed, but they will have to go through the master stage.
The logic behind this is that once the bug in itself is closed, anything else — even if it is related to the bug — should be considered as an improvement request.

The hotfix is applied to stable and master.

stable is tested then tagged with a new version number.

In cases where there is enough demand and it does not require too much work, some changes to solve critical bugs MAY be cherry-picked from stable to be pulled into oldstable.

oldstable is therefore tested then tagged with a new version number.

3.2 Treatment of bugs

Solutions for bugs MAY be pulled directly into stable, but are more frequently presented to master. During the second part of the development cycle, whenever multiple solutions are proposed, the solution having the least impact on existing master code should be privileged.

It remains possible to add better "long term" solutions, but they will have to wait the start of the next development cycle to be merged.

3.3 Treatment of improvements and new features

It is recommended that extensive changes are presented at an early stage of the two months development cycle.
This is especially true for architectural changes or technical modernizations which can considerably affect Vienna.xcodeproj/project.pbxproj and might cause difficulties on future merges.

It is developer's choice to either submit a pull request into master or request the creation of a specific dev-dddd branch. In general, features that may take a long time to develop and stabilize should be started on a dev-dddd branch. Smaller size changes can be presented directly to be merged into master, but developers should not expect that big pull requests presented near the end of the development cycle will be quickly reviewed and accepted.

4. Typical lifecycle of a release

Considering two months represent 7 to 8 weeks, here could be the typical story of a release :

Weeks 1-3 :

Focus is on development of new features on master and dev-dddd branches.
Open discussion.

Week 4 :

The release administration group makes go/no go decisions on dev-dddd branches which can be considered stable enough to make it into master. Issues milestones and roadmap documents are updated accordingly.

Reorganization and squash of the commits in dev-dddd branches can be done to hide the sausage making process. Once approved, dev-dddd branches should be rebased before being merged into master.

Base localization is frozen.
Base localization files are updated into Crowdin.

CHANGES and notes.html files are updated.
A new beta of the future X.X.0 version is build and uploaded.

Weeks 5-6 :

Work can continue in dev-dddd branches but priority should be given to stabilization of master regarding issues that might arise as new features and pieces of code are exposed to the wider beta audience.

Localization teams perform their work on the product in Crowdin. Localized strings are weekly reimported from Crowdin.

Betas should be frequently build and uploaded.

Weeks 7-8 :

The release administration group make a review of master. The removal of a feature from master should remain exceptional (last minute efforts to fix or work around residual bugs will generally be preferred), but it cannot be completely excluded (if this might arise, the cancellation would be done by an additional pull request into master).

Final localized strings are reimported from Crowdin.
CHANGES and notes.html files are updated, then master is merged into stable (any conflict should be solved by preserving changes made in master: combinations of git merge -s recursive -X theirs --squash -e [<tree-ish>] and git checkout --theirs [<tree-ish>] [<paths>...] with stable being the current branch might be handy).

The new version number X.X.0 is tagged and uploaded.

5. Tidying up

It is advised that maintainers of dev-dddd branches rebase them regularly on current master.

dev-dddd branches stalled for 4 months or more will be deleted from the ViennaRSS/vienna-rss repository without prior warning.