Merge pull request #330634 from r-ryantm/auto-update/circumflex
[NixPkgs.git] / pkgs / servers / matrix-synapse / default.nix
blobab7573c683e58348c0503d8493e6c4b6569efba8
1 { lib
2 , stdenv
3 , fetchFromGitHub
4 , python3
5 , openssl
6 , libiconv
7 , cargo
8 , rustPlatform
9 , rustc
10 , nixosTests
11 , callPackage
14 let
15   plugins = python3.pkgs.callPackage ./plugins { };
16   tools = callPackage ./tools { };
18 python3.pkgs.buildPythonApplication rec {
19   pname = "matrix-synapse";
20   version = "1.111.0";
21   format = "pyproject";
23   src = fetchFromGitHub {
24     owner = "element-hq";
25     repo = "synapse";
26     rev = "v${version}";
27     hash = "sha256-CgoJJK2pqkHU8X6oisY19uN6zyjGL8W3irTsraFOYQM=";
28   };
30   cargoDeps = rustPlatform.fetchCargoTarball {
31     inherit src;
32     name = "${pname}-${version}";
33     hash = "sha256-uKyy2m3bvo6U++Qx6t7maeIp84QfMzslPGV1so4ZT3U=";
34   };
36   postPatch = ''
37     # Remove setuptools_rust from runtime dependencies
38     # https://github.com/element-hq/synapse/blob/v1.69.0/pyproject.toml#L177-L185
39     sed -i '/^setuptools_rust =/d' pyproject.toml
41     # Remove version pin on build dependencies. Upstream does this on purpose to
42     # be extra defensive, but we don't want to deal with updating this
43     sed -i 's/"poetry-core>=\([0-9.]*\),<=[0-9.]*"/"poetry-core>=\1"/' pyproject.toml
44     sed -i 's/"setuptools_rust>=\([0-9.]*\),<=[0-9.]*"/"setuptools_rust>=\1"/' pyproject.toml
46     # Don't force pillow to be 10.0.1 because we already have patched it, and
47     # we don't use the pillow wheels.
48     sed -i 's/Pillow = ".*"/Pillow = ">=5.4.0"/' pyproject.toml
49   '';
51   nativeBuildInputs = with python3.pkgs; [
52     poetry-core
53     rustPlatform.cargoSetupHook
54     setuptools-rust
55     cargo
56     rustc
57   ];
59   buildInputs = [
60     openssl
61   ] ++ lib.optionals stdenv.isDarwin [
62     libiconv
63   ];
65   propagatedBuildInputs = with python3.pkgs; [
66     attrs
67     bcrypt
68     bleach
69     canonicaljson
70     cryptography
71     ijson
72     immutabledict
73     jinja2
74     jsonschema
75     matrix-common
76     msgpack
77     python-multipart
78     netaddr
79     packaging
80     phonenumbers
81     pillow
82     prometheus-client
83     pyasn1
84     pyasn1-modules
85     pydantic
86     pymacaroons
87     pyopenssl
88     pyyaml
89     service-identity
90     signedjson
91     sortedcontainers
92     treq
93     twisted
94     typing-extensions
95     unpaddedbase64
96   ]
97   ++ twisted.optional-dependencies.tls;
99   passthru.optional-dependencies = with python3.pkgs; {
100     postgres = if isPyPy then [
101       psycopg2cffi
102     ] else [
103       psycopg2
104     ];
105     saml2 = [
106       pysaml2
107     ];
108     oidc = [
109       authlib
110     ];
111     systemd = [
112       systemd
113     ];
114     url-preview = [
115       lxml
116     ];
117     sentry = [
118       sentry-sdk
119     ];
120     jwt = [
121       authlib
122     ];
123     redis = [
124       hiredis
125       txredisapi
126     ];
127     cache-memory = [
128       pympler
129     ];
130     user-search = [
131       pyicu
132     ];
133   };
135   nativeCheckInputs = [
136     openssl
137   ] ++ (with python3.pkgs; [
138     mock
139     parameterized
140   ])
141   ++ lib.flatten (lib.attrValues passthru.optional-dependencies);
143   doCheck = !stdenv.isDarwin;
145   checkPhase = ''
146     runHook preCheck
148     # remove src module, so tests use the installed module instead
149     rm -rf ./synapse
151     # high parallelisem makes test suite unstable
152     # upstream uses 2 cores but 4 seems to be also stable
153     # https://github.com/element-hq/synapse/blob/develop/.github/workflows/latest_deps.yml#L103
154     if (( $NIX_BUILD_CORES > 4)); then
155       NIX_BUILD_CORES=4
156     fi
158     PYTHONPATH=".:$PYTHONPATH" ${python3.interpreter} -m twisted.trial -j $NIX_BUILD_CORES tests
160     runHook postCheck
161   '';
163   passthru = {
164     tests = { inherit (nixosTests) matrix-synapse matrix-synapse-workers; };
165     inherit plugins tools;
166     python = python3;
167   };
169   meta = with lib; {
170     homepage = "https://matrix.org";
171     changelog = "https://github.com/element-hq/synapse/releases/tag/v${version}";
172     description = "Matrix reference homeserver";
173     license = licenses.agpl3Plus;
174     maintainers = teams.matrix.members;
175   };