# Release instructions ## Pre-release checks These should run successfully: * `make all`; * `make test`; * `make lint` (should not change any files); * `make fmts` (should not change any files); * `go mod tidy` (should not change any files); * integration tests in [frostfs-devenv](https://git.frostfs.info/TrueCloudLab/frostfs-dev-env). ## Make release commit Use `vX.Y.Z` tag for releases and `vX.Y.Z-rc.N` for release candidates following the [semantic versioning](https://semver.org/) standard. Determine the revision number for the release: ```shell $ export FROSTFS_REVISION=X.Y.Z[-rc.N] $ export FROSTFS_TAG_PREFIX=v ``` Double-check the number: ```shell $ echo ${FROSTFS_REVISION} ``` Create release branch from the main branch of the origin repository: ```shell $ git checkout -b release/${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} ``` ### Update versions Write new revision number into the root `VERSION` file: ```shell $ echo ${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} > VERSION ``` Update the supported version of `TrueCloudLab/frostfs-contract` module in root `README.md` if needed. ### Writing changelog Add an entry to the `CHANGELOG.md` following the style established there. * copy `Unreleased` section (next steps relate to section below `Unreleased`) * replace `Unreleased` link with the new revision number * update `Unreleased...new` and `new...old` diff-links at the bottom of the file * add optional codename and release date in the heading * remove all empty sections such as `Added`, `Removed`, etc. * make sure all changes have references to GitHub issues in `#123` format (if possible) * clean up all `Unreleased` sections and leave them empty ### Make release commit Stage changed files for commit using `git add`. Commit the changes: ```shell $ git commit -s -m 'Release '${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} ``` ### Open pull request Push release branch: ```shell $ git push release/${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} ``` Open pull request to the main branch of the origin repository so that the maintainers check the changes. Remove release branch after the merge. ## Tag the release Pull the main branch with release commit created in previous step. Tag the commit with PGP signature. ```shell $ git checkout master && git pull $ git tag -s ${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} ``` ## Push the release tag ```shell $ git push origin ${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} ``` ## Post-release ### Prepare and push images to a Docker Hub (if not automated) Create Docker images for all applications and push them into Docker Hub (requires [organization](https://hub.docker.com/u/truecloudlab) privileges) ```shell $ git checkout ${FROSTFS_TAG_PREFIX}${FROSTFS_REVISION} $ make images $ docker push truecloudlab/frostfs-storage:${FROSTFS_REVISION} $ docker push truecloudlab/frostfs-storage-testnet:${FROSTFS_REVISION} $ docker push truecloudlab/frostfs-ir:${FROSTFS_REVISION} $ docker push truecloudlab/frostfs-cli:${FROSTFS_REVISION} $ docker push truecloudlab/frostfs-adm:${FROSTFS_REVISION} ``` ### Make a proper GitHub release (if not automated) Edit an automatically-created release on GitHub, copy things from `CHANGELOG.md`. Build and tar release binaries with `make prepare-release`, attach them to the release. Publish the release. ### Update FrostFS Developer Environment Prepare pull-request in [frostfs-devenv](https://git.frostfs.info/TrueCloudLab/frostfs-dev-env) with new versions. ### Close GitHub milestone Look up [milestones](https://git.frostfs.info/TrueCloudLab/frostfs-node/milestones) and close the release one if exists. ### Rebuild FrostFS LOCODE database If new release contains LOCODE-related changes, rebuild FrostFS LOCODE database via FrostFS CLI ```shell $ frostfs-cli util locode generate ... ```