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:
- https://nvie.com/posts/a-successful-git-branching-model/,
- https://www.atlassian.com/git/tutorials/comparing-workflows/gitflow-workflow,
- http://danielkummer.github.io/git-flow-cheatsheet/,
- https://github.com/nvie/gitflow.
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:
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.