blob: c465c0ee5f39e9ab96567ce1699be716b7076d32 (
plain)
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
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
|
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixpkgs-unstable";
parts = {
url = "github:hercules-ci/flake-parts";
inputs.nixpkgs-lib.follows = "nixpkgs";
};
call-flake.url = "github:divnix/call-flake";
};
outputs = inputs:
inputs.parts.lib.mkFlake {inherit inputs;} {
systems = [
"x86_64-linux"
"aarch64-linux"
];
imports = [(inputs.call-flake ../.).flakeModule];
debug = true;
perSystem = {
config,
lib,
pkgs,
...
}: let
mkTestShell = runtimeInputs: text:
pkgs.mkShellNoCC {
packages = [
(pkgs.writeShellApplication {
name = "run-ci";
inherit runtimeInputs text;
})
];
};
testScript = exe: check: kill: ''
set -x
${exe}
sleep 5 # avoid race conditions
if ${check}; then
echo "Processes failed to launch! Exiting with error"
${kill}
exit 1
fi
${kill}
echo "Process finished! Exiting as success"
'';
processes = {
redis = lib.getExe' pkgs.redis "redis-server";
};
in {
procfiles = {
# overmind as default
overmind-dft = {inherit processes;};
# explicit overmind
overmind = {
inherit processes;
procRunner = pkgs.overmind;
};
# honcho
honcho = {
inherit processes;
procRunner = pkgs.honcho;
};
};
devShells = {
overmind-dft = mkTestShell [pkgs.overmind] (
testScript
"exec ${(lib.getExe config.procfiles.overmind-dft.package)} &"
"! overmind status | grep running"
"overmind kill"
);
overmind = mkTestShell [pkgs.overmind] (
testScript
"exec ${(lib.getExe config.procfiles.overmind.package)} &"
"! overmind status | grep running"
"overmind kill"
);
honcho = mkTestShell [pkgs.honcho] (
testScript
''
exec ${(lib.getExe config.procfiles.honcho.package)} & \
PROC_PID=$!
''
"! ps -p \"$PROC_PID\" > /dev/null"
"kill -2 $PROC_PID; pkill -f \"redis\""
);
};
};
};
}
|