Release Process
===============

Prerequisites
-------------

SD-Core makes the following assumptions about the components are included in a
release:

Git tags
""""""""

Code receives Git tags as a part of the CI process

* Tag content comes from a **VERSION** file within the repo, and tags are
  created only the version is a SemVer released version (example: ``1.2.3``, no
  ``-dev`` or ``-rc`` extensions)

* Tagging is *only done by the CI system* (Jenkins), which pushes tags to git
  repos after a submit/merge of code which changes the **VERSION** file.

* CI system enforces tag uniqueness - no two commits have the same released
  version tags.

  * You can't re-release or "fix" a version that has problem - make a new
    version with fixes in it.

Docker container images
"""""""""""""""""""""""

All docker images are tagged based on their git tags.

* For released versions, the CI system should prevent a Dockerfile from
  referencing a parent containers that are a moving target, such as ``latest``
  or ``master``.

  * This allows a container to be rebuilt given an arbitrary git commit with
    fair confidence that it will result in the same code in the container.

* Official images are only pushed to registries by the CI system

    * Increases repeatability of the process, and prevents human accidents.

Helm charts
"""""""""""

* Each chart may only contain references to released, SemVer tagged container images

  * Chart CI process must check that a chart version is unique - a chart can't
    be created with the same version twice.  This should be done against the
    chart repo.

Release Steps
-------------

All Helm charts are checked that the containers they use have a SemVer version
tag

A branch is created on the Helm charts repo, with the abbreviated name of the
release - for example **sdcore-1.0**.

To allow for future patches to go into the repo in a way that does not conflict
with the version branch, each component repo's **VERSION** file should have it's
minor version increased. (ex: 1.2.n to 1.3.0-dev, so future 1.3.n+1 component
release can easily be created).

The same should be done on Helm charts in the chart repos post release, but the
versions there should not include a ``-dev`` suffix because chart publishing
requires that every new chart version be unique and unsuffixed SemVer is a
more consistent release numbering pattern.

Finally, the ``sdcore-helm-charts`` repo overall **VERSION** should also be incremented
to the next minor version (1.6.0-dev) on the **master** branch, so all 1.0.x
releases of the overall charts repo will happen on the **sdcore-1.0** branch.

Creating releases on the 1.0.x branch
"""""""""""""""""""""""""""""""""""""

If a fix is needed only to the helm charts:

1. Make the fix on the master branch of sdcore-helm-charts (assuming that it is
   required in both places).

2. After the master tests pass, manually cherry-pick the fix to the **sdcore-1.0**
   branch (the Chart version would be different, requiring the manual step).

3. Cherry-picked patchsets on that branch will be checked by the **sdcore-1.0**
   branch of tests.

4. When it passes, submitting the change will make a new 1.0.x release

5. Update the documentation to reflect the chart changes, a description of the
   changes m, and increment the tag on the docs from 1.0.n to 1.0.n+1, to
   reflect the patch change.

6. If all the charts are updated and working correctly, create a new charts
   point release by increasing the 1.0.n **VERSION** file in the
   sdcore-helm-charts repo.  This should be the same as the version in the
   documentation.  Immediately make another patch that returns the
   ``sdcore-helm-charts`` **VERSION** to 1.0.n+1-dev, so that development
   patches can continue on that branch.

If a fix is needed to the components/containers that are included by the helm charts:

1. Develop a fix to the issue on the master branch, get it approved after
   passing master tests.

2. If it does not exist, create an **sdcore-1.0** branch on the component repo,
   starting at the commit where the **VERSION** of the component used in 1.0 was
   created - this is known as "lazy branching".


3. Manually cherry-pick to the **sdcore-1.0** branch of the component, increment
   the patch version, and test with the **sdcore-1.0** version of
   sdcore-system-tests and helm charts.

4. Update helm charts and go through the helm chart update process above

