Skip to content

Release process checklist

pkra edited this page May 23, 2013 · 30 revisions

Table of Contents

For releases

At GitHub

  1. All code changes are internally tested according to the MathJax Development Process, and merged into the mathjax/master branch at GitHub. Repack and recombine the files to make sure they are consistent with the unpacked versions.
  2. If this is a numbered release, the vN.M-latest branch is created, and a README-branch.txt file is made for the version number, and committed to the branch. This makes the branch appear as a separate line in the network viewer. Check that MathJax's internal version is updated as well.
  3. The release is tagged in GitHub. This causes a labeled distribution to be created (with the tag name) in the GitHub download manager.
  4. Complete the Documentation update process.
  5. The download distribution should then be downloaded and smoke tested.

At CDN

  1. Check the TTL of the CDN. Set it to 8h ahead of time.
  2. Upload the new version to the CDN
  3. Set the custom headers for the fonts (see Managing Rackspace Cloud Files & CDN)
  4. Update all older releases of the version (i.e., update beta with release, update beta, release with latest etc).

At mathjax.org

  1. The download page should be updated to point to the new release.
  2. Update the documentation page at http://www.mathjax.org/resources/docsindex/
  3. A news announcement for the release is posted. The post should
    • Describe what is new
    • Advise regarding the CDN propagation (clear browser cache etc)
    • Point to the release
    • Give instructions for reporting bugs, and refer questions to MathJax Users

For the community

  • Send word to the MathJax sponsors
  • Announcement should be posted to the User Groups at mathjax-dev and mathjax-users
    • Advise regarding the CDN propagation (clear browser cache etc)
  • The new post should be announced on social media channels MathJax-web-presence.

After the release

  • After 2 days (assuming no critical bugs show up), set the TTL again to its previous setting (currently: 7 days)

For beta releases

This is almost identical, except that we don't do as much.

At GitHub

  1. All code changes are internally tested according to the MathJax Development Process and merged into the mathjax/vN.M-beta branch at GitHub. Repack and recombine the files to make sure they are consistent with the unpacked versions.
  2. The vN.M-beta branch is created. This makes the branch appear as a separate line in the network viewer. Check that MathJax's internal version is updated as well.
  3. The download distribution should then be downloaded and smoke tested.

At CDN

  1. Check the TTL of the CDN. Set it to 8h ahead of time.
  2. Upload the new version to the CDN as vN.M-beta (and while you're at it, create vN.M-latest).
  3. Set the custom headers for the fonts (see Managing Rackspace Cloud Files & CDN)

At mathjax.org

  1. A news announcement for the release is posted. The post should
    • Describe what is new
    • Point to the beta branch and download at github.
    • Give instructions for reporting bugs, and refer questions to MathJax User Groups

For the community

  • Send word to the MathJax sponsors
  • Announcement should be posted to the User Groups at mathjax-dev and mathjax-users
  • The new post should be announced on social media channels MathJax-web-presence.

Hotfix release

This is the process for releasing a hotfix to the CDN:

pkra: perhaps we should revisit this. Creating a separate copy of the CDN (on Rackspace or elswhere) and switching the CNAME might be a better way of doing this.

  1. Prepare and test a branch with the fixes as per our regular development process
  2. Merge to master and the release branch at GitHub, e.g v1.1-latest
  3. Copy the release branch to mathjax/x.y-beta on Cloud Files
  4. Test
  5. Announce it so people can test against it
  6. Send warnings to the cdn-notify list 72 hours in advance
  7. Lower the TTL of the CDN to 1h.
  8. Sync the new release to mathjax/x.y-latest and mathjax/latest on Cloud Files (e.g., Cyberduck can sync folders). Note: renaming/deleting folders on Cloud Files is much slower than syncing.
  9. Send confirmation to the cdn-notify list, and update the download page at mathjax.org
  10. Monitor for any issues.

We will not attempt to purge the CDN cache for hotfixes, but rather let them propagate normally.

Note that our policy is that we don't tag and package the hot fixes separately. Thus, for example, the v1.1 archive is always the initial v1.1 release, and access to updates for your own server would be through git (by checking out the v1.1-latest branch, which already exists, and will contain the hot fixes), or through the GitHub interface by selecting the v1.1-latest branch in the branch list and then using the Download button there to get the automatically packaged copy. From the documentation:

If a packaged release receives any important updates, then those updates will be part of the branch for that version. The link to the .zip file in the download list will be the original release version, not the patched version. To obtain the patched version, use the Branches drop down menu (at the far left of the menus within the page) to select the release branch that you want (for example v1.1-latest), and then use the download button and the Download .tar.gz or Download .zip button to get the latest patched version of that release.

Note: The CDN notify announcements should contain this info, as should the download page.

Doing the Update

In order to avoid to minimize the possibility for corrupting the origin server directories during an update, the preferred method of updating the origin server directories as to prepare the new release in a staging area. This gives us a chance to carefully check the staged files, and avoids exposing a mix of old and new files on the origin server during the time the staged content is prepared. The final sync is not as fast as the old symlink technique (now unavailable), but since the only issue are the png-fonts, syncing is actually very fast.

Of course, that doesn't prevent a mix of old an new files on the CDN servers, since they are only refreshed as they are requests. The strategy for minimizing that period of mixing on the CDN servers is the TTL settings.

Clone this wiki locally