#!/bin/bash # # runs dh_virtualenv to build the virtualenv in the build directory, # and then runs the trial tests against the installed synapse. set -e export DH_VIRTUALENV_INSTALL_ROOT=/opt/venvs # make sure that the virtualenv links to the specific version of python, by # dereferencing the python3 symlink. # # Otherwise, if somebody tries to install (say) the stretch package on buster, # they will get a confusing error about "No module named 'synapse'", because # python won't look in the right directory. At least this way, the error will # be a *bit* more obvious. # SNAKE=$(readlink -e /usr/bin/python3) # try to set the CFLAGS so any compiled C extensions are compiled with the most # generic as possible x64 instructions, so that compiling it on a new Intel chip # doesn't enable features not available on older ones or AMD. # # TODO: add similar things for non-amd64, or figure out a more generic way to # do this. case $(dpkg-architecture -q DEB_HOST_ARCH) in amd64) export CFLAGS=-march=x86-64 ;; esac # Manually install Poetry and export a pip-compatible `requirements.txt` # We need a Poetry pre-release as the export command is buggy in < 1.2 TEMP_VENV="$(mktemp -d)" python3 -m venv "$TEMP_VENV" source "$TEMP_VENV/bin/activate" pip install -U pip pip install poetry==1.2.0 poetry export \ --extras all \ --extras test \ --extras systemd \ -o exported_requirements.txt deactivate rm -rf "$TEMP_VENV" # Use --no-deps to only install pinned versions in exported_requirements.txt, # and to avoid https://github.com/pypa/pip/issues/9644 dh_virtualenv \ --install-suffix "matrix-synapse" \ --builtin-venv \ --python "$SNAKE" \ --upgrade-pip \ --preinstall="lxml" \ --preinstall="mock" \ --preinstall="wheel" \ --extra-pip-arg="--no-deps" \ --extra-pip-arg="--no-cache-dir" \ --extra-pip-arg="--compile" \ --extras="all,systemd,test" \ --requirements="exported_requirements.txt" PACKAGE_BUILD_DIR="$(pwd)/debian/matrix-synapse-py3" VIRTUALENV_DIR="${PACKAGE_BUILD_DIR}${DH_VIRTUALENV_INSTALL_ROOT}/matrix-synapse" TARGET_PYTHON="${VIRTUALENV_DIR}/bin/python" case "$DEB_BUILD_OPTIONS" in *nocheck*) # Skip running tests if "nocheck" present in $DEB_BUILD_OPTIONS ;; *) # Copy tests to a temporary directory so that we can put them on the # PYTHONPATH without putting the uninstalled synapse on the pythonpath. tmpdir=$(mktemp -d) trap 'rm -r $tmpdir' EXIT cp -r tests "$tmpdir" # To avoid pulling in the unbuilt Synapse in the local directory pushd / PYTHONPATH="$tmpdir" \ "${TARGET_PYTHON}" -m twisted.trial --reporter=text -j2 tests popd ;; esac # build the config file "${TARGET_PYTHON}" "${VIRTUALENV_DIR}/bin/generate_config" \ --config-dir="/etc/matrix-synapse" \ --data-dir="/var/lib/matrix-synapse" | perl -pe ' # tweak the paths to the tls certs and signing keys /^tls_.*_path:/ and s/SERVERNAME/homeserver/; /^signing_key_path:/ and s/SERVERNAME/homeserver/; # tweak the pid file location /^pid_file:/ and s#:.*#: "/var/run/matrix-synapse.pid"#; # tweak the path to the log config /^log_config:/ and s/SERVERNAME\.log\.config/log.yaml/; # tweak the path to the media store /^media_store_path:/ and s#/media_store#/media#; # remove the server_name setting, which is set in a separate file /^server_name:/ and $_ = "#\n# This is set in /etc/matrix-synapse/conf.d/server_name.yaml for Debian installations.\n# $_"; # remove the report_stats setting, which is set in a separate file /^# report_stats:/ and $_ = ""; ' > "${PACKAGE_BUILD_DIR}/etc/matrix-synapse/homeserver.yaml" # build the log config file "${TARGET_PYTHON}" "${VIRTUALENV_DIR}/bin/generate_log_config" \ --output-file="${PACKAGE_BUILD_DIR}/etc/matrix-synapse/log.yaml" # add a dependency on the right version of python to substvars. PYPKG=$(basename "$SNAKE") echo "synapse:pydepends=$PYPKG" >> debian/matrix-synapse-py3.substvars # add a couple of triggers. This is needed so that dh-virtualenv can rebuild # the venv when the system python changes (see # https://dh-virtualenv.readthedocs.io/en/latest/tutorial.html#step-2-set-up-packaging-for-your-project) # # we do it here rather than the more conventional way of just adding it to # debian/matrix-synapse-py3.triggers, because we need to add a trigger on the # right version of python. cat >>"debian/.debhelper/generated/matrix-synapse-py3/triggers" <<EOF # triggers for dh-virtualenv interest-noawait $SNAKE interest dh-virtualenv-interpreter-update EOF