Release Process

  1. Bump version number in pyproject.toml and hwilib/, generate the file, and git tag release

  2. Build distribution archives for PyPi with contrib/

  3. For MacOS and Linux, use contrib/ This needs to be run on a MacOS machine for the MacOS binary and on a Linux machine for the linux one.

  4. For Windows, use contrib/ to build the Windows binary using wine

  5. Upload distribution archives to PyPi

  6. Upload distribution archives and standalone binaries to Github

Deterministic builds with Docker

Create the docker image:

docker build --no-cache -t hwi-builder -f contrib/build.Dockerfile .

Build everything:

docker run -it --name hwi-builder -v $PWD:/opt/hwi --rm  --workdir /opt/hwi hwi-builder /bin/bash -c "contrib/ && contrib/ && contrib/"

Building macOS binary

Note that the macOS build is non-deterministic.

First install pyenv using whichever method you prefer.

Then a deterministic build of Python 3.6.8 needs to be installed. This can be done with the patch in contrib/reproducible-python.diff. First cd into HWI’s source tree. Then use:

cat contrib/reproducible-python.diff | PYTHON_CONFIGURE_OPTS="--enable-framework" BUILD_DATE="Jan  1 2019" BUILD_TIME="00:00:00" pyenv install -kp 3.6.8

Make sure that python 3.6.8 is active:

$ python --version
Python 3.6.8

Now install Poetry with pip install poetry

Additional dependencies can be installed with:

brew install libusb

Build the binaries by using contrib/