DevOps model - ULJ-Yale/qunexsdk GitHub Wiki

The following DevOps model (https://aws.amazon.com/devops/what-is-devops/) for the QuNex Suite is designed to ensure efficient management of the development, production and deployment process. All the developers are responsible for learning how to use git to create branches, commit code with informative messages, pull code from master into development branch, and resolve conflicts. Before starting to contribute to the QuNex Suite, please read up on Git. Note that the Git flow model is used in all QuNex related repositories and their submodules (e.g. the Git flow model is also used in this qunexsdk repository).

The QuNex development team uses GitHub for specifying and tracking progress of all development tasks. To have a thorough overview of the development process and avoid communication gaps every coding task needs to have a matching GitHub issue!

QuNex Branching

The QuNex suite developments adopts a modified Gitflow branching model. Please read the following resources to get a deeper understanding of the Gitflow branching model:

This branching model defines five types of branches (the master branch, the develop branch, feature branches, hotfix branches and release branches), each one is described in detail below.

The figure below illustrates the QuNex Git branching model:

QuNexDevOps.png

a) The master branch

The master branch contains the latest acceptance tested QuNex functionality it is also the snapshot of the latest publicly released version of the suite. This code base has been acceptance tested for active production and is intended for use within production environments. The latest tag of this branch reflects the latest released versioning number. This branch will be the one that will have the current up-to-date versioning files and against which the production containers are built. The default location of the master branch is $TOOLS/qunex for the QuNex suite and $TOOLS/qunexsdk for the SDK.

No-one should implement changes directly on this branch, any such change will be immediately deleted and discarded!

b) The develop branch

The develop branch serves as a hub for gathering newly implemented features before publishing them on the master branch. Only senior developers and development leads can work directly on this branch and only senior developers and development leads can merge newly developed features into the develop branch. Working directly on this branch should be utilized only when squashing existing bugs and not for developing new, pre-planned features.

Once the release cycle is finished the code on the develop branch has to pass full acceptance tests before it is merged into the master branch via a release branch. The default location of the develop branch is $TOOLS/qunexdev for the QuNex suite and $TOOLS/qunexsdkdev for the SDK.

Only development lead and senior developers are allowed to work on the develop branch directly!

c) Other branches (features, hotfixes ...)

The majority of development should take place on feature and hotfix branches. Since the develop branch has the latest code base, new development branches need to be checked out from that branch. Anyone can work on this branches, but only development leads and senior developers can merge feature branches into the develop branch. If you are a junior developer and you finished the development of a feature, you should trigger a request into the develop branch by issuing a merge request through the GitHub portal.

The naming convention for feature branches is #ID-description where you replace the description with something meaningful and descriptive for the development task at hand. Any development branches should be located inside the $TOOLS/qunexfeatures folder for the QuNex suite.

In order for supervisors to do their job, all branches need to be available remotely so they need to be opened via the GitHub portal and named accordingly.