<h1> Release Process </h1>

<h2>Table of Contents</h2>

- [Github projects](#github-projects)
- [Releasing the Grid](#releasing-the-grid)
  - [Environments](#environments)
  - [Versions](#versions)
  - [Branching/Tagging](#branchingtagging)
  - [Blocking Bugfixes for Mainnet](#blocking-bugfixes-for-mainnet)

***

## Github projects

- We are going to use new github style projects to manage the development process, all repos are linked against tfgrid product e.g 3.6.0
- You can have different views e.g StoryCards only view for Highlever overview, a view by repositories, priorities
- We will drive all repos from that one project
- We should use milestones (semantic version to sort out the issues)

## Releasing the Grid


### Environments

- Grid releases are no longer linked to an environment in a pipeline, while this makes sense in lots of scenarios, it won't scale
- An environment hosts a specific grid version based on the components it has
- In the future, we should be able to create ephermal environments e.g deploy this grid version on these X number of nodes

### Versions

- Releasing should follow [semantic versioning](https://semver.org/) 
- Every grid release is linked to X number of components. For example, TFGrid 3.6.1 is linked to terraform 1.0.0, portal 2.0.1, .. etc


### Branching/Tagging

- As mentioned above, releases should should follow semantic versioning. The tag itself is prefixed with a `v`. so vx.y.z or vx.y.z-rc1
- Devnet(s) should host development branches and once it reaches a specific quality they get verified on that branch
    - THIS IS NOT TRUE: it can be that on a dev net you have production components
- Once verification happens and everything goes ok, we should tag a release of a component
- Once all components are ready a grid release is complete and we can host that release on whatever environment
- Container image tags must not contain the `v`-prefix

### Blocking Bugfixes for Mainnet

- In case of a blocking bug happening only on mainnet, we branch out of the tag on the affected component repository
- do the fix on that branch
- host a new grid release on a testing environment to verify
- tag the new component
- merge to trunk
- create a new grid release
- host that grid release (its components) on mainnet