frigate.web: fix build on Node 22.12, add missing meta (#375967)
[NixPkgs.git] / pkgs / servers / matrix-appservice-discord / default.nix
blobdcd43ba0d8529b7ed109ee6c854d3335e5d296f4
2   lib,
3   mkYarnPackage,
4   fetchYarnDeps,
5   fetchFromGitHub,
6   srcOnly,
7   makeWrapper,
8   removeReferencesTo,
9   python3,
10   nodejs,
11   matrix-sdk-crypto-nodejs,
14 let
15   pin = lib.importJSON ./pin.json;
16   nodeSources = srcOnly nodejs;
19 mkYarnPackage rec {
20   pname = "matrix-appservice-discord";
21   inherit (pin) version;
23   src = fetchFromGitHub {
24     owner = "matrix-org";
25     repo = "matrix-appservice-discord";
26     rev = "v${version}";
27     hash = pin.srcHash;
28   };
30   packageJSON = ./package.json;
31   offlineCache = fetchYarnDeps {
32     yarnLock = "${src}/yarn.lock";
33     sha256 = pin.yarnSha256;
34   };
36   pkgConfig = {
37     "@matrix-org/matrix-sdk-crypto-nodejs" = {
38       postInstall = ''
39         # replace with the built package
40         cd ..
41         rm -r matrix-sdk-crypto-nodejs
42         ln -s ${matrix-sdk-crypto-nodejs}/lib/node_modules/@matrix-org/* ./
43       '';
44     };
46     better-sqlite3 = {
47       nativeBuildInputs = [ python3 ];
48       postInstall = ''
49         # build native sqlite bindings
50         npm run build-release --offline --nodedir="${nodeSources}"
51         find build -type f -exec \
52           ${removeReferencesTo}/bin/remove-references-to \
53           -t "${nodeSources}" {} \;
54       '';
55     };
56   };
58   nativeBuildInputs = [ makeWrapper ];
60   buildPhase = ''
61     runHook preBuild
63     # compile TypeScript sources
64     yarn --offline build
66     runHook postBuild
67   '';
69   doCheck = true;
70   checkPhase = ''
71     runHook preCheck
73     # the default 2000ms timeout is sometimes too short on our busy builders
74     yarn --offline test --timeout 10000
76     runHook postCheck
77   '';
79   postInstall = ''
80     OUT_JS_DIR="$out/${passthru.nodeAppDir}/build"
82     # server wrapper
83     makeWrapper '${nodejs}/bin/node' "$out/bin/${pname}" \
84       --add-flags "$OUT_JS_DIR/src/discordas.js"
86     # admin tools wrappers
87     for toolPath in $OUT_JS_DIR/tools/*; do
88       makeWrapper '${nodejs}/bin/node' \
89         "$out/bin/${pname}-$(basename $toolPath .js)" \
90         --add-flags "$toolPath"
91     done
92   '';
94   # don't generate the dist tarball
95   doDist = false;
97   passthru = {
98     nodeAppDir = "libexec/${pname}/deps/${pname}";
99     updateScript = ./update.sh;
100   };
102   meta = {
103     description = "Bridge between Matrix and Discord";
104     homepage = "https://github.com/Half-Shot/matrix-appservice-discord";
105     license = lib.licenses.asl20;
106     maintainers = with lib.maintainers; [ euxane ];
107     platforms = lib.platforms.linux;
108     mainProgram = "matrix-appservice-discord";
109   };