blob: e1406970fc67fe4679b65b9d7c81cee08e273dfd (
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
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
|
{ channel ? "stable", pkgs ? import <nixpkgs> {} }:
let
helloService = pkgs.callPackage ./service-hello {};
worldService = pkgs.callPackage ./service-world {};
joinerService = pkgs.callPackage ./service-joiner {};
personApiTypes = pkgs.callPackage ./person-api-types {};
personService = pkgs.callPackage ./service-person { inherit personApiTypes; };
kubenix = pkgs.callPackage ./nix/kubenix.nix {};
buildConfig = t: kubenix.buildResources { configuration = import ./configuration.nix { type = t; }; };
helloImage = pkgs.dockerTools.buildLayeredImage {
name = "hello-service";
tag = "latest";
config.Cmd = [ "${helloService}/bin/service-hello" ];
};
worldImage = pkgs.dockerTools.buildLayeredImage {
name = "world-service";
tag = "latest";
config.Cmd = [ "${worldService}/bin/service-world" ];
};
joinerImage = pkgs.dockerTools.buildLayeredImage {
name = "joiner-service";
tag = "latest";
config.Cmd = [ "${joinerService}/bin/service-joiner" ];
};
personImage = pkgs.dockerTools.buildLayeredImage {
name = "person-service";
tag = "latest";
config.Cmd = [ "${personService}/bin/service-person" ];
};
in rec {
inherit helloImage worldImage joinerImage personImage;
test-deployment = pkgs.callPackage ./nix/test-deployment.nix { };
deploy-to-kind = pkgs.callPackage ./nix/deploy-to-kind.nix {
inherit helloImage worldImage joinerImage;
config = buildConfig "dev";
};
config = buildConfig "dev";
redeploy = pkgs.writeScriptBin "redeploy" ''
cat ${config} | ${pkgs.kubectl}/bin/kubectl apply -f -
'';
deploy-and-test = pkgs.mkShell {
buildInputs = [ pkgs.kind deploy-to-kind test-deployment ];
shellHook = ''
deploy-to-kind
export KUBECONFIG=$(kind get kubeconfig-path)
wait-for-deployment hello
test-deployment
kind delete cluster
'';
};
postgresDb = "helloworlddb";
postgresUser = "helloworlduser";
postgresPassword = "asdfghjkl";
postgresContainerName = "helloworld-dev-db";
run-dev-postgres-container = pkgs.writeScriptBin "run-dev-postgres-container" ''
${pkgs.docker}/bin/docker run \
--name ${postgresContainerName} \
-e POSTGRES_PASSWORD="${postgresPassword}" \
-p 5432:5432 \
-m 512m \
-d \
--rm \
postgres
sleep 2 # because postgres needs to spin up
docker exec -it ${postgresContainerName} psql -U postgres -c "CREATE USER ${postgresUser} PASSWORD '${postgresPassword}' SUPERUSER CREATEDB INHERIT LOGIN"
docker exec -it ${postgresContainerName} createdb -U postgres ${postgresDb}
'';
destroy-dev-postgres-container = pkgs.writeScriptBin "destroy-dev-postgres-container" ''
docker stop ${postgresContainerName}
'';
shell = let
moz_overlay = import (
builtins.fetchTarball https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz
);
pkgs = import <nixpkgs> { overlays = [ moz_overlay ]; };
rustchannel = pkgs.rustChannelOf { inherit channel; };
in
pkgs.mkShell {
buildInputs = with pkgs; [
kind
deploy-to-kind
test-deployment
redeploy
run-dev-postgres-container
destroy-dev-postgres-container
curl
docker
kubectl
diesel-cli
rustchannel.rust-std
rustchannel.rust
rustchannel.rustc
rustchannel.cargo
cmake
curl
gcc
openssl
pkgconfig
postgresql
];
POSTGRES_PASSWORD = "${postgresPassword}";
DATABASE_URL="postgres://${postgresUser}:${postgresPassword}@localhost/${postgresDb}";
LIBCLANG_PATH = "${pkgs.llvmPackages.libclang}/lib";
};
}
|