|
| 1 | +{ |
| 2 | + description = "Six Degrees of Wikipedia"; |
| 3 | + |
| 4 | + inputs = { |
| 5 | + nixpkgs.url = "github:nixos/nixpkgs?ref=nixos-unstable"; |
| 6 | + }; |
| 7 | + |
| 8 | + outputs = { self, nixpkgs }: let |
| 9 | + pkgs = import nixpkgs {system = "x86_64-linux";}; |
| 10 | + python-gunicorn = pkgs.python3.withPackages (pp: with pp;[ |
| 11 | + flask |
| 12 | + flask-compress |
| 13 | + flask-cors |
| 14 | + gunicorn |
| 15 | + protobuf |
| 16 | + requests |
| 17 | + ]); |
| 18 | + sdow-api-gunicorn = pkgs.writeShellApplication { |
| 19 | + name = "sdow-api"; |
| 20 | + runtimeInputs = [ python-gunicorn ]; |
| 21 | + text = '' |
| 22 | + cd "${self.packages.x86_64-linux.sdow-api}" |
| 23 | + if [ ! -f "$1" ] |
| 24 | + then echo "First argument should be a path to the sdow database"; exit 1 |
| 25 | + fi |
| 26 | + if [ -z "$2" ] |
| 27 | + then echo "Second argument should be a path to the searches database"; exit 1 |
| 28 | + fi |
| 29 | + GUNICORN_PORT=''${GUNICORN_PORT:-8000} |
| 30 | +
|
| 31 | + export SDOW_DATABASE=$1 |
| 32 | + export SEARCHES_DATABASE=$2 |
| 33 | + gunicorn -b "0.0.0.0:$GUNICORN_PORT" server:app |
| 34 | + ''; |
| 35 | + }; |
| 36 | + python-db = pkgs.python3.withPackages (pp: with pp;[ |
| 37 | + tqdm |
| 38 | + ]); |
| 39 | + sdow-db-folder = pkgs.runCommand "sdow-db-source" {} '' |
| 40 | + mkdir -p $out |
| 41 | + cp -r ${./scripts} $out/scripts |
| 42 | + cp -r ${./sql} $out/sql |
| 43 | + ''; |
| 44 | + sdow-db = pkgs.writeShellApplication { |
| 45 | + name = "sdow-db"; |
| 46 | + runtimeInputs = [ |
| 47 | + python-db |
| 48 | + pkgs.sqlite |
| 49 | + pkgs.pv |
| 50 | + pkgs.gnugrep |
| 51 | + pkgs.wget |
| 52 | + pkgs.coreutils-full |
| 53 | + pkgs.gzip |
| 54 | + pkgs.gnused |
| 55 | + pkgs.gawkInteractive |
| 56 | + pkgs.pigz |
| 57 | + ]; |
| 58 | + text = '' |
| 59 | + ${pkgs.bash}/bin/bash ${sdow-db-folder}/scripts/buildDatabase.sh "$@" |
| 60 | + ''; |
| 61 | + }; |
| 62 | + in { |
| 63 | + |
| 64 | + packages.x86_64-linux = { |
| 65 | + default = self.packages.x86_64-linux.sdow; |
| 66 | + sdow = pkgs.buildNpmPackage { |
| 67 | + name = "sdow"; |
| 68 | + buildInputs = with pkgs; [ |
| 69 | + nodejs_latest |
| 70 | + ]; |
| 71 | + src = ./website; |
| 72 | + |
| 73 | + npmDeps = pkgs.importNpmLock { |
| 74 | + npmRoot = ./website; |
| 75 | + }; |
| 76 | + |
| 77 | + npmFlags = [ "--legacy-peer-deps" ]; |
| 78 | + |
| 79 | + npmConfigHook = pkgs.importNpmLock.npmConfigHook; |
| 80 | + |
| 81 | + installPhase = '' |
| 82 | + cp -r build/ $out |
| 83 | + ''; |
| 84 | + }; |
| 85 | + |
| 86 | + sdow-api = pkgs.stdenv.mkDerivation { |
| 87 | + name = "sdow-api"; |
| 88 | + src = ./sdow; |
| 89 | + buildInputs = [ python-gunicorn ]; |
| 90 | + installPhase = '' |
| 91 | + cp -r . $out |
| 92 | + ''; |
| 93 | + }; |
| 94 | + sdow-db = sdow-db; |
| 95 | + }; |
| 96 | + apps.x86_64-linux = { |
| 97 | + default = self.apps.x86_64-linux.sdow-api; |
| 98 | + sdow-api = { |
| 99 | + type = "app"; |
| 100 | + program = "${sdow-api-gunicorn}/bin/sdow-api"; |
| 101 | + }; |
| 102 | + sdow-db = { |
| 103 | + type = "app"; |
| 104 | + program = "${sdow-db}/bin/sdow-db"; |
| 105 | + }; |
| 106 | + }; |
| 107 | + }; |
| 108 | +} |
0 commit comments