1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
|
{ depot, pkgs, lib, ... }:
let
# Seed a tvix-store with the tvix docs, then start a VM, ask it to list all
# files in /nix/store, and ensure the store path is present, which acts as a
# nice smoketest.
mkBootTest =
{ blobServiceAddr ? "memory://"
, directoryServiceAddr ? "memory://"
, pathInfoServiceAddr ? "memory://"
# The path to import (via tvix-store import).
, importPath ? ../../docs
, importPathName ? "docs"
}:
pkgs.stdenv.mkDerivation {
name = "run-vm";
nativeBuildInputs = [
depot.tvix.store
depot.tvix.boot.runVM
];
buildCommand = ''
touch $out
# Start the tvix daemon, listening on a unix socket.
BLOB_SERVICE_ADDR=${blobServiceAddr} \
DIRECTORY_SERVICE_ADDR=${directoryServiceAddr} \
PATH_INFO_SERVICE_ADDR=${pathInfoServiceAddr} \
tvix-store daemon -l $PWD/tvix-store.socket &
# Wait for the socket to be created.
while [ ! -e $PWD/tvix-store.socket ]; do sleep 1; done
# Export env vars so that subsequent tvix-store commands will talk to
# our tvix-store daemon over the unix socket.
export BLOB_SERVICE_ADDR=grpc+unix://$PWD/tvix-store.socket
export DIRECTORY_SERVICE_ADDR=grpc+unix://$PWD/tvix-store.socket
export PATH_INFO_SERVICE_ADDR=grpc+unix://$PWD/tvix-store.socket
'' + lib.optionalString (importPath != null) ''
echo "Importing ${importPath} into tvix-store with name ${importPathName}…"
cp -R ${importPath} ${importPathName}
outpath=$(tvix-store import ${importPathName})
echo "imported to $outpath"
# Invoke a VM using tvix as the backing store, ensure the outpath appears in its listing.
CH_CMDLINE="tvix.find" run-tvix-vm 2>&1 | tee output.txt
grep $outpath output.txt
'';
requiredSystemFeatures = [ "kvm" ];
};
in
depot.nix.readTree.drvTargets {
docs-memory = (mkBootTest { });
docs-sled = (mkBootTest {
blobServiceAddr = "sled://$PWD/blobs.sled";
directoryServiceAddr = "sled://$PWD/directories.sled";
pathInfoServiceAddr = "sled://$PWD/pathinfo.sled";
});
docs-objectstore-local = (mkBootTest {
blobServiceAddr = "objectstore+file://$PWD/blobs";
});
}
|