# Release a new version

## Before releasing

### Update dependencies

#### Glowing Bear MedCo

* Update the Angular version and ensure node version in docker image is compatible with angular
* NPM packages: `npm update` and review with `npm outdated`
  * `keycloak-js`: has to be the same version as Keycloak (set in a `Dockerfile` in medco-deployment)
  * `typescript`: has to be compatible with the angular version used

#### MedCo

* `Dockerfile` go base image version: `FROM golang:1.15`
* go.mod go version: `go 1.15`
* Go modules (pay particular attention to onet): `go get -u ./...` and `go mod tidy`

### Perform tests

* Check that all the CI/CD pipeline on GitHub passes (this tests the whole backend with the profile *dev-local-3nodes*)
* Deploy locally *test-local-3nodes* to manually test Glowing Bear MedCo
* Deploy locally on several machines *test-network* to manually test the deployment over several machines, and the generation of its configuration

To change the version of the docker images used, update the `.env` file in the deployment folder:

```bash
MEDCO_VERSION=<docker_tag>
GLOWING_BEAR_MEDCO_VERSION=<docker_tag>
```

## Making a release

### Manual updates

* Update the version of Glowing Bear MedCo `GB_VERSION` in the `Makefile` to point to the correct Docker tag that will be released (e.g. v1.0.0)

### Release on GitHub

Version numbers follow [semantic versioning](https://semver.org/), and both codebases should have the same version. For both codebases:

* Out of the `dev` branch, create a new release (and the associated tag) with the semantic version (e.g. v1.0.0)
* Ensure the CI/CD pipeline correctly builds the new release

### Update documentation

#### In GitBook

* Create new variant named like the MedCo version being release (e.g. `v1.0.0`). When merged it will be pushed as a branch on GitHub.
* Add new entry on [Releases](https://ldsec.gitbook.io/medco-documentation/releases) page.
* Update version numbers in the guides' download scripts (e.g. `docker-compose pull`).
* Review the documentation to ensure the guides are up-to-date. Notably the deployment and loading guides.
* Make the documentation variant be the new *main* variant on GitBook.
* On GitHub, set the branch corresponding to the new version be the new default branch.

## After the release

* Ensure on GitHub that all images have been built correctly with the proper versioning.
* Update to the new version [the live demo on medco-demo.epfl.ch](https://ldsec.gitbook.io/medco-documentation/developers/live-demo).
* Update medco.epfl.ch website with the new version and update the roadmap.
* Communication about the new release (Twitter notably).
