From 3273a5bb1f4d6b809efda273589be8100dba3301 Mon Sep 17 00:00:00 2001 From: h7x4 Date: Tue, 25 Nov 2025 13:44:27 +0900 Subject: [PATCH] WIP: flake.nix: create debian vm test --- .gitignore | 1 + flake.lock | 21 ++++++++++++++ flake.nix | 9 +++++- nix/debian-vm-configuration.nix | 49 +++++++++++++++++++++++++++++++++ 4 files changed, 79 insertions(+), 1 deletion(-) create mode 100644 nix/debian-vm-configuration.nix diff --git a/.gitignore b/.gitignore index 6e2f21a..120e60b 100644 --- a/.gitignore +++ b/.gitignore @@ -9,6 +9,7 @@ result-* # Nix VM *.qcow2 +.nixos-test-history # Packaging !/assets/debian/config.toml diff --git a/flake.lock b/flake.lock index 9cc0d4f..faa8e93 100644 --- a/flake.lock +++ b/flake.lock @@ -15,6 +15,26 @@ "type": "github" } }, + "nix-vm-test": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1763976673, + "narHash": "sha256-QPeI8WR+brwodiy4YNfOnLI7rOHJfFPrGm+xT/HmtT4=", + "owner": "numtide", + "repo": "nix-vm-test", + "rev": "8611bdd7a49750a880be9ee2ea9f68c53f8c9299", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "nix-vm-test", + "type": "github" + } + }, "nixpkgs": { "locked": { "lastModified": 1764667669, @@ -34,6 +54,7 @@ "root": { "inputs": { "crane": "crane", + "nix-vm-test": "nix-vm-test", "nixpkgs": "nixpkgs", "rust-overlay": "rust-overlay" } diff --git a/flake.nix b/flake.nix index 5d04334..2194540 100644 --- a/flake.nix +++ b/flake.nix @@ -6,9 +6,12 @@ rust-overlay.inputs.nixpkgs.follows = "nixpkgs"; crane.url = "github:ipetkov/crane"; + + nix-vm-test.url = "github:numtide/nix-vm-test"; + nix-vm-test.inputs.nixpkgs.follows = "nixpkgs"; }; - outputs = { self, nixpkgs, rust-overlay, crane }: + outputs = { self, nixpkgs, rust-overlay, crane, nix-vm-test }: let inherit (nixpkgs) lib; @@ -93,6 +96,8 @@ muscl = import ./nix/module.nix; }; + # vmlib = forAllSystems(system: _: _: nix-vm-test.lib.${system}); + packages = forAllSystems (system: pkgs: _: let cargoToml = builtins.fromTOML (builtins.readFile ./Cargo.toml); @@ -128,6 +133,8 @@ filteredSource = pkgs.runCommandLocal "filtered-source" { } '' ln -s ${src} $out ''; + + debianVm = import ./nix/debian-vm-configuration.nix { inherit nix-vm-test nixpkgs system pkgs; }; }); checks = forAllSystems (system: pkgs: _: { diff --git a/nix/debian-vm-configuration.nix b/nix/debian-vm-configuration.nix new file mode 100644 index 0000000..87ea2c6 --- /dev/null +++ b/nix/debian-vm-configuration.nix @@ -0,0 +1,49 @@ +{ nix-vm-test, nixpkgs, system, pkgs, ... }: +let + image = nix-vm-test.lib.${system}.debian.images."13"; + + generic = import "${nix-vm-test}/generic" { inherit pkgs nixpkgs; inherit (pkgs) lib; }; + + makeVmTestForImage = + image: + { + testScript, + sharedDirs ? {}, + diskSize ? null, + config ? { } + }: + generic.makeVmTest { + inherit + system + testScript + sharedDirs; + image = nix-vm-test.lib.${system}.debian.prepareDebianImage { + inherit diskSize; + hostPkgs = pkgs; + originalImage = image; + }; + machineConfigModule = config; + }; + + vmTest = makeVmTestForImage image { + diskSize = "10G"; + sharedDirs = { + debDir = { + source = "${./.}"; + target = "/mnt"; + }; + }; + testScript = '' + vm.wait_for_unit("multi-user.target") + vm.succeed("apt-get update && apt-get -y install mariadb-server build-essential curl") + vm.succeed("curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y") + vm.succeed("source /root/.cargo/env && cargo install cargo-deb") + vm.succeed("cp -r /mnt /root/src && chmod -R +w /root/src") + vm.succeed("source /root/.cargo/env && cd /root/src && ./create-deb.sh") + ''; + config.nodes.vm = { + virtualisation.memorySize = 8192; + virtualisation.cpus = 4; + }; + }; +in vmTest.driverInteractive