Electrum ABC release procedure

This document summarizes the Electrum ABC release procedure.

All commands in this doc assume that the current working directory is the electrum directory located in the root of the main repository.

Notes about using Docker in the build scripts

Docker is required for the various build scripts, except for MacOS. It can usually be installed using your system’s docker package.

See the official documentation for alternative ways to install it.

To communicate with the docker daemon, the build scripts either need to be called via sudo, or the unix user on the host system (e.g. the user you run as) needs to be part of the docker group. i.e.:

sudo usermod -aG docker ${USER}

(and then reboot or similar for it to take effect)

Clean the repository

Run:

contrib/make_clean

This will remove most uncommited files and build artifacts from the electrum directory. It ensures the various release packages don’t contain unnecessary files or uncommited changes.

Bump the version

Update the version in electrumabc/version.py and check the release notes in RELEASE-NOTES.md. Submit a diff with the version change and potential changes to the release notes. This diff needs to be landed before proceeding with the release.

Building the release files

Source distribution

The source distribution is a tar.gz package generated on a linux docker, and contains some compiled binaries for optional dependencies.

This source distribution can also be used to run the application from sources on other systems than linux, but without access to compiled libsecp256k1 or libzbar libraries. As a result, scanning QR codes might be unavailable and some cryptographic operations will be significantly slower.

Run:

contrib/build-linux/srcdist_docker/build.sh

Building the linux AppImage

The AppImage file generated by this script can be executed on most linux distributions and contains all needed dependencies to use all features of Electrum ABC.

Run:

contrib/build-linux/appimage/build.sh

Building the Windows .exe files

Three different exe files are generated by the following script:

Run:

contrib/build-wine/build.sh

Note that at the moment running this script requires the user to have sudo privileges.

Building the Mac OS dmg file

To install the required build dependencies, see the dedicated README.md.

On a Mac OS computer, run:

contrib/osx/make_osx

Use the oldest possible MacOS version for maximum compatibility. Currently, the release files are generated on a MacOS 11 (Big Sur) system.

Signing the release

This procedure assumes that all files will be located in the dist/ directory in the Electrum ABC source tree. Most files will be generated there. However, the Mac OS release involves a manual copy of the dmg file.

The public GPG keys used to sign the release are located in contrib/pubkeys. This directory also contains a README.md file explaining the procedure to verify a release file.

Run:

contrib/sign_packages

The script will prompt for your key’s password. It generates a text file containing the sha256sum of all the release files (sha256_checksums-X.Y.Z.txt), and then produces a detached signature using GPG (sha256_checksums-X.Y.Z.txt.sig)`.

Both files are generated in the dist directory.

Uploading the release to Github

Before uploading the release to github, the release commit needs to be pushed to the master branch of the Electrum ABC github repository.

Option 1: Wait for the automated repository synchronization to push the commit. This task runs once a day.

Option 2: Manually trigger the repository synchronization task on CI (Extract Electrum ABC from ABC), or ask someone with the required permission to do it for you.

Option 3 Run the contrib/extract-electrum.sh script from the root of the monorepo, and push manually:

contrib/extract-electrum.sh
cd  electrumabc-mirror/
git remote -v     # verify that the remote name is "github"
git push github master

This option requires that you have the push permission on the Github repository.

Then draft a new release on the github repository, select the release commit (usually the latest commit on master) and add a new X.Y.Z tag. Attach the binary files, the checksum file and the signature file located in dist. When all binaries are uploaded, publish the release. See the Managing releases in a repository documentation for the complete procedure.

Deploy the bitcoinabc.org website to update the versions and download links on https://www.bitcoinabc.org/electrum/.

Push a release notification

Once the version and download links are available on the download page https://www.bitcoinabc.org/electrum/, and all the release files are tested, follow the steps explained in the update_checker’s README.md.