Release/Procedure

Version 55 (modified by erilem, 2 years ago)

--

OpenLayers Release Procedure

Work In Progress

Let us say that for the release in question, x is the API Version and y the incremental release number.

Checks

To actually start the release process the following conditions must be met:

  1. No open issues in the x.y milestone
  2. All the unit tests pass
  3. PSC approval (a vote must be passed by the SteeringCommittee)

When these conditions are met the initialization step can occur.

Initialization

  1. Create the x.y branch (the release branch):
    $ git clone git@github.com/openlayers/openlayers
    $ git checkout -b x.y
    $ git push origin x.y
    
    This is a temporary branch, which will be deleted at the very end of the release process.

    Once the release branch is created all the changes/commits for that release should be added to this branch. And commits added to the release branch should regularly be merged in the master branch. Here's how:
    $ git clone git@github.com/openlayers/openlayers
    $ git log master..x.y # review what is to be merged
    $ git merge x.y
    
  2. Review the tickets that were closed for this release's milestone.
  3. Based on the previous step, create or review release notes for the new release.
    • This used to be done in wiki pages (e.g. Release/2.2/Notes).
    • Release notes are now in the OpenLayers repository, under the notes directory (e.g.  2.12.md).
    • Even though release notes are in GitHub, a Release/x.y/Notes page including a link to the notes in GitHub should be created (e.g. Release/2.12/Notes).
  4. Create milestone x.(y+1) in the issue tracker
  5. Rename milestone x.y to x.y-rc1 in the issue tracker
  6. Create label x.y. Users reporting regressions during the RC cycle will tag issues and pull requests using this label. This is a temporary label for the duration of the release process.

Release Candidate Iteration Process

The release process is iterative. After initialization the iterative process can start.

The iterative process in pseudo-code:

do {
    Release x.y-rcZ
    Test x.y-rcZ
    Z++
} while (issues in milestone x.y-rcZ);

In more detail:

  1. Release x.y-rcZ
    • Verify that milestone x.y-rcZ has no open issues
    • Compile a Release Announcement. The announcement should be located at Release/x.y/Announce/RCZ and should include one of the following:
      • If this is the first RC (Z is 1): a link to the Release/x.y/Notes wiki, and a brief summary of its contents.
      • If this is not the first RC, then: A brief summary of all of the issues that were fixed in the last RC.
    • Create milestone x.y-rc(Z+1)
    • Create tag release-x.y-rcZ (off the release branch)
      $ git clone git@github.com/openlayers/openlayers
      $ git tag release-x.y-rcZ x.y
      $ git push origin release-x.y-rcZ
      
    • Actually release x.y-rcZ
      $ ssh www.openlayers.org
      $ cd /tmp
      $ git clone https://github.com/openlayers/openlayers
      $ cd openlayers/tools
      $ ./release.sh x.y-rcZ
      
  2. Test x.y-rcZ
    • People reporting regressions should use the x.y label
    • Core developers watch incoming issues labelled x.y, place issues in the x.y-rc(Z+1) milestone if appropriate, otherwise remove the x.y label
  3. If there are open issues in the x.y-(Z+1), fix them, close them, and iterate. Else, switch to the Finalization step.

OLD AFTER THIS

Creating a Release Candidate

  1. Release Candidate (RC) Cycle
    Let us say that for the RC in question, Z is the incremental release candidate number (starting with 1)

    1. Compile a Release Announcement. The announcement should be located at Release/x.y/Announce/RCZ and should include one of the following:
      • If this is the first RC (Z is 1): A link to the Release/x.y/Notes wiki, and a brief summary of its contents.
      • If this is not the first RC, then: A brief summary of all of the tickets that were fixed in the last RC.
        This should be a summary of the following trac query (where we let W be the previous RC number, i.e. Z-1):
        http://trac.openlayers.org/query?status=closed&version=x.y+RCW&milestone=x.y+Release&resolution=fixed&order=priority
        
    2. Set VERSION_NUMBER in  http://svn.openlayers.org/branches/openlayers/x.y/lib/OpenLayers.js and  http://svn.openlayers.org/branches/openlayers/x.y/lib/OpenLayers/SingleFile.js to "Release x.y-rcZ" and commit the change.
    3. Create a release tag for the RC (off the release branch):
  1. Export and Build the single file versions:
    $ wget -O release-x.y-rcZ.tar.gz https://github.com/openlayers/openlayers/tarball/release-x.y-rcZ
    $ tar xvzf release-x.y-rcZ.tar.gz
    $ cd openlayers-openlayers-*/tools
    $ VERSION=x.y-rcZ ./release.sh
    

