{ nixos ? ./.. , nixpkgs ? ../../nixpkgs , services ? ../../nixos/services , system ? builtins.currentSystem }: let pkgs = import nixpkgs { config = {}; inherit system; }; in with pkgs; rec { inherit pkgs; # Build a virtual network from an attribute set `{ machine1 = # config1; ... machineN = configN; }', where `machineX' is the # hostname and `configX' is a NixOS system configuration. The # result is a script that starts a QEMU instance for each virtual # machine. Each machine is given an arbitrary IP address in the # virtual network. buildVirtualNetwork = { nodes }: let nodes_ = lib.mapAttrs (n: buildVM nodes_) (assignIPAddresses nodes); in stdenv.mkDerivation { name = "vms"; buildCommand = '' ensureDir $out/vms ${ lib.concatMapStrings (vm: '' ln -sn ${vm.config.system.build.vm} $out/vms/${vm.config.networking.hostName} '' ) (lib.attrValues nodes_) } ensureDir $out/bin cat > $out/bin/run-vms <> $out/nix-support/hydra-build-products done ''; # */ }; # Generate a coverage report from the coverage data produced by # runTests. makeReport = x: runCommand "report" { buildInputs = [rsync]; } '' for d in ${x}/coverage-data/*; do echo "doing $d" ensureDir $TMPDIR/gcov/ for i in $(cd $d/nix/store && ls); do if ! test -e $TMPDIR/gcov/nix/store/$i; then echo "copying $i" mkdir -p $TMPDIR/gcov/$(echo $i | cut -c34-) rsync -rv /nix/store/$i/.build/* $TMPDIR/gcov/ fi done chmod -R u+w $TMPDIR/gcov find $TMPDIR/gcov -name "*.gcda" -exec rm {} \; for i in $(cd $d/nix/store && ls); do rsync -rv $d/nix/store/$i/.build/* $TMPDIR/gcov/ done find $TMPDIR/gcov -name "*.gcda" -exec chmod 644 {} \; echo "producing info..." ${pkgs.lcov}/bin/geninfo --ignore-errors source,gcov $TMPDIR/gcov --output-file $TMPDIR/app.info cat $TMPDIR/app.info >> $TMPDIR/full.info done echo "making report..." ensureDir $out/coverage ${pkgs.lcov}/bin/genhtml --show-details $TMPDIR/full.info -o $out/coverage cp $TMPDIR/full.info $out/coverage/ ensureDir $out/nix-support echo "report coverage $out/coverage" >> $out/nix-support/hydra-build-products ''; # */ }