diff options
Diffstat (limited to 'back/default.nix')
-rw-r--r-- | back/default.nix | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/back/default.nix b/back/default.nix new file mode 100644 index 0000000..525253e --- /dev/null +++ b/back/default.nix @@ -0,0 +1,79 @@ +{ stdenv +, autoPatchelfHook +, fetchFromGitHub +, fetchzip +, makeWrapper +, nodejs-14_x +, workadventure +, yarn2nix-moretea +, lib +, getconf +, ... }: + +let + node-abi = "83"; + + node-grpc-precompiled = fetchzip { + name = "node-grpc-precompiled-node-${node-abi}"; + url = "https://node-precompiled-binaries.grpc.io/grpc/v1.24.4/node-v${node-abi}-linux-x64-glibc.tar.gz"; + sha256 = "119rhhk1jpi2vwyim7byq3agacasc4q25c26wyzfmy8vk2ih6ndj"; + }; + + node-grpc-patched = stdenv.mkDerivation { + name = "node-grpc"; + buildInputs = [ stdenv.cc.cc ]; + nativeBuildInputs = [ autoPatchelfHook ]; + dontUnpack = true; + # spams console + dontStrip = true; + installPhase = '' + install -D -m755 ${node-grpc-precompiled}/grpc_node.node $out/bin/grpc_node.node + ''; + }; + +in +yarn2nix-moretea.mkYarnPackage rec { + pname = "workadventureback"; + version = "unstable"; + + src = fetchFromGitHub + { + owner = "thecodingmachine"; + repo = "workadventure"; + rev = "6e9c71598004dc9cbab9418efb3c0ac892da7ca2"; + sha256 = "0rvra0dy631al4aylacyqldkyd6biawz2shsikgcy30nv5lzc78c"; + } + "/back"; + + # NOTE: this is optional and generated dynamically if omitted + yarnNix = ./yarn.nix; + + nativeBuildInputs = [ makeWrapper ]; + + pkgConfig = { + grpc = { + postInstall = '' + install -D -m755 ${node-grpc-patched}/bin/grpc_node.node src/node/extension_binary/node-v${node-abi}-linux-x64-glibc/grpc_node.node + ''; + }; + }; + + dontStrip = true; + + buildPhase = '' + mkdir -p $out + ln -s ${workadventure.messages.outPath}/generated deps/${pname}/src/Messages/generated + HOME=$TMPDIR yarn --offline run tsc + cp -r deps/${pname}/dist $out/dist + rm -rf deps/${pname}/{src,node_modules} + ''; + + postInstall = '' + # node-abi needs to the abi of the node here + # getconf is required for detect-libc (used by node-pre-gyp) to properly + # detect current libc + makeWrapper '${nodejs-14_x}/bin/node' "$out/bin/${pname}" \ + --set NODE_PATH $out/libexec/${pname}/node_modules \ + --prefix PATH : ${lib.makeBinPath [ getconf ]} \ + --add-flags "$out/dist/server.js" + ''; +} |