UNCHANGED AFTER THIS LINE

  1. Create a new API release directory on openlayers.org and install the build
      mkdir /www/openlayers/docs/api/x.y-rcZ
      cd ..
      cp build/OpenLayers.js /www/openlayers/docs/api/x.y-rcZ
      cp -a img/ /www/openlayers/docs/api/x.y-rcZ
      cp -a theme/ /www/openlayers/docs/api/x.y-rcZ
    
  2. Build the tarball and copy it up to openlayers.org
      # First remove all .pyc files from the directory.
      rm tools/*.pyc
      cd ..
      tar cvfz OpenLayers-x.y-rcZ.tar.gz OpenLayers-x.y-rcZ/
      cp OpenLayers-x.y-rcZ.tar.gz /www/openlayers/docs/download
    
  3. Build a zip archive to openlayers.org
      zip -9r OpenLayers-x.y-rcZ.zip OpenLayers-x.y-rcZ/
      cp OpenLayers-x.y-rcZ.zip /www/openlayers/docs/download
    
  4. Create a new Version entry in TRAC called "x.y RCZ" for bug tracking

  5. Email the Release Announcement to the dev list.

The Testing Cycle

  1. Testing Cycle -- in which users and developers:
    • Report new tickets
      1. Milestone: x.y Release
      2. Version: x.y RCZ
    • Fix outstanding tickets:
      1. Commit only to trunk
      2. Set 'State' to 'Pullup' as they still need to be pulled up to the branch
      3. Do not mark as closed (i.e. leave them open)
    • Run all tests in both Firefox 1.5 and IE 6.
      • If any tests fail, return to Testing Cycle and report a new ticket.
      • If all tests pass, a committer may send a proposal email to the dev list calling for:
        • A new RC:
          1. The support of at least one other committer must be obtained.
          2. The committer chooses which patches to include in the the new RC or Final Release.
            These should be taken from the the results of the following trac query:
            http://trac.openlayers.org/query?milestone=x.y+Release&keywords=%7Epullup&order=priority
            
            1. Bring up each ticket's patch from trunk into the branch
            2. Change each ticket's 'State' field to 'Complete'
            3. Add brief summary of the change to the Release/x.y/Notes wiki
            4. Mark ticket closed
          3. Committer exits Testing Cycle, starts new Release Candidate Cycle
        • The Final Release:
          1. All tickets for the milestone must be closed in the previous RC and no new tickets opened in the current one.
          2. A successful voting round must pass the SteeringCommittee.
          3. SteeringCommittee member exits the Testing Cycle and Release Candidate Cycle and proceeds to the next step, Review the Release/x.y/Notes wiki...

  1. Review the Release/x.y/Notes wiki and make sure it contains important info from all the closed tickets for the Release x.y milestone:
    http://trac.openlayers.org/query?group=component&milestone=x.y+Release&resolution=fixed&order=priority
    
  2. Update news.txt: both in trunk and in the branch, update the /news.txt file to reflect this release. Note that you must be both tricky and quick here, as you must *predict* the correct revision number for the actual tagging of the release, which you will do in the next step. Essentially, this is current release +2 (one for the check-in of news.txt, one for the tag). It seems absurd, but it is good to make sure that no one else is checking in at the same time as this maneuver assumes a quiet wire.
    1. Set VERSION_NUMBER in  http://svn.openlayers.org/branches/openlayers/x.y/lib/OpenLayers.js and  http://svn.openlayers.org/branches/openlayers/x.y/lib/OpenLayers/SingleFile.js to "Release x.y-rcZ" and commit the change.
  3. Tag the release:
      export VERSION=2.7
      svn copy -m "Tagging the Final x.y Release" http://svn.openlayers.org/branches/openlayers/$VERSION http://svn.openlayers.org/tags/openlayers/release-$VERSION
    
  1. Export and Build the single file version:
      svn export http://svn.openlayers.org/tags/openlayers/release-$VERSION OpenLayers-$VERSION
      cd OpenLayers-$VERSION/build
      ./build.py
    
  2. Create a new API release directory on openlayers.org and install the build
      mkdir /www/openlayers/docs/api/$VERSION
      cd ..
      cp build/OpenLayers.js /www/openlayers/docs/api/$VERSION
      cp -a img/ /www/openlayers/docs/api/$VERSION
      cp -a theme/ /www/openlayers/docs/api/$VERSION
    
  3. Build the tarball and copy it up to openlayers.org
      # First remove all .pyc files from the directory.
      rm tools/*.pyc
      # move single file version
      cp build/OpenLayers.js OpenLayers.js
      rm build/OpenLayers.js
      
      cd ..
      mkdir OpenLayers-$VERSION/doc/devdocs
      perl ~crschmidt/NaturalDocs -i OpenLayers-$VERSION/lib -o HTML OpenLayers-$VERSION/doc/devdocs -p OpenLayers-$VERSION/doc_config -s Default OL
      mkdir OpenLayers-$VERSION/doc/apidocs
      perl ~crschmidt/NaturalDocs -i OpenLayers-$VERSION/lib -o HTML OpenLayers-$VERSION/doc/apidocs -p OpenLayers-$VERSION/apidoc_config -s Default OL
    
      tar cvfz OpenLayers-$VERSION.tar.gz OpenLayers-$VERSION/
      cp OpenLayers-$VERSION.tar.gz /www/openlayers/docs/download
    
  4. Build a zip archive to openlayers.org
      zip -9r OpenLayers-$VERSION.zip OpenLayers-$VERSION/
      cp OpenLayers-$VERSION.zip /www/openlayers/docs/download
    
  5. Install the new API code on openlayers.org
      export X=2
      ln -sf /www/openlayers/docs/api/$VERSION/OpenLayers.js /www/openlayers/docs/api
      ln -sf /www/openlayers/docs/api/$VERSION/img /www/openlayers/docs/api
      ln -sf /www/openlayers/docs/api/$VERSION/theme /www/openlayers/docs/api
      rm /www/openlayers/docs/api/$VERSION && ln -sf /www/openlayers/docs/api/$VERSION /www/openlayers/docs/api/$X
    
  6. Create a new Version entry in TRAC called "x.y" for bug tracking.

  7. Update HowToDownload wiki with new latest stable api release links.

  8. Email the dev and users lists and announce the release containing:
    • A link to the Release/x.y/Notes wiki
    • A summary of the major features and bug fixes for the release
  9. Write a 50 word summary of the release and send to news_item at osgeo dot org