Difference between revisions of "Release Management"

From stoney cloud
Jump to: navigation, search
[unchecked revision][unchecked revision]
(Versions)
(Testing)
 
(20 intermediate revisions by 2 users not shown)
Line 2: Line 2:
 
Each release cycle should follow this pattern:
 
Each release cycle should follow this pattern:
 
# '''Development''' (2 - 4 Weeks): During this phase, new functionalities are developed.
 
# '''Development''' (2 - 4 Weeks): During this phase, new functionalities are developed.
# '''Feature Freeze''' (1 - 2 Weeks): This gives time for the users to test and the time bug fixing and a quick retest.
+
# '''Testing and bug fixing''' (1 - 2 Weeks): This gives time for the users to test and the time bug fixing and a quick retest.
# '''Code Freeze''' (1 - 2 Weeks): This is a late freeze to avoid sudden last-minute accidents which could risk the stability that should have been reached at this point. No source code changes are allowed without two approvals from the release team, but translation and documentation should continue. Simple build fixes are, of course, allowed without asking.
+
  
 
= Versioning =
 
= Versioning =
Line 14: Line 13:
 
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
 
Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.
  
* Scheme: major.minor.patch, example: <code>1.2.3</code>.
+
* <s>Scheme: major.minor.patch, example: <code>1.2.3</code>.</s>
* Odd minor version numbers denote development/unstable branches. For example, stoney cloud 0.8.x is considered stable, while stoney cloud 0.9.x is considered development/unstable.
+
* <s>Odd minor version numbers denote development/unstable branches. For example, stoney cloud 0.8.x is considered stable, while stoney cloud 0.9.x is considered development/unstable.</s>
 
* New features are added to unstable/development versions only.
 
* New features are added to unstable/development versions only.
 
* We have separate version numbers for the separate components (installer, online-backup, ldap-schemas, ...).
 
* We have separate version numbers for the separate components (installer, online-backup, ldap-schemas, ...).
  
== Development Procedure ==
+
We start with '''0.1.0''' for development and '''0.2.0''' for first stable release.
This results in the following development procedure:
+
* Features are scheduled on the individual module [[:Category:Roadmap]|roadmap] pages for implementation in specific future stable versions and are implemented (and tested) in development versions.
+
* A stable version will be released at the earliest when all features and goals specified for this stable version are implemented/reached.
+
  
= Development =
+
= Development Procedure =
== Source Code Organization ==
+
We have a minimum of two branches:
Every module has a separate GitHub git repository containing the following sub-structure:
+
# Trunk (development): Master branch, normally without name tags, for testing reasons we set tags: v0.5.0_pre1
 +
# Branch 1 to N (stable branch(es) for bug fixing): v0.2, the tag for a release would be: v0.2.1 to v0.2.N
 +
# Branch 2 (second stable branch for bug fixing): v0.4, the tag for a release would be: v0.4.1 to v0.4.N
  
GitHub:
 
* Form follows function: we choose the functionality name (so we are backwards compatible)
 
* Modules are collected in one repository (create a skeleton module as an example):
 
** Data (LDAP)
 
** API (PHP)
 
** Web Interface (PHP, uses API)
 
** Provisioning (Perl, ...)
 
** Tests (GUI, Unit-Tests, ...)
 
  
See the [[Modularisation]] page for details.
+
This results in the following development procedure:
 +
* Features are scheduled on the individual module [[:Category:Roadmap|roadmap]] pages for implementation in specific future stable versions and are implemented (and tested) in development versions.
 +
* A new major version will be released, when all features and goals specified for this version are implemented and tested.
  
Every such component-directory contains the following sub-structure:
+
TBD: Describe stable and unstable in more detail
  
* trunk
+
= Development =
* tags
+
== Source Code Organization ==
* branches
+
All stoney cloud related source code is located on GitHub under https://github.com/stoney-cloud. To avoid clashes with over projects, every repository has the default prefix '''stoney-'''.
  
For every release of a component a tag is created in <code>/tags</code>
+
Some operating system related examples:
 +
* https://github.com/stoney-cloud/stoney-gentoo-overlay
 +
* https://github.com/stoney-cloud/stoney-gentoo-portage
  
Development is primarily done in <code>/trunk</code>. Branches are created either for maintaining a specific minor-version of the package or for developing new features (at developers discretion).
+
The main framework called [[:Category:stoney core|stoney core]], which is responsible for shared functionality (like user management, rights and roles).
 +
* https://github.com/stoney-cloud/stoney-core
 +
* https://github.com/stoney-cloud/stoney-core/api (REST API)
 +
* https://github.com/stoney-cloud/stoney-core/cli (Command Line Interface)
 +
* https://github.com/stoney-cloud/stoney-core/web (Ajax based web interface)
  
For doing a complete stoney cloud release, a new branch/tag is created in the component ''stoney cloud'' which contains git repository references to the corresponding tags/branches of the other components.
+
Then we have the [[:Category:Self-Service Modules|Self-Service Modules]] with [[:Category:stoney backup|stoney backup]] as an example. This Self-Service Module provides an on-line backup service for desktops, servers and virtual machines.
 +
* https://github.com/stoney-cloud/stoney-backup
 +
* https://github.com/stoney-cloud/stoney-backup/api (REST '''a'''pplication '''p'''rogramming '''i'''nterface)
 +
* https://github.com/stoney-cloud/stoney-backup/cli ('''c'''ommand '''l'''ine '''i'''nterface)
 +
* https://github.com/stoney-cloud/stoney-backup/helpers (helper scripts and programmes)
 +
* https://github.com/stoney-cloud/stoney-backup/provisioning (scripts and programmes to provision services)
 +
* https://github.com/stoney-cloud/stoney-backup/web (Ajax based web interface)
  
