summary refs log tree commit diff
path: root/pkgs/servers/matrix-appservice-discord/default.nix
diff options
context:
space:
mode:
Diffstat (limited to 'pkgs/servers/matrix-appservice-discord/default.nix')
-rw-r--r--pkgs/servers/matrix-appservice-discord/default.nix80
1 files changed, 66 insertions, 14 deletions
diff --git a/pkgs/servers/matrix-appservice-discord/default.nix b/pkgs/servers/matrix-appservice-discord/default.nix
index beb3ad70c79..7b7a67821f9 100644
--- a/pkgs/servers/matrix-appservice-discord/default.nix
+++ b/pkgs/servers/matrix-appservice-discord/default.nix
@@ -1,29 +1,81 @@
-{ pkgs, nodejs, stdenv }:
+{ lib, mkYarnPackage, fetchFromGitHub, runCommand, makeWrapper, python, nodejs }:
+
+assert lib.versionAtLeast nodejs.version "12.0.0";
 
 let
-  nodePackages = import ./node-composition.nix {
-    inherit pkgs nodejs;
-    inherit (stdenv.hostPlatform) system;
+  nodeSources = runCommand "node-sources" {} ''
+    tar --no-same-owner --no-same-permissions -xf "${nodejs.src}"
+    mv node-* $out
+  '';
+
+in mkYarnPackage rec {
+  pname = "matrix-appservice-discord";
+
+  # when updating, run `./generate.sh <git release tag>`
+  version = "1.0.0";
+
+  src = fetchFromGitHub {
+    owner = "Half-Shot";
+    repo = "matrix-appservice-discord";
+    rev = "v${version}";
+    sha256 = "0pca4jxxl4b8irvb1bacsrzjg8m7frq9dnx1knnd2n6ia3f3x545";
   };
 
-in nodePackages."matrix-appservice-discord-git+https://github.com/Half-Shot/matrix-appservice-discord.git#v0.5.2".override {
-  nativeBuildInputs = [ pkgs.makeWrapper ];
+  packageJSON = ./package.json;
+  yarnNix = ./yarn-dependencies.nix;
+
+  pkgConfig = {
+    better-sqlite3 = {
+      buildInputs = [ python ];
+      postInstall = ''
+        # build native sqlite bindings
+        npm run build-release --offline --nodedir="${nodeSources}"
+     '';
+    };
+  };
+
+  nativeBuildInputs = [ makeWrapper ];
+
+  buildPhase = ''
+    # compile TypeScript sources
+    yarn --offline build
+  '';
+
+  doCheck = true;
+  checkPhase = ''
+    # the default 2000ms timeout is sometimes too short on our busy builders
+    yarn --offline test --timeout 10000
+  '';
 
   postInstall = ''
-    # compile Typescript sources
-    npm run build
+    OUT_JS_DIR="$out/${passthru.nodeAppDir}/build"
 
     # server wrapper
-    makeWrapper '${nodejs}/bin/node' "$out/bin/matrix-appservice-discord" \
-      --add-flags "$out/lib/node_modules/matrix-appservice-discord/build/src/discordas.js"
+    makeWrapper '${nodejs}/bin/node' "$out/bin/${pname}" \
+      --add-flags "$OUT_JS_DIR/src/discordas.js"
 
     # admin tools wrappers
-    for toolPath in $out/lib/node_modules/matrix-appservice-discord/build/tools/*; do
-      makeWrapper '${nodejs}/bin/node' "$out/bin/matrix-appservice-discord-$(basename $toolPath .js)" \
+    for toolPath in $OUT_JS_DIR/tools/*; do
+      makeWrapper '${nodejs}/bin/node' "$out/bin/${pname}-$(basename $toolPath .js)" \
         --add-flags "$toolPath"
     done
   '';
 
-  # other metadata generated and inherited from ./node-package.nix
-  meta.maintainers = with stdenv.lib.maintainers; [ pacien ];
+  # don't generate the dist tarball
+  # (`doDist = false` does not work in mkYarnPackage)
+  distPhase = ''
+    true
+  '';
+
+  passthru = {
+    nodeAppDir = "libexec/${pname}/deps/${pname}";
+  };
+
+  meta = {
+    description = "A bridge between Matrix and Discord";
+    homepage = "https://github.com/Half-Shot/matrix-appservice-discord";
+    license = lib.licenses.asl20;
+    maintainers = with lib.maintainers; [ pacien ];
+    platforms = lib.platforms.linux;
+  };
 }