2013-05-19 21:30:00 -07:00
Release Process
====================
2016-05-16 22:08:35 -07:00
Meta: There should always be a single release engineer to disambiguate responsibility.
2013-05-19 21:30:00 -07:00
2016-09-28 17:59:29 -07:00
## Pre-release
Check all of the following:
- All dependencies have been updated as appropriate:
- BDB
- Boost
- ccache
- libgmp
2016-09-28 20:15:08 -07:00
- libsnark (upstream of our fork)
2016-09-28 17:59:29 -07:00
- libsodium
- miniupnpc
- OpenSSL
2016-05-16 22:08:35 -07:00
## A. Define the release version as:
2013-05-19 21:30:00 -07:00
2016-10-01 04:27:50 -07:00
$ ZCASH_RELEASE=MAJOR.MINOR.REVISION(-BUILD_STRING)
2016-04-12 16:54:43 -07:00
Example:
2013-05-19 21:30:00 -07:00
2016-10-01 04:27:50 -07:00
$ ZCASH_RELEASE=1.0.0-beta2
Also, the following commands use the `ZCASH_RELEASE_PREV` bash variable for the
previous release:
2013-05-19 21:30:00 -07:00
2016-10-01 04:27:50 -07:00
$ ZCASH_RELEASE_PREV=1.0.0-beta1
2016-10-14 09:57:58 -07:00
2016-10-22 18:10:35 -07:00
## B. Create a new release branch / github PR
### B1. Update (commit) version in sources
2013-05-19 21:30:00 -07:00
2016-10-26 15:15:23 -07:00
README.md
2016-06-16 18:32:55 -07:00
src/clientversion.h
configure.ac
2016-10-14 09:57:58 -07:00
contrib/DEBIAN/control
contrib/gitian-descriptors/gitian-linux.yml
2016-11-03 21:07:56 -07:00
Build and commit to update versions, and then perform the following commands:
2016-10-28 03:12:58 -07:00
help2man -n "RPC client for the Zcash daemon" src/zcash-cli > contrib/DEBIAN/manpages/zcash-cli.1
help2man -n "Network daemon for interacting with the Zcash blockchain" src/zcashd > contrib/DEBIAN/manpages/zcashd.1
2016-10-14 09:57:58 -07:00
2016-10-01 04:27:50 -07:00
In `configure.ac` and `clientversion.h` :
- Increment `CLIENT_VERSION_BUILD` according to the following schema:
- 0-24: `1.0.0-beta1` -`1.0.0-beta25`
2016-10-01 23:15:01 -07:00
- 25-49: `1.0.0-rc1` -`1.0.0-rc25`
2016-10-01 04:27:50 -07:00
- 50: `1.0.0`
- 51-99: `1.0.0-1` -`1.0.0-49`
- (`CLIENT_VERSION_REVISION` rolls over)
- 0-24: `1.0.1-beta1` -`1.0.1-beta25`
- Change `CLIENT_VERSION_IS_RELEASE` to false while Zcash is in beta-test phase.
2013-05-19 21:30:00 -07:00
2016-10-22 18:10:35 -07:00
### B2. Write release notes
2014-08-12 16:24:05 -07:00
2016-12-07 10:56:09 -08:00
Run the release-notes.py script to generate release notes and update authors.md file. For example:
2014-08-12 16:24:05 -07:00
2016-12-07 10:56:09 -08:00
$ python zcutil/release-notes.py --version $ZCASH_RELEASE
2016-06-16 18:46:43 -07:00
2016-10-14 09:57:58 -07:00
Update the Debian package changelog:
2016-10-22 18:10:35 -07:00
export DEBVERSION="${ZCASH_RELEASE}"
2016-10-14 09:57:58 -07:00
export DEBEMAIL="${DEBEMAIL:-team@z.cash}"
export DEBFULLNAME="${DEBFULLNAME:-Zcash Company}"
dch -v $DEBVERSION -D jessie -c contrib/DEBIAN/changelog
2016-10-22 18:10:35 -07:00
(`dch` comes from the devscripts package.)
### B3. Change the network magics
2016-06-16 18:46:43 -07:00
If this release breaks backwards compatibility, change the network magic
numbers. Set the four `pchMessageStart` in `CTestNetParams` in `chainparams.cpp`
to random values.
2016-10-14 09:57:58 -07:00
2016-10-22 18:10:35 -07:00
### B4. Merge the previous changes
2016-05-16 22:08:35 -07:00
Do the normal pull-request, review, testing process for this release PR.
2013-05-19 21:30:00 -07:00
2016-05-16 22:08:35 -07:00
## C. Verify code artifact hosting
2014-05-13 16:23:22 -07:00
2016-05-16 22:08:35 -07:00
### C1. Ensure depends tree is working
2015-10-17 03:10:45 -07:00
2016-10-03 11:06:36 -07:00
https://ci.z.cash/builders/depends-sources
2016-05-16 22:08:35 -07:00
### C2. Ensure public parameters work
Run `./fetch-params.sh` .
2016-10-22 18:10:35 -07:00
## D. Make tag for the newly merged result
2013-05-19 21:30:00 -07:00
2016-10-04 21:07:13 -07:00
In this example, we ensure master is up to date with the
2016-04-12 16:54:43 -07:00
previous merged PR, then:
2015-10-17 03:10:45 -07:00
2016-10-04 21:07:13 -07:00
$ git tag -s v${ZCASH_RELEASE}
2016-04-12 16:54:43 -07:00
$ git push origin v${ZCASH_RELEASE}
2016-08-25 13:21:33 -07:00
2016-10-22 18:10:35 -07:00
## E. Deploy testnet
2016-10-03 11:06:36 -07:00
Notify the Zcash DevOps engineer/sysadmin that the release has been tagged. They update some variables in the company's automation code and then run an Ansible playbook, which:
* builds Zcash based on the specified branch
* deploys it as a public service (e.g. betatestnet.z.cash, mainnet.z.cash)
* often the same server can be re-used, and the role idempotently handles upgrades, but if not then they also need to update DNS records
* possible manual steps: blowing away the `testnet3` dir, deleting old parameters, restarting DNS seeder
2016-10-04 15:46:18 -07:00
Then, verify that nodes can connect to the testnet server, and update the guide on the wiki to ensure the correct hostname is listed in the recommended zcash.conf.
2016-10-03 11:06:36 -07:00
2016-10-22 18:10:35 -07:00
## F. Update the Beta Guide
## G. Publish the release announcement (blog, zcash-dev, slack)
2016-10-22 19:02:29 -07:00
## H. Make and deploy deterministic builds
- Run the [Gitian deterministic build environment ](https://github.com/zcash/zcash-gitian )
- Compare the uploaded [build manifests on gitian.sigs ](https://github.com/zcash/gitian.sigs )
- If all is well, the DevOps engineer will build the Debian packages and update the
[apt.z.cash package repository ](https://apt.z.cash ).
## I. Celebrate
2016-10-22 18:10:35 -07:00
2016-05-16 22:08:35 -07:00
## missing steps
Zcash still needs:
2015-10-17 03:10:45 -07:00
2016-05-16 22:08:35 -07:00
* thorough pre-release testing (presumably more thorough than standard PR tests)
2014-12-11 15:53:24 -08:00
2016-10-22 18:10:35 -07:00
* automated release deployment (e.g.: updating build-depends mirror, deploying testnet, etc...)