====================
Recommended workflow
====================

One of the most useful features of Anaconda Repository is its
ability to help manage package development and deployment in a
seamless fashion. This page describes the development process and
channel usage employed by one of our internal teams, to serve as
an example of how you can leverage channels for workflow
separation.

Multiple channels allow our team to maintain separate
package states and easily earmark and control the versions and
states of packages that users can install.

Our team created the following channels:

* Master.

* Staging.

* Release.

We have used this workflow through 4 release cycles and it has
worked out well for us.


Master
======

A master is created any time something is merged into our master
branch. It is considered the development build of all of the
components that make up the software. Code that makes it to this
channel should be stable and should have been confirmed
independently, but a full QA test has not been run on it yet.

Staging
=======

Once we are ready to start working on a release, we create a
staging:X.Y.Z branch. This contains all code that is going to go
into a release. No new features should be introduced at this
point, just any last minute bug fixes to existing code.

Release
=======

The staging channel gets culled so that only the latest package
is maintained in it. Any alpha, beta, or dev packages are
removed. After all testing is complete, all issues are resolved,
and the channel contains only one version of each package, we
copy that package into a release:X.Y.Z channel, then lock that
channel.
