.. |br| raw:: html
Versioning ========== FleCSI's versioning system uses three branch types (descibed below) that define the purpose and provenance of the code at a particular commit, with tags that label points of interest in the development cycle, e.g,. releases or stable features. Branch Types ************ * **incompatible** |br| The *devel* branch is where work on the next major release takes place, potentially with interface and feature changes that are *incompatible* with previous versions. * **feature** |br| Feature branches (named for their *major* version number, e.g., 1, 2, 3) are for feature development on the current major version. * **release** |br| Release branches (named for their *major.minor* version number, e.g., 1.1, 1.2) are stable versions of the code base. These can only be modified with bug fixes. At appropriate points, tags (named for their *major.minor.patch* version number, e.g., 1.1.2) are used to identify patched versions. .. tip:: At the time of writing, FleCSI has the following branches: **devel** (incompatible) |br| **1** (feature) |br| **1.4** (release) Tags **** The form of a tag is determined by the underlying branch type and commit it is intended to reference: * **devel branch** |br| In general, a commit on the devel branch should only be tagged if it is the first commit *after* a new feature branch has been created, and should be named with *d* and the major version of the feature branch, e.g., when feature branch *2* is created, a new devel tag *d2* should be created on the next devel commit. * **feature branch** |br| Feature tags should be created on the next commit after a new release branch is created, with *f* and the major.minor version of the release branch, e.g., when release branch *1.5* is created, a new feature tag *f1.5* should be created on the next feature commit. * **release branch** |br| Release tags should be created for each new release, with *v* and the release version, e.g., *v1.4.1*. .. tip:: Tags mark a *whence* or *origin* for development rather than a *whither* or *completion*. The first letter of the tag is important, i.e., *d*, *f*, or *v*, as it is used by FleCSI to determine the branch type of the tag during CMake configuration. Workflow ******** FleCSI development uses a *devel -> feature -> release* forking workflow that can be visualized as in :numref:`branch`. Bugfixes and features can be back-merged into *feature* or *devel*, as appropriate. .. _branch: .. figure:: branch.png Workflow diagram illustrating basic workflow using the three branch types described above. (Figure due to Angela Herring.) .. vim: set tabstop=2 shiftwidth=2 expandtab fo=cqt tw=72 :