Harness uses Git for source control and follows a container-first release process using CI/CD. Source builds and some release to nexus and other public artifact eco-systems is also supported.
The project follows the git-flow branching model for source control. The primary features of this are infrequent merges of code with the master branch that are tied to releases and a long lived develop branch for works in progress.
Git-flow defines two main repo branches with an infinite lifetime:
- master; main branch where the source code always reflects a production-ready state
- develop: always reflects a state with the latest work-in-progress teowards the next release. When the source code in the develop branch reaches a stable point and is ready to be released, all of the changes will be merged back into
master
and then tagged with a release number.
Along with these branches several subtrees are also maintained for more specific purposes:
- feature: a branch is created under
feature
for each new feature. We start it from develop and once we’re done, merge back. Examplefeature/json-env
might contain new features in the JSON parser. - bugfix: a branch is created under
bugfix
to be merged with develop. Same as thefeature
branches but separated for bug visibility. Example:bugfix/db-indexes
which fixes an index bug. - release: starts from develop and signifies that there will be a new release once we merge this branch into master. Example
release/0.4.0
which may be tagged with several RCs on its way to merging withmaster
anddevelop
was a full release. - hotfix: another subtree used when we need to deliver urgent changes to the deployed master but develop is not yet ready to produce a release branch. Starts from master and merges into both master and develop.
Building docker images and tagging through our automated CI/CD pipeline.
- tag the docker image with the commit SHA:
actionml/harness:0921e07
(internal use by CI/CD) - tag the docker image latest release for the master branch:
actionml/harness:latest
- tag the docker image with release version/number (CI/CD takes version from tag, bump file, etc.) for the release branch:
actionml/harness:0.2.0-RC1
- tag the docker image develop and with build number from CI/CD (optional) for the develop branch:
actionml/harness:develop
Created when doing a custom image for some special purpose—these are NOT created by the automated CI/CD pipeline.
- custom tags from any tags above if we need a special image
Possible tags include:
actionml/harness:latest
The latest stable releaseactionml/harness:0.4.0
harness-0.4.0 release, may even be the same aslatest
0.2.0-RC1
,0.3.1-RC1
,0.4.0-RC2
older versions, all matching git tags.develop
the latest work-in-progress from thedevelop
branch. This is often used for image pulls when (re)deploying a SNAPSHOT of of the current non-finished, possibly non-stable version.0921e07
,84cd773
work-in-progress versions matching various develop branch commit numbers.test
,valerii-test
,0.1.0-RC1-debug
various hand made images for special purposes.
Our release policy is to create Docker Container Images as release artifacts. These are published for both works in progress, releases, as well as occasional custom builds for specific purposes. Most people will want to use the image tagged as actionml/harness:latest
which corresponds to the git tag for the latest stable release number.
Build-from-source using git repo source and/or tarballs that are pre-packaged source, may also be supported for OS level installations but are not the primary goal of Harness releases. Since the automated image releases are built from this same source it is also likely to be available.
Several companion projects are maintained to round out the extended Harness system:
- harness-cli: contains the command line interface for harness and is the temporary home of the Python client SDK. This is published in source and packaged in a Docker Container.
- python SDK: a client SDK for python included in the cli, WILL be published to PYPI but currently can be installed on your host using source.
- java SDK: contains a client to use if your app is Java or Scala. It is published into the Nexus eco-system.
- Harness Auth-server: This contains the micro-service that manages Authentication and Authorization when it is used in Harness. The "common" module is required to build Harness and so is published into the Nexus eco-system for use with
sbt
as “com.actionml” %% "harness-auth-common” % “0.3.0" here See the git project for more details. - Docker-compose, Kubernetes: several projects that integrate systems of Containers for vertical scaling (Docker-compose) and horizontal scaling (Kubernetes) are also available but are private since they are difficult to support as public OSS. Contact us for access.