-
Notifications
You must be signed in to change notification settings - Fork 53
Expand file tree
/
Copy pathflake.nix
More file actions
161 lines (153 loc) · 5.06 KB
/
flake.nix
File metadata and controls
161 lines (153 loc) · 5.06 KB
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
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
{
inputs = {
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
flake-utils.url = "github:numtide/flake-utils";
zig-overlay.url = "github:mitchellh/zig-overlay";
zig-overlay.inputs = {
nixpkgs.follows = "nixpkgs";
flake-utils.follows = "flake-utils";
};
# Pin to ZLS 0.15.1 release tag for Zig 0.15.x compatibility
zls-flake.url = "github:zigtools/zls";
zls-flake.inputs = {
nixpkgs.follows = "nixpkgs";
zig-overlay.follows = "zig-overlay";
};
};
outputs = { self, nixpkgs, flake-utils, zig-overlay, zls-flake }:
flake-utils.lib.eachDefaultSystem (system:
let
zigVersion = "master";
pkgs = nixpkgs.legacyPackages.${system};
zig = zig-overlay.packages.${system}.${zigVersion};
# ZLS from the pinned 0.15.1 release
zls = zls-flake.packages.${system}.zls;
testSetup = pkgs.writeShellScriptBin "test-setup" ''
JETZIG_TEST_DIR="$TMPDIR/jetzig-env"
POSTGRES_DIR="$JETZIG_TEST_DIR/postgres-db"
VALKEY_DIR="$JETZIG_TEST_DIR/valkey-db"
mkdir -p "$POSTGRES_DIR"
mkdir -p "$VALKEY_DIR"
gum spin --spinner dot --title "Setting up postgres" -- initdb \
-D "$POSTGRES_DIR" \
--auth-local=trust \
--auth-host=trust \
--username=postgres
echo "port = 5432" >> "$POSTGRES_DIR/postgresql.conf"
echo "unix_socket_directories = '$JETZIG_TEST_DIR'" >> "$POSTGRES_DIR/postgresql.conf"
pg_ctl \
-D "$POSTGRES_DIR" \
-l "$POSTGRES_DIR/logfile" \
start
gum log --time=TimeOnly --prefix=JETZIG-ENV "Postgres started"
cat > "$VALKEY_DIR/valkey.conf" << EOF
port 6379
dir $VALKEY_DIR
dbfilename dump.rdb
logfile $VALKEY_DIR/valkey.log
daemonize yes
pidfile $VALKEY_DIR/valkey.pid
save 900 1
save 300 10
save 60 10000
stop-writes-on-bgsave-error no
EOF
valkey-server "$VALKEY_DIR/valkey.conf"
gum log --time=TimeOnly --prefix=JETZIG-ENV "Valkey started"
'';
testTeardown = pkgs.writeShellScriptBin "test-teardown" ''
JETZIG_TEST_DIR="$TMPDIR/jetzig-env"
POSTGRES_DIR="$JETZIG_TEST_DIR/postgres-db"
VALKEY_DIR="$JETZIG_TEST_DIR/valkey-db"
if pg_ctl -D "$POSTGRES_DIR" status > /dev/null 2>&1; then
pg_ctl -D "$POSTGRES_DIR" stop
fi
if [ -d "$POSTGRES_DIR" ]; then
rm -rf "$POSTGRES_DIR"
fi
if [ -f "$VALKEY_DIR/valkey.pid" ]; then
kill "$(cat "$VALKEY_DIR/valkey.pid")"
fi
if [ -d "$VALKEY_DIR" ]; then
rm -rf "$VALKEY_DIR"
fi
'';
dependencies = [
zig
pkgs.openssl
];
in {
packages.default = pkgs.stdenv.mkDerivation {
pname = "jetzig";
version = zigVersion;
src = pkgs.lib.fileset.toSource {
root = ./.;
fileset = pkgs.lib.fileset.unions [
./src
./build.zig
./build.zig.zon
];
};
nativeBuildInputs = [
pkgs.makeWrapper
];
buildInputs = dependencies;
dontInstall = false;
configurePhase = ''
runHook preConfigure
export ZIG_GLOBAL_CACHE_DIR=$TEMP/.cache
export ZIG_LOCAL_CACHE_DIR=$TEMP/.local-cache
export PACKAGE_DIR=${pkgs.callPackage ./cli/deps.nix {}}
mkdir -p "$ZIG_GLOBAL_CACHE_DIR" "$ZIG_LOCAL_CACHE_DIR"
runHook postConfigure
'';
buildPhase = ''
runHook preBuild
cd cli
zig build install \
--system $PACKAGE_DIR \
--prefix $out \
-Doptimize=ReleaseSafe \
--cache-dir $ZIG_LOCAL_CACHE_DIR \
--global-cache-dir $ZIG_GLOBAL_CACHE_DIR
runHook postBuild
'';
postFixup = ''
for bin in $out/bin/*; do
wrapProgram $bin \
--prefix PATH : ${pkgs.lib.makeBinPath dependencies} \
--prefix LD_LIBRARY_PATH : ${pkgs.lib.makeLibraryPath dependencies}
done
'';
};
devShells.default = pkgs.mkShell {
name = "zig-${zigVersion}";
buildInputs = [
zig
zls
pkgs.gum
pkgs.zon2nix
pkgs.valkey
pkgs.postgresql
pkgs.openssl
pkgs.pkg-config
testSetup
testTeardown
];
shellHook = ''
JETZIG_TEST_DIR="$TMPDIR/jetzig-env"
mkdir -p "$JETZIG_TEST_DIR"
gum format -- \
"# JETZIG DEV ENV" \
"Commands:" \
"- test-setup: Starts postgres and valkey for jetzig tests" \
"- test-teardown: Stops postgres and valkey and cleans up created dirs"
cleanup_jetzig_test() {
test-teardown
rm -rf "$TMPDIR/jetzig-env"
}
trap cleanup_jetzig_test EXIT
'';
};
});
}