Release Process Workflow
########################

Release a new version of Elgg.

This is the process the core team follows for making a new Elgg release.
We have published this information in the spirit of openness,
and to streamline onboarding of new team members.

.. contents:: Contents
   :local:
   :depth: 1

Requirements
============

* SSH access to elgg.org
* Commit access to http://github.com/Elgg/Elgg
* Admin access to https://community.elgg.org/
* Access to `Twitter account`_
* Access to `G+ page`_
* Node.js and NPM installed
* Sphinx installed (``easy_install sphinx && easy_install sphinx-intl``)
* Transifex client installed (``easy_install transifex-client``)
* Transifex account with access to Elgg project

1. First new stable minor/major release
=======================================

Make sure to update the :doc:`/appendix/support` document to include the new minor/major release date and fill in the blanks for the previous release. 

2. Prepare and tag the release
==============================

Make sure your local git clone is up to date!

Merge latest commits up from lowest supported branch.
Visit https://github.com/Elgg/Elgg/compare/new...old and submit the PR
if there is anything that needs to be merged up.

Install the prerequisites:

.. code:: sh

   npm install elgg-conventional-changelog
   easy_install sphinx
   easy_install sphinx-intl
   easy_install transifex-client

Run the ``release.php`` script. For example, to release 1.9.1:

.. code:: sh

   git checkout 1.9
   php .scripts/release.php 1.9.1

This creates a ``release-1.9.1`` branch in your local repo.

Next, manually browse to the ``/admin/settings/basic`` page and verify it loads. If it does not, a language file from Transifex may have a PHP syntax error. Fix the error and amend your commit with the new file:

.. code:: sh

    # only necessary if you fixed a language file
    git add .
    git commit --amend

Next, submit a PR via Github:

.. code:: sh

   git push your-remote-fork release-1.9.1

Once approved and merged, tag the release:

.. code:: sh

   git checkout release-${version}
   git tag -a ${version}
   git push origin ${release}

Update Milestones on Github
 * Mark release milestones as completed
 * Move unresolved tickets in released milestones to later milestones

3. Update the website
=====================

The downloads need to point to the new releases.

Build Package
-------------

 * ssh to elgg.org
 * Clone https://github.com/Elgg/elgg-scripts
 * Use elgg-scripts/build/build.sh to generate the .zip file.

Run without arguments to see usage. This also generates the ChangeLog.txt file.

Example::

    ./build.sh 1.8.5 1.8.5 /var/www/www.elgg.org/download/

MIT::

    ./build.sh 1.8.5 1.8.5-mit /var/www/www.elgg.org/download/
	
Update homepage, download, and previous download pages
------------------------------------------------------

* Clone https://github.com/Elgg/old-elgg-website
* Make changes, commit, push.
	
  * index.php
  * download.php
  * previous.php

* Pull to live site

  .. code:: sh

      cd /var/www/www.elgg.org && sudo su deploy && git pull

* flush apc cache (via community admin panel)

4. Make the announcement
========================

This should be the very last thing you do.

* Sign in at https://community.elgg.org/ and compose a blog on with HTML version of CHANGELOG.md.
* Add tags “release” and “elgg1.x” where x is whatever branch is being released.
* Tweet from the elgg `Twitter account`_
* Post from the `G+ page`_

.. _G+ page: https://plus.google.com/+ElggOrg
.. _Twitter account: https://twitter.com/elgg

