123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138 |
- #!/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`
- TEMP_VENV="$(mktemp -d)"
- python3 -m venv "$TEMP_VENV"
- source "$TEMP_VENV/bin/activate"
- pip install -U pip
- pip install poetry==1.3.2
- 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
|