Release Process ==================== Meta: There should always be a single release engineer to disambiguate responsibility. ## A. Define the release version as: $ ZCASH_RELEASE=MAJOR.MINOR.REVISION(-BUILD_STRING) Example: $ ZCASH_RELEASE=1.0.0-beta2 Also, the following commands use the `ZCASH_RELEASE_PREV` bash variable for the previous release: $ ZCASH_RELEASE_PREV=1.0.0-beta1 ## B. create a new release branch / github PR ### B1. update (commit) version in sources doc/README.md src/clientversion.h configure.ac 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` - 25-49: `1.0.0-rc1-1.0.0-rc25` - 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. ### B2. write release notes git shortlog helps a lot, for example: $ git shortlog --no-merges v${ZCASH_RELEASE_PREV}..HEAD \ > ./doc/release-notes/release-notes-${ZCASH_RELEASE}.md ### B3. change the network magics If this release breaks backwards compatibility, change the network magic numbers. Set the four `pchMessageStart` in `CTestNetParams` in `chainparams.cpp` to random values. ### B4. merge the previous changes Do the normal pull-request, review, testing process for this release PR. ## C. Verify code artifact hosting ### C1. Ensure depends tree is working http://ci.leastauthority.com:8010/builders/depends-sources ### C2. Ensure public parameters work Run `./fetch-params.sh`. ## D. make tags / release-branch for the newly merged result In this example, we ensure zc.v0.11.2.latest is up to date with the previous merged PR, then: $ git tag v${ZCASH_RELEASE} $ git branch zc.v${ZCASH_RELEASE} $ git push origin v${ZCASH_RELEASE} $ git push origin zc.v${ZCASH_RELEASE} ## E. deploy testnet ## F. publish the release announcement (blog, zcash-dev, slack) ## G. celebrate ## missing steps Zcash still needs: * deterministic build * signatured tags * thorough pre-release testing (presumably more thorough than standard PR tests) * release deployment steps (eg: updating build-depends mirror, deploying testnet, etc...) * proper zcash-specific versions and names in software and documentation.