ALPHA: wire is a tool to deploy nixos systems wire.althaea.zone/
at rollback-hacking 171 lines 5.1 kB view raw
1# SPDX-License-Identifier: AGPL-3.0-or-later 2# Copyright 2024-2025 wire Contributors 3 4{ 5 lib, 6 inputs, 7 ... 8}: 9let 10 inherit (lib) 11 mapAttrsToList 12 flatten 13 ; 14in 15{ 16 config.perSystem = 17 { 18 pkgs, 19 self', 20 system, 21 ... 22 }: 23 let 24 benchDirFileset = lib.fileset.toSource { 25 root = ../..; 26 fileset = lib.fileset.union ./. ( 27 lib.fileset.fileFilter ( 28 file: (file.hasExt "nix") || (file.hasExt "txt") || (file.hasExt "lock") 29 ) ../. 30 ); 31 }; 32 33 nodes = 34 builtins.listToAttrs ( 35 builtins.map (index: { 36 value = { 37 imports = [ 38 ./vm.nix 39 ]; 40 41 _module.args = { 42 index = builtins.toString index; 43 }; 44 }; 45 name = "node_${builtins.toString index}"; 46 }) (lib.range 0 (import ./num-nodes.nix)) 47 ) 48 // { 49 deployer = { 50 imports = [ 51 ./vm.nix 52 ]; 53 54 environment.systemPackages = [ 55 pkgs.git 56 57 (pkgs.writeShellScriptBin "setup-benchmark" '' 58 mkdir -p $HOME/wire 59 cp -r ${benchDirFileset}/*-source/* $HOME/wire 60 61 cp -r $HOME/wire/bench/wire-flake $HOME/wire-flake 62 cp -r $HOME/wire/bench/colmena-flake $HOME/colmena-flake 63 64 chmod -R +w $HOME/* 65 66 cd $HOME/wire 67 git init . 68 git add -A 69 '') 70 71 (pkgs.writeShellScriptBin "run-benchmark" '' 72 bench_dir=$HOME/wire/bench 73 74 wire_args="apply test --path $bench_dir/wire -vv --ssh-accept-host -p 10" 75 wire_args_flake="apply test --path $HOME/wire-flake -vv --ssh-accept-host -p 10" 76 77 colmena_args="apply test --config $bench_dir/colmena/hive.nix -v -p 10" 78 colmena_args_flake="apply test --config $HOME/colmena-flake/flake.nix -v -p 10" 79 80 ${lib.getExe pkgs.hyperfine} --warmup 1 --show-output --runs 5 \ 81 --export-markdown stats.md \ 82 --export-json run.json \ 83 "${lib.getExe self'.packages.wire-small} $wire_args_flake" -n "wire@HEAD - flake" \ 84 "${lib.getExe' inputs.colmena_benchmarking.packages.x86_64-linux.colmena "colmena"} $colmena_args_flake" \ 85 -n "colmena@pinned - flake" \ 86 "${lib.getExe self'.packages.wire-small} $wire_args" -n "wire@HEAD - hive.nix" 87 '') 88 ]; 89 90 _module.args = { 91 index = "deployer"; 92 }; 93 }; 94 }; 95 96 evalConfig = import (pkgs.path + "/nixos/lib/eval-config.nix"); 97 98 evalVM = 99 module: 100 evalConfig { 101 inherit system; 102 modules = [ module ]; 103 }; 104 in 105 { 106 checks.bench = pkgs.testers.runNixOSTest { 107 inherit nodes; 108 109 name = "benchmark"; 110 111 defaults = 112 { 113 ... 114 }: 115 let 116 # hive = builtins.scopedImport { 117 # __nixPath = _b: null; 118 # __findFile = _path: name: if name == "nixpkgs" then pkgs.path else throw "oops!!"; 119 # } "${injectedFlakeDir}/${path}/hive.nix"; 120 121 # fetch **all** dependencies of a flake 122 # it's called fetchLayer because my naming skills are awful 123 fetchLayer = 124 input: 125 let 126 subLayers = if input ? inputs then map fetchLayer (builtins.attrValues input.inputs) else [ ]; 127 in 128 [ 129 input.outPath 130 ] 131 ++ subLayers; 132 in 133 { 134 virtualisation.additionalPaths = flatten [ 135 (mapAttrsToList (_: val: (evalVM val).config.system.build.toplevel.drvPath) nodes) 136 (mapAttrsToList (_: fetchLayer) inputs) 137 ]; 138 139 nix.settings.experimental-features = [ 140 "nix-command" 141 "flakes" 142 ]; 143 }; 144 node.specialArgs = { 145 snakeOil = import "${pkgs.path}/nixos/tests/ssh-keys.nix" pkgs; 146 inherit (self'.packages) wire-small-dev; 147 }; 148 skipTypeCheck = true; 149 testScript = '' 150 start_all() 151 152 for i in range(0,${builtins.toString (import ./num-nodes.nix)}): 153 machine = globals().get(f"node_{i}") 154 machine.wait_for_unit("sshd.service") # type: ignore 155 156 node_deployer.succeed("setup-benchmark"); 157 node_deployer.succeed("run-benchmark"); 158 159 node_deployer.copy_from_vm("run.json") 160 node_deployer.copy_from_vm("stats.json") 161 ''; 162 }; 163 }; 164} 165 166# "${ 167# lib.getExe (builtins.getFlake "github:mrshmllow/wire/stable").packages.${system}.wire-small 168# } $wire_args" -n "wire@stable - hive.nix" \ 169# "${ 170# lib.getExe (builtins.getFlake "github:mrshmllow/wire/stable").packages.${system}.wire-small 171# } $wire_args_flake" -n "wire@stable - flake" \