Version Control, Continuous Integration and Deployment
=======================================================
For the use of ``git`` version control, there are two major branches,
``master`` and ``dev``. The ``master`` branch is the default
branch when a user downloads the source code from GitHub. It is recommended to
keep this branch a relatively stable branch and only merge in new codes
when they are reliable. The ``dev`` branch is intended to be the
developing branch for a single maintainer.
For the version number, we suggest the three-part version number convention:
[major version.minor version.patch]. For example, version 2.1.0 means major
version 2, minor version 1, and patch 0. Major version should increase when
there are large updates or a change of old APIs; minor version should increase
when there are new features; patch number increases when it's a bug fix.
To tag a version, it is done on the GitHub repository webpage, so that new
versions will trigger a release and the following deployment.
The software requires optionally a compiled C library. For users installing the
software directly from `The Python Package Index `_ (PyPI) via ``pip``
command, Python will first check if a compiled binary file (called ``wheel``)
for the C library exists on PyPI and download the binary if so.
Otherwise, it will try to compile the C library locally from the source code.
We call uploading the source code and the compiled binary for Windows and
macOS ``deployment``.
As defined in ``.travis.yml``, for each commit pushed to GitHub, Travis-CI
will first run the tests under different platforms, notify the repository owner
if tests fail, and try to deploy the code to PyPI.
The branches also influence the behavior of the deployment. The current
setting is that, for each new commit to ``dev`` branch, Travis-CI will
try to deploy the software on `test.pypi `_ if there is
not a duplicate version already, which usually means the version number defined
in ``setup.py`` is updated.
For the ``master``, Travis-CI will not try to deploy the software
to the official PyPI unless it's tagged on GitHub
as a new release.
Apart from Travis-CI, ``readthedocs`` also monitors new commits to the
GitHub. It will create the online document you are now reading for any commits to the ``master``
and the ``dev`` branch, creating ``latest`` and ``dev`` version of the
document. For any tagged version it will create a ``stable`` version of the
document.