2013-05-20 06:30:00 +02:00
Release Process
====================
2017-12-28 15:52:20 +01:00
* Update translations, see [translation_process.md ](https://github.com/dashpay/dash/blob/master/doc/translation_process.md#synchronising-translations ).
2016-09-25 13:35:15 +02:00
* Update manpages, see [gen-manpages.sh ](https://github.com/dashpay/dash/blob/master/contrib/devtools/README.md#gen-manpagessh ).
2018-01-19 10:50:14 +01:00
Before every minor and major release:
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
* Update [bips.md ](bips.md ) to account for changes since the last release.
2017-04-07 15:37:31 +02:00
* Update version in `configure.ac` (don't forget to set `CLIENT_VERSION_IS_RELEASE` to `true` )
2018-01-19 10:50:14 +01:00
* Write release notes (see below)
* Update `src/chainparams.cpp` nMinimumChainWork with information from the getblockchaininfo rpc.
2018-02-02 11:35:42 +01:00
* Update `src/chainparams.cpp` defaultAssumeValid with information from the getblockhash rpc.
2018-01-19 10:50:14 +01:00
- The selected value must not be orphaned so it may be useful to set the value two blocks back from the tip.
- Testnet should be set some tens of thousands back from the tip due to reorgs there.
- This update should be reviewed with a reindex-chainstate with assumevalid=0 to catch any defect
that causes rejection of blocks in the past history.
Before every major release:
* Update hardcoded [seeds ](/contrib/seeds/README.md ). TODO: Give example PR for Dash
* Update [`BLOCK_CHAIN_SIZE` ](/src/qt/intro.cpp ) to the current size plus some overhead.
2018-01-31 14:48:51 +01:00
* Update `src/chainparams.cpp` chainTxData with statistics about the transaction count and rate. Use the output of the RPC `getchaintxstats` , see
2018-02-02 17:57:01 +01:00
[this pull request ](https://github.com/bitcoin/bitcoin/pull/12270 ) for an example. Reviewers can verify the results by running `getchaintxstats <window_block_count> <window_last_block_hash>` with the `window_block_count` and `window_last_block_hash` from your output.
2017-04-07 15:37:31 +02:00
* Update version of `contrib/gitian-descriptors/*.yml` : usually one'd want to do this on master after branching off the release - but be sure to at least do it before a new major release
2013-05-20 06:30:00 +02:00
2017-05-05 13:28:08 +02:00
### First time / New builders
2018-01-19 10:50:14 +01:00
2018-10-21 21:39:05 +02:00
If you're using the automated script (found in [contrib/gitian-build.py ](/contrib/gitian-build.py )), then at this point you should run it with the "--setup" command. Otherwise ignore this.
2016-09-30 20:50:37 +02:00
2015-10-13 13:11:17 +02:00
Check out the source code in the following directory hierarchy.
2013-05-20 06:30:00 +02:00
2015-09-17 23:17:26 +02:00
cd /path/to/your/toplevel/build
2016-02-02 16:28:56 +01:00
git clone https://github.com/dashpay/gitian.sigs.git
git clone https://github.com/dashpay/dash-detached-sigs.git
2015-09-17 23:17:26 +02:00
git clone https://github.com/devrandom/gitian-builder.git
2016-02-02 16:28:56 +01:00
git clone https://github.com/dashpay/dash.git
2015-09-17 23:17:26 +02:00
2017-04-07 15:37:31 +02:00
### Dash Core maintainers/release engineers, suggestion for writing release notes
2018-01-19 10:50:14 +01:00
Write release notes. git shortlog helps a lot, for example:
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
git shortlog --no-merges v(current version, e.g. 0.12.2)..v(new version, e.g. 0.12.3)
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
Generate list of authors:
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
git log --format='%aN' "$*" | sort -ui | sed -e 's/^/- /'
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
Tag version (or release candidate) in git
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
git tag -s v(new version, e.g. 0.12.3)
2013-05-20 06:30:00 +02:00
2017-05-05 13:28:08 +02:00
### Setup and perform Gitian builds
2014-08-13 01:24:05 +02:00
2018-10-21 21:39:05 +02:00
If you're using the automated script (found in [contrib/gitian-build.py ](/contrib/gitian-build.py )), then at this point you should run it with the "--build" command. Otherwise ignore this.
2016-09-30 20:50:37 +02:00
2018-01-19 10:50:14 +01:00
Setup Gitian descriptors:
2014-08-13 01:24:05 +02:00
2018-01-19 10:50:14 +01:00
pushd ./dash
2018-03-06 18:47:52 +01:00
export SIGNER="(your Gitian key, ie UdjinM6, Pasta, etc)"
2018-01-19 10:50:14 +01:00
export VERSION=(new version, e.g. 0.12.3)
git fetch
git checkout v${VERSION}
popd
2015-09-17 23:17:26 +02:00
2018-01-19 10:50:14 +01:00
Ensure your gitian.sigs are up-to-date if you wish to gverify your builds against other Gitian signatures.
2015-09-17 23:17:26 +02:00
2018-01-19 10:50:14 +01:00
pushd ./gitian.sigs
git pull
popd
2015-09-17 23:17:26 +02:00
2018-01-19 10:50:14 +01:00
Ensure gitian-builder is up-to-date:
pushd ./gitian-builder
git pull
popd
2015-09-17 23:17:26 +02:00
2014-05-14 01:23:22 +02:00
2017-05-05 13:28:08 +02:00
### Fetch and create inputs: (first time, or when dependency versions change)
2014-05-14 01:23:22 +02:00
2018-01-19 10:50:14 +01:00
pushd ./gitian-builder
mkdir -p inputs
2020-01-01 15:15:08 +01:00
wget -O inputs/osslsigncode-2.0.tar.gz https://github.com/mtrojnar/osslsigncode/archive/2.0.tar.gz
echo '5a60e0a4b3e0b4d655317b2f12a810211c50242138322b16e7e01c6fbb89d92f inputs/osslsigncode-2.0.tar.gz' | sha256sum -c
2018-01-19 10:50:14 +01:00
popd
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
Create the OS X SDK tarball, see the [OS X readme ](README_osx.md ) for details, and copy it into the inputs directory.
2014-12-11 21:38:29 +01:00
2017-05-05 13:28:08 +02:00
### Optional: Seed the Gitian sources cache and offline git repositories
2014-12-12 00:53:24 +01:00
2015-10-17 12:10:45 +02:00
By default, Gitian will fetch source files as needed. To cache them ahead of time:
2014-12-11 21:38:29 +01:00
2018-01-19 10:50:14 +01:00
pushd ./gitian-builder
make -C ../dash/depends download SOURCES_PATH=`pwd`/cache/common
popd
2014-12-11 21:38:29 +01:00
2015-09-17 23:17:26 +02:00
Only missing files will be fetched, so this is safe to re-run for each build.
2015-10-17 12:10:45 +02:00
NOTE: Offline builds must use the --url flag to ensure Gitian fetches only from local URLs. For example:
2018-01-19 10:50:14 +01:00
pushd ./gitian-builder
./bin/gbuild --url dash=/path/to/dash,signature=/path/to/sigs {rest of arguments}
popd
2015-10-13 13:11:17 +02:00
The gbuild invocations below < b > DO NOT DO THIS< / b > by default.
2014-12-11 21:38:29 +01:00
2017-05-05 13:28:08 +02:00
### Build and sign Dash Core for Linux, Windows, and OS X:
2015-01-13 18:58:24 +01:00
2018-01-19 10:50:14 +01:00
pushd ./gitian-builder
2017-08-14 15:59:09 +02:00
./bin/gbuild --num-make 2 --memory 3000 --commit dash=v${VERSION} ../dash/contrib/gitian-descriptors/gitian-linux.yml
2018-03-06 18:47:52 +01:00
./bin/gsign --signer "$SIGNER" --release ${VERSION}-linux --destination ../gitian.sigs/ ../dash/contrib/gitian-descriptors/gitian-linux.yml
2018-01-19 10:50:14 +01:00
mv build/out/dash-*.tar.gz build/out/src/dash-*.tar.gz ../
2015-09-17 23:17:26 +02:00
2017-08-14 15:59:09 +02:00
./bin/gbuild --num-make 2 --memory 3000 --commit dash=v${VERSION} ../dash/contrib/gitian-descriptors/gitian-win.yml
2018-03-06 18:47:52 +01:00
./bin/gsign --signer "$SIGNER" --release ${VERSION}-win-unsigned --destination ../gitian.sigs/ ../dash/contrib/gitian-descriptors/gitian-win.yml
2018-01-19 10:50:14 +01:00
mv build/out/dash-*-win-unsigned.tar.gz inputs/dash-win-unsigned.tar.gz
mv build/out/dash-*.zip build/out/dash-*.exe ../
2015-09-17 23:17:26 +02:00
2017-08-14 15:59:09 +02:00
./bin/gbuild --num-make 2 --memory 3000 --commit dash=v${VERSION} ../dash/contrib/gitian-descriptors/gitian-osx.yml
2018-03-06 18:47:52 +01:00
./bin/gsign --signer "$SIGNER" --release ${VERSION}-osx-unsigned --destination ../gitian.sigs/ ../dash/contrib/gitian-descriptors/gitian-osx.yml
2018-01-19 10:50:14 +01:00
mv build/out/dash-*-osx-unsigned.tar.gz inputs/dash-osx-unsigned.tar.gz
mv build/out/dash-*.tar.gz build/out/dash-*.dmg ../
popd
2015-09-17 23:17:26 +02:00
2018-01-19 10:50:14 +01:00
Build output expected:
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
1. source tarball (`dash-${VERSION}.tar.gz`)
2. linux 32-bit and 64-bit dist tarballs (`dash-${VERSION}-linux[32|64].tar.gz`)
3. windows 32-bit and 64-bit unsigned installers and dist zips (`dash-${VERSION}-win[32|64]-setup-unsigned.exe`, `dash-${VERSION}-win[32|64].zip` )
4. OS X unsigned installer and dist tarball (`dash-${VERSION}-osx-unsigned.dmg`, `dash-${VERSION}-osx64.tar.gz` )
5. Gitian signatures (in `gitian.sigs/${VERSION}-<linux|{win,osx}-unsigned>/(your Gitian key)/` )
2013-05-20 06:30:00 +02:00
2017-05-05 13:28:08 +02:00
### Verify other gitian builders signatures to your own. (Optional)
2015-12-25 13:09:26 +01:00
2018-01-19 10:50:14 +01:00
Add other gitian builders keys to your gpg keyring, and/or refresh keys.
2015-12-25 13:09:26 +01:00
2018-01-19 10:50:14 +01:00
gpg --import dash/contrib/gitian-keys/*.pgp
gpg --refresh-keys
2015-12-25 13:09:26 +01:00
2018-01-19 10:50:14 +01:00
Verify the signatures
2015-12-25 13:09:26 +01:00
2018-01-19 10:50:14 +01:00
pushd ./gitian-builder
./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-linux ../dash/contrib/gitian-descriptors/gitian-linux.yml
./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-win-unsigned ../dash/contrib/gitian-descriptors/gitian-win.yml
./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-osx-unsigned ../dash/contrib/gitian-descriptors/gitian-osx.yml
popd
2015-12-25 13:09:26 +01:00
2017-05-05 13:28:08 +02:00
### Next steps:
2013-05-20 06:30:00 +02:00
Commit your signature to gitian.sigs:
2018-01-19 10:50:14 +01:00
pushd gitian.sigs
2018-03-06 18:47:52 +01:00
git add ${VERSION}-linux/"${SIGNER}"
git add ${VERSION}-win-unsigned/"${SIGNER}"
git add ${VERSION}-osx-unsigned/"${SIGNER}"
2018-01-19 10:50:14 +01:00
git commit -a
git push # Assuming you can push to the gitian.sigs tree
popd
2015-06-19 00:17:36 +02:00
2017-03-13 07:37:02 +01:00
Codesigner only: Create Windows/OS X detached signatures:
- Only one person handles codesigning. Everyone else should skip to the next step.
- Only once the Windows/OS X builds each have 3 matching signatures may they be signed with their respective release keys.
Codesigner only: Sign the osx binary:
2019-02-26 23:04:56 +01:00
transfer dashcore-osx-unsigned.tar.gz to osx for signing
tar xf dashcore-osx-unsigned.tar.gz
2019-08-28 09:54:19 +02:00
./detached-sig-create.sh -s "Key ID" -o runtime
2017-03-13 07:37:02 +01:00
Enter the keychain password and authorize the signature
Move signature-osx.tar.gz back to the gitian host
Codesigner only: Sign the windows binaries:
2019-02-26 23:04:56 +01:00
tar xf dashcore-win-unsigned.tar.gz
2017-03-13 07:37:02 +01:00
./detached-sig-create.sh -key /path/to/codesign.key
Enter the passphrase for the key when prompted
signature-win.tar.gz will be created
Codesigner only: Commit the detached codesign payloads:
2019-02-26 23:04:56 +01:00
cd ~/dashcore-detached-sigs
2017-03-13 07:37:02 +01:00
checkout the appropriate branch for this release series
rm -rf *
tar xf signature-osx.tar.gz
tar xf signature-win.tar.gz
git add -a
git commit -m "point to ${VERSION}"
git tag -s v${VERSION} HEAD
git push the current branch and new tag
Non-codesigners: wait for Windows/OS X detached signatures:
2018-01-19 10:50:14 +01:00
- Once the Windows/OS X builds each have 3 matching signatures, they will be signed with their respective release keys.
- Detached signatures will then be committed to the [dash-detached-sigs ](https://github.com/dashpay/dash-detached-sigs ) repository, which can be combined with the unsigned apps to create signed binaries.
Create (and optionally verify) the signed OS X binary:
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
pushd ./gitian-builder
./bin/gbuild -i --commit signature=v${VERSION} ../dash/contrib/gitian-descriptors/gitian-osx-signer.yml
2018-03-06 18:47:52 +01:00
./bin/gsign --signer "$SIGNER" --release ${VERSION}-osx-signed --destination ../gitian.sigs/ ../dash/contrib/gitian-descriptors/gitian-osx-signer.yml
2018-01-19 10:50:14 +01:00
./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-osx-signed ../dash/contrib/gitian-descriptors/gitian-osx-signer.yml
mv build/out/dash-osx-signed.dmg ../dash-${VERSION}-osx.dmg
popd
2013-05-20 06:30:00 +02:00
2018-01-19 10:50:14 +01:00
Create (and optionally verify) the signed Windows binaries:
pushd ./gitian-builder
./bin/gbuild -i --commit signature=v${VERSION} ../dash/contrib/gitian-descriptors/gitian-win-signer.yml
2018-03-06 18:47:52 +01:00
./bin/gsign --signer "$SIGNER" --release ${VERSION}-win-signed --destination ../gitian.sigs/ ../dash/contrib/gitian-descriptors/gitian-win-signer.yml
2018-01-19 10:50:14 +01:00
./bin/gverify -v -d ../gitian.sigs/ -r ${VERSION}-win-signed ../dash/contrib/gitian-descriptors/gitian-win-signer.yml
mv build/out/dash-*win64-setup.exe ../dash-${VERSION}-win64-setup.exe
mv build/out/dash-*win32-setup.exe ../dash-${VERSION}-win32-setup.exe
popd
Commit your signature for the signed OS X/Windows binaries:
pushd gitian.sigs
2018-03-06 18:47:52 +01:00
git add ${VERSION}-osx-signed/"${SIGNER}"
git add ${VERSION}-win-signed/"${SIGNER}"
2018-01-19 10:50:14 +01:00
git commit -a
git push # Assuming you can push to the gitian.sigs tree
popd
2013-05-20 06:30:00 +02:00
2014-08-22 11:28:51 +02:00
### After 3 or more people have gitian-built and their results match:
2013-05-20 06:30:00 +02:00
2014-09-27 15:58:47 +02:00
- Create `SHA256SUMS.asc` for the builds, and GPG-sign it:
2018-01-19 10:50:14 +01:00
2014-09-27 15:58:47 +02:00
```bash
sha256sum * > SHA256SUMS
2018-01-19 10:50:14 +01:00
```
The list of files should be:
```
dash-${VERSION}-aarch64-linux-gnu.tar.gz
dash-${VERSION}-arm-linux-gnueabihf.tar.gz
dash-${VERSION}-i686-pc-linux-gnu.tar.gz
dash-${VERSION}-x86_64-linux-gnu.tar.gz
dash-${VERSION}-osx64.tar.gz
dash-${VERSION}-osx.dmg
dash-${VERSION}.tar.gz
dash-${VERSION}-win32-setup.exe
dash-${VERSION}-win32.zip
dash-${VERSION}-win64-setup.exe
dash-${VERSION}-win64.zip
```
2020-01-05 01:20:25 +01:00
The `*-debug*` files generated by the Gitian build contain debug symbols
2018-01-19 10:50:14 +01:00
for troubleshooting by developers. It is assumed that anyone that is interested
2020-01-05 01:20:25 +01:00
in debugging can run Gitian to generate the files for themselves. To avoid
2018-01-19 10:50:14 +01:00
end-user confusion about which file to pick, as well as save storage
space *do not upload these to the dash.org server* .
- GPG-sign it, delete the unsigned file:
```
2014-09-29 16:58:30 +02:00
gpg --digest-algo sha256 --clearsign SHA256SUMS # outputs SHA256SUMS.asc
2014-09-27 15:58:47 +02:00
rm SHA256SUMS
2014-08-22 11:28:51 +02:00
```
2014-09-29 16:58:30 +02:00
(the digest algorithm is forced to sha256 to avoid confusion of the `Hash:` header that GPG adds with the SHA256 used for the files)
2015-02-16 10:37:13 +01:00
Note: check that SHA256SUMS itself doesn't end up in SHA256SUMS, which is a spurious/nonsensical entry.
2014-08-22 11:28:51 +02:00
2016-01-31 14:11:16 +01:00
- Upload zips and installers, as well as `SHA256SUMS.asc` from last step, to the dash.org server
2014-08-04 09:47:59 +02:00
2016-01-31 14:11:16 +01:00
- Update dash.org
2014-08-22 11:28:51 +02:00
- Announce the release:
2013-12-10 09:57:30 +01:00
2016-10-22 18:52:14 +02:00
- Release on Dash forum: https://www.dash.org/forum/topic/official-announcements.54/
2013-12-10 09:57:30 +01:00
2018-01-19 10:50:14 +01:00
- Optionally Discord, twitter, reddit /r/Dashpay, ... but this will usually sort out itself
2014-08-22 11:28:51 +02:00
2016-11-07 13:00:13 +01:00
- Notify flare so that he can start building [the PPAs ](https://launchpad.net/~dash.org/+archive/ubuntu/dash )
2014-08-22 11:28:51 +02:00
2016-11-07 13:00:13 +01:00
- Archive release notes for the new version to `doc/release-notes/` (branch `master` and branch of the release)
2013-12-10 09:57:30 +01:00
2016-11-07 13:00:13 +01:00
- Create a [new GitHub release ](https://github.com/dashpay/dash/releases/new ) with a link to the archived release notes.
- Celebrate