Advantage:
+
See the [[Modularisation]] page for further details.
* clean separation (of release cycles) between components
+
* easier branching on a per-component basis
+
  
Disadvantage:
+
== Committing / Git Workflow ==
* harder to make a complete release (requires updating the references)
+
We follow the Git branching model according to: http://nvie.com/posts/a-successful-git-branching-model/
  
== Committing ==
 
 
Each change-set in the git repository (and thus each commit) ideally contains only one concise and consistent change.
 
Each change-set in the git repository (and thus each commit) ideally contains only one concise and consistent change.
The commit-message precisely describes the change. If the change is in respond to a bug-report or feature-request, the number of the bug-report of feature-request is included.
+
The commit-message precisely describes the change. If the change is in respond to a bug-report or feature-request, the number of the bug-report or feature-request is included.
 +
 
 +
== Scrum Labels ==
 +
* '''Not Started''': not yet assigned to or accepted by any member.
 +
* '''Assigned''': being assigned to or accepted by a member.
 +
* '''In Progress''': being implemented.
 +
* '''To Verify''': implementation done and now it is time for testing/verifying.
 +
* '''Done''': ticket is verified.
  
 
== Testing ==
 
== Testing ==
 
Testing is done in a clean test environment and '''not''' in a developer environment.
 
Testing is done in a clean test environment and '''not''' in a developer environment.
 
This means: all changes have to be committed to the git repository first and checked out from there in the test environment for proper testing.
 
This means: all changes have to be committed to the git repository first and checked out from there in the test environment for proper testing.
 +
 +
* tests can be run on different levels
 +
** framework-level (symfony/php unit tests)
 +
** API-level:
 +
*** JSON Schema compliance
 +
*** client-test via [http://frisbyjs.com/ frisby.js]
  
 
== Bug-Reporting/-Workflow ==
 
== Bug-Reporting/-Workflow ==

Latest revision as of 08:26, 24 April 2014

Release Cycles

Each release cycle should follow this pattern:

  1. Development (2 - 4 Weeks): During this phase, new functionalities are developed.
  2. Testing and bug fixing (1 - 2 Weeks): This gives time for the users to test and the time bug fixing and a quick retest.

Versioning

Semantic Versioning: Given a version number MAJOR.MINOR.PATCH, increment the:

  • MAJOR version when you make incompatible API changes,
  • MINOR version when you add functionality in a backwards-compatible manner, and
  • PATCH version when you make backwards-compatible bug fixes.

Additional labels for pre-release and build metadata are available as extensions to the MAJOR.MINOR.PATCH format.

  • Scheme: major.minor.patch, example: 1.2.3.
  • Odd minor version numbers denote development/unstable branches. For example, stoney cloud 0.8.x is considered stable, while stoney cloud 0.9.x is considered development/unstable.
  • New features are added to unstable/development versions only.
  • We have separate version numbers for the separate components (installer, online-backup, ldap-schemas, ...).

We start with 0.1.0 for development and 0.2.0 for first stable release.

Development Procedure

We have a minimum of two branches:

  1. Trunk (development): Master branch, normally without name tags, for testing reasons we set tags: v0.5.0_pre1
  2. Branch 1 to N (stable branch(es) for bug fixing): v0.2, the tag for a release would be: v0.2.1 to v0.2.N
  3. Branch 2 (second stable branch for bug fixing): v0.4, the tag for a release would be: v0.4.1 to v0.4.N


This results in the following development procedure:

  • Features are scheduled on the individual module roadmap pages for implementation in specific future stable versions and are implemented (and tested) in development versions.
  • A new major version will be released, when all features and goals specified for this version are implemented and tested.

TBD: Describe stable and unstable in more detail

Development

Source Code Organization

All stoney cloud related source code is located on GitHub under https://github.com/stoney-cloud. To avoid clashes with over projects, every repository has the default prefix stoney-.

Some operating system related examples:

The main framework called stoney core, which is responsible for shared functionality (like user management, rights and roles).

Then we have the Self-Service Modules with stoney backup as an example. This Self-Service Module provides an on-line backup service for desktops, servers and virtual machines.

See the Modularisation page for further details.

Committing / Git Workflow

We follow the Git branching model according to: http://nvie.com/posts/a-successful-git-branching-model/

Each change-set in the git repository (and thus each commit) ideally contains only one concise and consistent change. The commit-message precisely describes the change. If the change is in respond to a bug-report or feature-request, the number of the bug-report or feature-request is included.

Scrum Labels

  • Not Started: not yet assigned to or accepted by any member.
  • Assigned: being assigned to or accepted by a member.
  • In Progress: being implemented.
  • To Verify: implementation done and now it is time for testing/verifying.
  • Done: ticket is verified.

Testing

Testing is done in a clean test environment and not in a developer environment. This means: all changes have to be committed to the git repository first and checked out from there in the test environment for proper testing.

  • tests can be run on different levels
    • framework-level (symfony/php unit tests)
    • API-level:
      • JSON Schema compliance
      • client-test via frisby.js

Bug-Reporting/-Workflow

Bugs are to be reported on the modules issue tracker on GitHub.

Ideally we have someone who acts as the Bug-Wrangler. His tasks are:

  • go over unassigned bugs and properly assign them (since we can't expect users to properly assign bugs)
  • discover and close duplicated, invalid or otherwise inappropriate bugs (so the Bug-Wrangler must have search-fu)
  • request more information from the user if necessary (like the version of involved components, canned responses can be used/saved in the GitHub issue tracker for that purpose)
  • request time estimates from developers
  • kick developers and testers and make sure the issue-list stays short (therefore it would make sense if it's someone from stepping stone GmbH)
  • manage the priority of bugs if necessary