-
Notifications
You must be signed in to change notification settings - Fork 0
/
flake.nix
153 lines (129 loc) · 4.63 KB
/
flake.nix
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
{
description = "email logging service for ServeUp";
inputs = {
nixpkgs.url = "github:nixos/nixpkgs/nixos-22.05";
utils.url = "github:numtide/flake-utils";
};
outputs = { self, nixpkgs, utils }: utils.lib.eachDefaultSystem (system:
let
version = "0.1.0";
pkgs = import nixpkgs { inherit system; };
#olderpkgs = import oldnixpkgs { inherit system; };
# TODO
# An older package repo is used to pull version 6.2.0 of QEMU
# This version of QEMU is required for Podmand to work correctly
# on MacOS Monterey
#olderPkgs = import (builtins.fetchGit {
# name = "revision_for_qemu6.2.0";
# url = "https://github.com/NixOS/nixpkgs/";
# ref = "refs/heads/nixos-unstable";
# rev = "d1c3fea7ecbed758168787fe4e4a3157e52bc808";
#}) {};
#qemu-6_2_0 = olderPkgs.qemu_full;
in with pkgs; rec {
packages = utils.lib.flattenTree {
main = buildGoModule {
inherit version;
pname = "emailog";
vendorSha256 = "sha256-OVu4XvjUrqNR6yVsp56xEAXXSZ/UAVYCCVwSG+lGTSw=";
src = ./.;
# Testing fails during nix build because env vars are not
# available
doCheck = false;
meta = {
description = "Email logging HTTP server, written in Go";
homepage = "https://github.com/ServeUp-Inc/emailog";
license = lib.licenses.mit;
maintainers = [ "justkash" ];
platforms = lib.platforms.linux ++ lib.platforms.darwin;
};
};
};
defaultPackage = packages.main;
defaultApp = packages.main;
devShells.default = mkShell rec {
buildInputs = [
gnupg
go
python310Packages.grip
podman
curl
git
];
SERVER_HOST = "127.0.0.1";
SERVER_PORT = 4000;
DB_CONTAINER_NAME = "devsqldb";
DB_CONTAINER_PORT = 3306;
DB_ROOT_PASS = "devroot";
DB_USER = "devuser";
DB_PASS = "devpass";
DB_NAME = "devdb";
DB_PORT = DB_CONTAINER_PORT;
DB_HOST = "127.0.0.1";
shellHook = ''
start_markdown_server() {
grip > /dev/null 2>&1 &
}
stop_markdown_server() {
# List jobs, find grip, extract process id, pass to kill command
jobs -l | grep grip | awk '{print $2}' | xargs kill
}
start_podman() {
echo 'Starting Podman...'
podman machine init > /dev/null 2>&1
podman machine start > /dev/null 2>&1
# Wait for the default machine to be ready
#until [ "`podman machine inspect --format {{.State}}`"=="running" ]; do
# sleep 0.1;
#done;
# Wait 5s for machine to actually start
# Podman machine state seems to change to running
# before actually being ready
# TODO Change to better check
sleep 15s
echo 'Podman started'
}
stop_podman() {
podman machine stop
echo 'Podman stopped'
}
start_db_container() {
echo 'Starting database container...'
# Run MySQL instance, tag is oracle because it supports arm64/v8
podman run -d \
--name $DB_CONTAINER_NAME \
-p 3306:$DB_CONTAINER_PORT \
-e MYSQL_ROOT_PASSWORD=$DB_ROOT_PASS \
-e MYSQL_USER=$DB_USER \
-e MYSQL_PASSWORD=$DB_PASS \
-e MYSQL_DATABASE=$DB_NAME \
mysql:oracle > /dev/null
# Wait for container to be ready
until [ "`podman inspect -f {{.State.Health.Status}} $DB_CONTAINER_NAME`"=="healthy" ]; do
sleep 0.1;
done;
echo 'Database container ready'
}
stop_db_container() {
podman container stop $DB_CONTAINER_NAME > /dev/null
podman container wait $DB_CONTAINER_NAME > /dev/null
podman container prune --force > /dev/null
echo 'Database container stopped.'
}
setup() {
start_podman
start_db_container
start_markdown_server
}
teardown() {
stop_db_container
stop_podman
stop_markdown_server
}
setup
trap 'teardown' EXIT
'';
};
}
);
}