{ pkgs, artiqpkgs, testCommand, testTimeout ? 600 }: let condaEnv = "artiq-env"; tcpPorts = [ 1380 1381 1382 1383 ]; forwardedPorts = map (port: { listenAddr = "192.168.1.50"; targetAddr = "192.168.1.50"; inherit port; }) tcpPorts; wfvm = import ../wfvm.nix { inherit pkgs; }; conda-deps = { name = "conda-deps"; script = let artiq6 = pkgs.lib.strings.versionAtLeast artiqpkgs.artiq.version "6.0"; qt-asyncio-package = if artiq6 then artiqpkgs.conda-qasync else artiqpkgs.conda-quamash; conda-deps-noarch = import (if artiq6 then ./conda_noarch_packages.nix else ./conda_noarch_packages-legacy.nix) { inherit pkgs; }; conda-deps-win-64 = import (if artiq6 then ./conda_win-64_packages.nix else ./conda_win-64_packages-legacy.nix) { inherit pkgs; }; conda-packages-put = pkgs.lib.strings.concatStringsSep "\n" ( (map (package: ''win-put ${package} 'fake-channel/noarch' '') conda-deps-noarch) ++ (map (package: ''win-put ${package} 'fake-channel/win-64' '') conda-deps-win-64) ); in '' win-exec 'mkdir fake-channel && mkdir fake-channel\noarch && mkdir fake-channel\win-64' ${conda-packages-put} win-put ${artiqpkgs.conda-windows-binutils-or1k}/win-64/*.tar.bz2 'fake-channel/win-64' win-put ${artiqpkgs.conda-windows-llvm-or1k}/win-64/*.tar.bz2 'fake-channel/win-64' win-put ${artiqpkgs.conda-windows-llvmlite-artiq}/win-64/*.tar.bz2 'fake-channel/win-64' win-put ${artiqpkgs.conda-pythonparser}/noarch/*.tar.bz2 'fake-channel/noarch' win-put ${artiqpkgs.conda-sipyco}/noarch/*.tar.bz2 'fake-channel/noarch' win-put ${qt-asyncio-package}/noarch/*.tar.bz2 'fake-channel/noarch' ''; }; in wfvm.utils.wfvm-run { name = "windows-tests"; image = wfvm.makeWindowsImage { installCommands = [ wfvm.layers.anaconda3 conda-deps ]; }; inherit forwardedPorts; script = '' ${wfvm.utils.win-put}/bin/win-put ${artiqpkgs.conda-artiq}/noarch/*.tar.bz2 'fake-channel/noarch' ${wfvm.utils.win-exec}/bin/win-exec ".\Anaconda3\scripts\activate && conda index fake-channel" ${wfvm.utils.win-exec}/bin/win-exec ".\Anaconda3\scripts\activate && conda create -n ${condaEnv} --offline" ${wfvm.utils.win-exec}/bin/win-exec ".\Anaconda3\scripts\activate ${condaEnv} && conda install -y -c file:///C:/users/wfvm/fake-channel --offline artiq"\ # Schedule a timed shutdown against hanging test runs ${wfvm.utils.win-exec}/bin/win-exec "shutdown -s -t ${toString testTimeout}" ${wfvm.utils.win-exec}/bin/win-exec ".\Anaconda3\scripts\activate ${condaEnv} && ${testCommand}" # Abort timeouted shutdown ${wfvm.utils.win-exec}/bin/win-exec "shutdown -a" ''; }