|
15 | 15 | }), |
16 | 16 | system ? builtins.currentSystem, |
17 | 17 | }: let |
| 18 | + inherit (pkgs) lib; |
18 | 19 | nodejs = pkgs.nodejs_24; |
19 | 20 | nodePackages = nodejs.pkgs; |
20 | 21 | testing = import (pkgs.path + "/nixos/lib/testing-python.nix") {inherit system;}; |
21 | 22 | packageJSON = builtins.fromJSON (builtins.readFile ./package.json); |
22 | 23 |
|
| 24 | + pm2-prom-module' = pkgs.fetchurl { |
| 25 | + url = "https://registry.npmjs.org/pm2-prom-module/-/pm2-prom-module-2.7.2.tgz"; |
| 26 | + sha256 = "sha256-cFoYLuavuMoeZdMGWNHZggrUAHL6sUY6ANKblHrmSRE="; |
| 27 | + }; |
| 28 | + |
| 29 | + pmx = pkgs.fetchurl { |
| 30 | + url = "https://registry.npmjs.org/pmx/-/pmx-0.5.0.tgz"; |
| 31 | + sha256 = "sha256-nX/UCajkOsresfft+0pMda54cJnz54OsQ/q+6S7IbaA="; |
| 32 | + }; |
| 33 | + |
| 34 | + pm2-deps = { |
| 35 | + "@opentelemetry/api"= { version = "1.7.0"; hash = "sha256-lZqeEPocOr0FlyV9Hf29YY/GiXT6PGhigZZiVkFI9j8="; tarName = "api"; }; |
| 36 | + "@pm2/agent" = { version = "2.0.4"; hash = "sha256-hgyUnG8zu4Yf/rU/AXJEO4f55qmB5s+3RbaBeikHnsI="; tarName = "agent"; }; |
| 37 | + amp = { version = "0.3.1"; hash = "sha256-Rc1vsyFTj8yCDdvRqmPRJXytr2DVxeNCOSc+/sc+qoA="; }; |
| 38 | + amp-message = { version = "0.1.2"; hash = "sha256-hQIlUxEvta2Lxwwjx/c3RJyl+WIMUUJ631YPEWPO1l4="; }; |
| 39 | + ansi-styles = { version = "4.3.0"; hash = "sha256-LFOaRthatgMxg5l0NNLZpcos7vwStNuQIvVkeEzXmH8="; }; |
| 40 | + async = { version = "3.2.6"; hash = "sha256-a7Rc+6CM0u6jnrPObqqUETBw/hN+wL1KnxIr6aAlDm8="; }; |
| 41 | + bintrees = { version = "1.0.1"; hash = "sha256-2AbqS+fyyf3qrhLl2wHwP95BiCKoLhIt70DVsykztpY="; }; |
| 42 | + chalk = { version = "3.0.0"; hash = "sha256-HXXWjRKKVurr4la8y36qe9Lhumy+LIZp7dJjK16ocVs="; }; |
| 43 | + cli-tableau = { version = "2.0.1"; hash = "sha256-eM6GuVO4buQ+LwbTcrXGtLlJ6XI4pD8yLVBJR0q2zYc="; }; |
| 44 | + commander = { version = "2.15.1"; hash = "sha256-fdf5IQYmc11/MZXZAEcNaH4lXiFZRkFew7UY8T0qNFM="; }; |
| 45 | + dayjs = { version = "1.8.36"; hash = "sha256-3LnPubqlOkBwHLqCs9+oL5rlIw/PEZSUPakya87MtN4="; }; |
| 46 | + debug = { version = "4.4.3"; hash = "sha256-icGsnJRu6JBah1g3EUUo6X7q414DvjGQWEsiFq9D5Kc="; }; |
| 47 | + escape-string-regexp= { version = "4.0.0"; hash = "sha256-S0ShTaaYejwFhcL/FrOABCVzL/NcrXEMZectf44zsRs="; }; |
| 48 | + fclone = { version = "1.0.11"; hash = "sha256-lmsI93H/SMBfyygJGxDeJLtxc21bJ/Mc+VkLfutikYc="; }; |
| 49 | + has-flag = { version = "4.0.0"; hash = "sha256-d6frFBHZJ7uKXKcGnb4WiIbWPIj0RvC4FQCizyPdtbE="; }; |
| 50 | + json-stringify-safe = { version = "5.0.1"; hash = "sha256-t/u/ZcC/9tR/UWyYY4Ip3/DpgdDt//7Lz5cdf+Nhkoo="; }; |
| 51 | + ms = { version = "2.1.3"; hash = "sha256-9mFuFeUw7VUvnaotPOcZY5R8a8fJjJtk/T5nP9AmIsY="; }; |
| 52 | + pidusage = { version = "4.0.1"; hash = "sha256-u2jNQ3FQov7XPyVL0QNVYzhqV7vg0f1dkXMeey5J4gg="; }; |
| 53 | + pm2 = { version = "5.4.2"; hash = "sha256-tGmAfEdVK7HVIeB6sE8dTyyaAJ04L3fmVN1luGuygBQ="; }; |
| 54 | + pm2-axon = { version = "4.0.1"; hash = "sha256-7vTPYtGXn/PlYXOlyYh7WkyCImio1I4zSqP2v78s/oU="; }; |
| 55 | + pm2-axon-rpc = { version = "0.7.1"; hash = "sha256-1LhIPIGpRnyRlX7UHr0xGOY73zay5SklCgbfHpiOVV0="; }; |
| 56 | + pmx = { version = "0.5.0"; hash = "sha256-nX/UCajkOsresfft+0pMda54cJnz54OsQ/q+6S7IbaA="; }; |
| 57 | + prom-client = { version = "15.1.3"; hash = "sha256-xFxsoQsDPILfHZSRUgxs/rvTBHpLSu+xoe0LNDHCeLQ="; }; |
| 58 | + safe-buffer = { version = "5.2.1"; hash = "sha256-XRgYBFFsSmk6OEJyp70OQtF+DUswHM++QIZpzK/cs+g="; }; |
| 59 | + semver = { version = "7.6.2"; hash = "sha256-3vHmSQrAx4ELC4Ff5lQvMhPUTJWwaAWdysL4HiwiN6Q="; }; |
| 60 | + supports-color = { version = "8.1.1"; hash = "sha256-6mnZtYAeEJky+fErVJnAbeP96TYRmiHFlBsnWdQ2T7A="; }; |
| 61 | + tdigest = { version = "0.1.1"; hash = "sha256-LVfWh8Wid9PTuJJ/5OxjAixzCbeUMAlsceEHeXhimtA="; }; |
| 62 | + }; |
| 63 | + |
| 64 | + pm2-deps-tars = lib.mapAttrs (name: { version, hash ? lib.fakeHash, tarName ? name }: pkgs.fetchurl { url = "https://registry.npmjs.org/${name}/-/${tarName}-${version}.tgz"; sha256 = hash; }) pm2-deps; |
| 65 | + |
| 66 | + pm2-prom-module = pkgs.runCommand "pm2-prom-module-2.7.2.tar.gz" {} '' |
| 67 | + tar -xf ${pm2-prom-module'} |
| 68 | + mv package module |
| 69 | + mkdir module/node_modules |
| 70 | + ${lib.concatStringsSep "\n" (lib.mapAttrsToList (k: v: '' |
| 71 | + tar -xf ${v} |
| 72 | + mkdir -p $(dirname module/node_modules/${k}) |
| 73 | + mv package module/node_modules/${k} |
| 74 | + '') pm2-deps-tars)} |
| 75 | + tar -czf $out module/ |
| 76 | + ''; |
| 77 | + |
| 78 | + excludeNixFiles = path: type: let |
| 79 | + baseName = baseNameOf (toString path); |
| 80 | + in |
| 81 | + !(lib.hasSuffix ".nix" baseName); |
| 82 | + |
23 | 83 | blockfrost-backend-ryo = let |
24 | | - src = pkgs.lib.cleanSource ./.; |
| 84 | + src = lib.cleanSourceWith { filter = excludeNixFiles; src = (lib.cleanSource ./.); }; |
25 | 85 | project = |
26 | 86 | pkgs.callPackage ./yarn-project.nix |
27 | 87 | {inherit nodejs;} |
|
43 | 103 | mkdir -p $out/bin |
44 | 104 | cat <<EOF > $out/bin/${name} |
45 | 105 | #!${pkgs.runtimeShell} |
| 106 | + export PATH=${nodePackages.pm2}/bin:${pkgs.nodejs}/bin:\$PATH |
| 107 | +
|
46 | 108 | echo "Starting ${name}..."; |
47 | | - ${nodePackages.pm2}/bin/pm2 delete all; \ |
48 | | - ${nodePackages.pm2}/bin/pm2 start \ |
49 | | - $out/libexec/source/dist/server.js \ |
50 | | - --interpreter=${pkgs.nodejs}/bin/node --node-args="\''${BLOCKFROST_NODE_ARGS:-"--max-http-header-size=32768"}" \ |
| 109 | + pm2 delete all |
| 110 | + pm2 start $out/libexec/source/dist/server.js \ |
| 111 | + --interpreter=${nodejs}/bin/node --node-args="\''${BLOCKFROST_NODE_ARGS:-"--max-http-header-size=32768"}" \ |
51 | 112 | --max-memory-restart \''${BLOCKFROST_MAX_MEMORY_RESTART:-"1500M"} \ |
52 | 113 | -i \''${BLOCKFROST_PM2_INSTANCE_COUNT:-"max"} --time --no-daemon |
53 | 114 | EOF |
|
57 | 118 | dontStrip = true; |
58 | 119 | }); |
59 | 120 |
|
| 121 | + blockfrost-backend-ryo-wrapper = pkgs.writeShellApplication { |
| 122 | + name = "blockfrost-backend-ryo"; |
| 123 | + runtimeInputs = [ nodePackages.pm2 nodejs ]; |
| 124 | + text = '' |
| 125 | + set -x |
| 126 | + echo "Starting blockfrost-backend-ryo..."; |
| 127 | + pm2 delete all || true |
| 128 | + pm2 install ${pm2-prom-module} |
| 129 | + pm2 start ${blockfrost-backend-ryo}/libexec/source/dist/server.js \ |
| 130 | + --interpreter=${nodejs}/bin/node --node-args="''${BLOCKFROST_NODE_ARGS:-"--max-http-header-size=32768"}" \ |
| 131 | + --max-memory-restart "''${BLOCKFROST_MAX_MEMORY_RESTART:-"1500M"}" \ |
| 132 | + -i "''${BLOCKFROST_PM2_INSTANCE_COUNT:-"max"}" --time --no-daemon |
| 133 | + ''; |
| 134 | + }; |
| 135 | + |
60 | 136 | commonTestConfig = { |
61 | 137 | # We have to increase memsize, otherwise we will get error: |
62 | 138 | # "Kernel panic - not syncing: Out of memory: compulsory panic_on_oom" |
|
85 | 161 | ) |
86 | 162 | ''; |
87 | 163 | in { |
88 | | - inherit blockfrost-backend-ryo; |
| 164 | + inherit blockfrost-backend-ryo blockfrost-backend-ryo-wrapper; |
89 | 165 | blockfrost-backend-ryo-test-mainnet = testing.makeTest rec { |
90 | 166 | name = "blockfrost-backend-ryo-test-mainnet"; |
91 | 167 |
|
|
0 commit comments