118 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
			
		
		
	
	
			118 lines
		
	
	
		
			3.9 KiB
		
	
	
	
		
			Bash
		
	
	
		
			Executable File
		
	
| #!/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
 | |
| 
 | |
| # Use --builtin-venv to use the better `venv` module from CPython 3.4+ rather
 | |
| # than the 2/3 compatible `virtualenv`.
 | |
| 
 | |
| dh_virtualenv \
 | |
|     --install-suffix "matrix-synapse" \
 | |
|     --builtin-venv \
 | |
|     --python "$SNAKE" \
 | |
|     --upgrade-pip \
 | |
|     --preinstall="lxml" \
 | |
|     --preinstall="mock" \
 | |
|     --extra-pip-arg="--no-cache-dir" \
 | |
|     --extra-pip-arg="--compile" \
 | |
|     --extras="all,systemd,test"
 | |
| 
 | |
| PACKAGE_BUILD_DIR="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"
 | |
| 
 | |
|         PYTHONPATH="$tmpdir" \
 | |
|             "${TARGET_PYTHON}" -m twisted.trial --reporter=text -j2 tests
 | |
| 
 | |
|         ;;
 | |
| 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
 |