Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Development Processes #13

Merged
merged 15 commits into from
Sep 5, 2018
Merged
96 changes: 96 additions & 0 deletions Client_Release_Process.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,96 @@
# Client Release Process
The purpose of this document is to define the client release process at a high level, establishing a standard process so that the community knows what to expect and where they can help with new versions of the client. In order to understand this process, it is useful to first understand the [development workflow](https://github.com/BOINC/boinc-policy/blob/master/Development_Workflow.md).
## Overview
The release process will produce some or all of the following items:
- Downloadable binaries for a new version of the client software for:
- 32 bit Windows (one with VirtualBox and one without)
- 64 bit Windows (one with VirtualBox and one without)
- 64 bit OSX
- Updated application in the Google Play Store
- Updated versions of the Linux client by the package maintainers for EPEL and Debian
- Documentation about features
- Release notes / version history
- Announcements

In order to produce this, the following need to be updated, built, and tested:
- The code used to build the binaries
- Dependent libraries
- Copyright and other legal information
- Installer definitions
- All text included in screen displays, messages, etc.
- Translations of text
- Test cases and their outcomes
- Any included data (e.g. 'all projects list' and ca-bundle)

## Roles
The process of releasing the client requires the work of a number of people in the community. As such there are some additional roles that are useful to define for this process. Note that one person can serve in one or more roles during the process (for example, one person can be the release manager as well as the build master for Windows).

### Release Manager
The release manager is the person who manages the release process. He or she is responsible for the communications and coordination required to get the release built, tested, and announced. Some of the things the release manager is expected to do are:
- Announce the intention to make a new release of the client
- Ask if anyone has anything that they are working on that they want to include the release.
- Coordinate the builds of the client
- Coordinate the testing of each build of the client
- As bugs are found during testing, identify which ones will be fixed and included in the current release vs deferred to a future release
- Ensure that all required items that need to be updated in the release have been updated (see list of items produced in a release in the overview above)
- Call for a consensus vote of committers to determine if a build is ready to be declared as generally available
Throughout the process, the release manager is expected to communicate what is going on as the work progresses and make sure to address concerns that are raised as the work progresses.

### Build Master
Someone needs to be responsible for building the clients for each of Windows, Mac, Linux, and Android. It can be a different person or the same person for each platform. These people will be responsible for creating official builds when the release manager requests a new build. Build masters will work with the PMC in order to gain access to any signing keys or login rights required to create builds for their platforms.
The build masters will work with the release manager in order to ensure that new builds are created at the requested times as the release work proceeds.

### Testers
People who want to help test the client releases should be familiar with the [Alpha Testing](https://boinc.berkeley.edu/trac/wiki/AlphaInstructions) wiki page and associated processes.

## Process
### Prepare for a Release
The release manager will announce the intention to make a new release of the client. When they do this they should make a request to the community to find out if there is any work in progress that will be available shortly that should be included on the request. The release manager will work with anyone who responds to determine if that work will be included or not depending on the relevant concerns at the time.

The release manager should also connect with the build masters and confirm with them that they are available for creating builds during the next several weeks as the work progresses.

### Release Branch
The release branch is created once the release manager has decided that all work that will be included in the release is available in the master branch.

The release branch is considered feature frozen. Only bug fixes designated by the release manager will be merged into the release branch.

Bug fixes designated by the release manager for fixing within the release should be branched from the release branch and merged directly into the release branch. Doing this reduces the chance of inadvertently bringing in unrelated code changes.

If the release manager determines that some code should be merged from master into the release branch, then this can be done. However, this should be viewed as an unusual step and carefully considered due to the risk of introducing unexpected change.

The release notes should be created/update each time a build is made from a release branch. The information in the release notes should contain the new features and important bugs fixed since the previous release. They should be recorded in a style similar to this: https://boinc.berkeley.edu/wiki/Release_Notes_for_BOINC_7.6.

### Build and Test
The build and test cycle for the client is done by leveraging the supporters who are willing to test the client through the process outlined on the [Alpha Testing wiki page](https://boinc.berkeley.edu/trac/wiki/AlphaInstructions).

The test process should roughly follow the following path:
- The release manager increments the build version number and asks the build masters to create a new build of the client
- At this stage the build number should use an odd 'minor' number as it is considered a test build. Ex: 7.9.21
- The release manager updates (or asks someone to update for them) the version history with a list of significant changes since the last build
- Once the builds are available, the release manager sends an email to the boinc-alpha email list announcing the availability of a new release candidate and points them to the version history page. The release manager asks the testers to start a new round of testing
- Testers conduct testing and record bugs found
- The release manager monitors bugs being reported and designates those that need to be fixed in this release and those that can be fixed for a future release. The release manager should inform the community on boinc-alpha about which bugs are to be fixed and which are to be deferred to a future release. The release manager should respond to comments and different perspectives about these decisions and consider carefully the feedback from the community.
- Repeat after designated bugs have been fixed

### General Acceptance
The build and test cycle repeats until there are no bugs remaining that have been designated to be fixed in this release. Once this occurs, the release manager will increment the version number so that the 'minor' version is even indicating that this is a release candidate. He or she will then ask the build masters to rebuild the clients using the new version number.

After the testers before a lightweight regression test of the new builds and no new bugs are found, the release manager will call for a consensus vote of the committers to declare the build as generally available. If the vote succeeds, then the BOINC website is updated to reflect the status of the release as generally available.

At this point, if it has not already been done, the release branch should be merged back into the master branch to ensure that all bug fixes are part of the master branch (note that this can occur earlier and repeatedly during the process, but it must at a minimum occur at the end of the process).

### Post Release Management
It is inevitable that additional bugs will be found once the software is released to the general public. The release manager, build masters and testers should expect to remain engaged for several weeks following general availability of a release and continue to track bug reports that come in from end users. The release manager will continue to lead the community through the process of prioritizing these bugs, and determine if they need to be fixed in the current release with a new build, or if they can be deferred until a future release. If the release manager decides that a bug needs to be fixed, then the release manager will lead the community through another build and test cycle that includes the fixes for the designated bugs.

## Appendix
### Version Numbering
The BOINC client uses the following in its release numbering:

Major.Minor.Build
- The major is incremented when a significant and fundamental change is made to the client. The release manager shall decide when a release constitutes a significant enough change to merit incrementing the major version number.
- Odd minor version numbers indicate that the version is a test build.
- Even minor version indicate a release candidate or a generally available release.
- Build version numbers are incremented each time a new build is made.

# Document Update Policy
Changes to this document are proposed by creating a pull request against [BOINC policy repository](https://github.com/BOINC/boinc-policy). Approval of the pull request requires a successful consensus vote of the committers as outlined in section 5.1.1 of the [Governance document](https://github.com/BOINC/boinc-policy/blob/master/Governance.md).