diff options
Diffstat (limited to 'nixpkgs/pkgs/tools/networking/maubot')
-rw-r--r-- | nixpkgs/pkgs/tools/networking/maubot/allow-building-plugins-from-nix-store.patch | 13 | ||||
-rw-r--r-- | nixpkgs/pkgs/tools/networking/maubot/default.nix | 137 |
2 files changed, 150 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/tools/networking/maubot/allow-building-plugins-from-nix-store.patch b/nixpkgs/pkgs/tools/networking/maubot/allow-building-plugins-from-nix-store.patch new file mode 100644 index 000000000000..1df88b92aa51 --- /dev/null +++ b/nixpkgs/pkgs/tools/networking/maubot/allow-building-plugins-from-nix-store.patch @@ -0,0 +1,13 @@ +diff --git a/maubot/cli/commands/build.py b/maubot/cli/commands/build.py +index ec3ac26..4de85f2 100644 +--- a/maubot/cli/commands/build.py ++++ b/maubot/cli/commands/build.py +@@ -84,7 +84,7 @@ def read_output_path(output: str, meta: PluginMeta) -> str | None: + + + def write_plugin(meta: PluginMeta, output: str | IO) -> None: +- with zipfile.ZipFile(output, "w") as zip: ++ with zipfile.ZipFile(output, "w", strict_timestamps=False) as zip: + meta_dump = BytesIO() + yaml.dump(meta.serialize(), meta_dump) + zip.writestr("maubot.yaml", meta_dump.getvalue()) diff --git a/nixpkgs/pkgs/tools/networking/maubot/default.nix b/nixpkgs/pkgs/tools/networking/maubot/default.nix new file mode 100644 index 000000000000..4242ffcf9984 --- /dev/null +++ b/nixpkgs/pkgs/tools/networking/maubot/default.nix @@ -0,0 +1,137 @@ +{ lib +, fetchPypi +, fetchpatch +, runCommand +, python3 +, encryptionSupport ? true +}: + +let + python = python3.override { + packageOverrides = final: prev: { + # aiosqlite>=0.16,<0.19 + aiosqlite = prev.aiosqlite.overridePythonAttrs (old: rec { + version = "0.18.0"; + src = old.src.override { + rev = "refs/tags/v${version}"; + hash = "sha256-yPGSKqjOz1EY5/V0oKz2EiZ90q2O4TINoXdxHuB7Gqk="; + }; + }); + # mautrix>=0.19.8,<0.20 + mautrix = prev.mautrix.overridePythonAttrs (old: rec { + version = "0.19.16"; + disabled = final.pythonOlder "3.8"; + checkInputs = old.checkInputs ++ [ final.sqlalchemy ]; + SQLALCHEMY_SILENCE_UBER_WARNING = true; + src = old.src.override { + rev = "refs/tags/v${version}"; + hash = "sha256-aZlc4+J5Q+N9qEzGUMhsYguPdUy+E5I06wrjVyqvVDk="; + }; + }); + # mautrix has a runtime error with new ruamel-yaml since 0.17.22 changed the interface + ruamel-yaml = prev.ruamel-yaml.overridePythonAttrs (prev: rec { + version = "0.17.21"; + src = prev.src.override { + version = version; + hash = "sha256-i3zml6LyEnUqNcGsQURx3BbEJMlXO+SSa1b/P10jt68="; + }; + }); + # SQLAlchemy>=1,<1.4 + # SQLAlchemy 2.0's derivation is very different, so don't override, just write it from scratch + # (see https://github.com/NixOS/nixpkgs/blob/65dbed73949e4c0207e75dcc7271b29f9e457670/pkgs/development/python-modules/sqlalchemy/default.nix) + sqlalchemy = final.buildPythonPackage rec { + pname = "SQLAlchemy"; + version = "1.3.24"; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-67t3fL+TEjWbiXv4G6ANrg9ctp+6KhgmXcwYpvXvdRk="; + }; + + postInstall = '' + sed -e 's:--max-worker-restart=5::g' -i setup.cfg + ''; + + # tests are pretty annoying to set up for this version, and these dependency overrides are already long enough + doCheck = false; + }; + }; + }; + + maubot = python.pkgs.buildPythonPackage rec { + pname = "maubot"; + version = "0.4.1"; + disabled = python.pythonOlder "3.8"; + + src = fetchPypi { + inherit pname version; + sha256 = "sha256-Ro2PPgF8818F8JewPZ3AlbfWFNNHKTZkQq+1zpm3kk4="; + }; + + patches = [ + # add entry point - https://github.com/maubot/maubot/pull/146 + (fetchpatch { + url = "https://github.com/maubot/maubot/commit/283f0a3ed5dfae13062b6f0fd153fbdc477f4381.patch"; + sha256 = "0yn5357z346qzy5v5g124mgiah1xsi9yyfq42zg028c8paiw8s8x"; + }) + # allow running "mbc build" in a nix derivation + ./allow-building-plugins-from-nix-store.patch + ]; + + propagatedBuildInputs = with python.pkgs; [ + # requirements.txt + mautrix + aiohttp + yarl + sqlalchemy + asyncpg + aiosqlite + commonmark + ruamel-yaml + attrs + bcrypt + packaging + click + colorama + questionary + jinja2 + ] + # optional-requirements.txt + ++ lib.optionals encryptionSupport [ + python-olm + pycryptodome + unpaddedbase64 + ]; + + postInstall = '' + rm $out/example-config.yaml + ''; + + passthru.tests = { + simple = runCommand "${pname}-tests" { } '' + ${maubot}/bin/mbc --help > $out + ''; + }; + + # Setuptools is trying to do python -m maubot test + dontUseSetuptoolsCheck = true; + + pythonImportsCheck = [ + "maubot" + ]; + + meta = with lib; { + description = "A plugin-based Matrix bot system written in Python"; + homepage = "https://maubot.xyz/"; + changelog = "https://github.com/maubot/maubot/blob/v${version}/CHANGELOG.md"; + license = licenses.agpl3Plus; + # Presumably, people running "nix run nixpkgs#maubot" will want to run the tool + # for interacting with Maubot rather than Maubot itself, which should be used as + # a NixOS module. + mainProgram = "mbc"; + maintainers = with maintainers; [ chayleaf ]; + }; + }; + +in +maubot |