# 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 [neofs-devenv](https://github.com/nspcc-dev/neofs-devenv).

## Writing changelog

Add an entry to the `CHANGELOG.md` following the style established there. Add an 
optional codename, version and release date in the heading. Write a paragraph
describing the most significant changes done in this release. Add
`Fixed`, `Added`, `Removed` and `Updated` sections with fixed bug descriptions
and changes. Describe each change in detail with a reference to GitHub issues if
possible. 

Update the supported version of neofs-contract in `README.md` if there were 
changes in releases.

## Tag the release

Use `vX.Y.Z` tag for releases and `vX.Y.Z-rc.N` for release candidates
following the [semantic versioning](https://semver.org/) standard. Tag must be
created from the latest commit of the master branch.

## Update VERSION files

Make sure the VERSION file contains correct release version. It must be the tag
you have just created.

## Push changes and release tag to GitHub

This step should bypass the default PR mechanism to get a correct result (so
that releasing requires admin privileges for the project), both the `master`
branch update and tag must be pushed simultaneously like this:

    $ git push origin master v0.12.0

## Prepare and push images to a Docker Hub

Create images for `neofs-storage`, `neofs-ir` and `neofs-cli`, `neofs-adm` applications
and push them into Docker Hub (so that releasing requires privileges in nspccdev
organization in Docker Hub)

    $ make images
    $ docker push nspccdev/neofs-storage:0.24.0
    $ docker push nspccdev/neofs-storage-testnet:0.24.0
    $ docker push nspccdev/neofs-ir:0.24.0
    $ docker push nspccdev/neofs-cli:0.24.0
    $ docker push nspccdev/neofs-adm:0.24.0

## Make a proper GitHub release

Edit an automatically-created release on GitHub, copy things from changelog.
Build and tar release binaries with `make prepare-release`, attach them to
the release. Publish the release.

## Close GitHub milestone

Close corresponding vX.Y.Z GitHub milestone.

## Post-release

Prepare pull-request for 
[neofs-devenv](https://github.com/nspcc-dev/neofs-devenv).

Rebuild NeoFS LOCODE database via CLI `util locode generate` command (if needed).