-
Notifications
You must be signed in to change notification settings - Fork 10
/
build-mix.nix
74 lines (58 loc) · 1.74 KB
/
build-mix.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
{ stdenv, elixir, hex, rebar, rebar3, fetchMixDeps, erlang, callPackage }:
{ name ? "${args.pname}-${args.version}"
, mixSha256 ? null
, src ? null
, sourceRoot ? null
, buildInputs ? []
, nativeBuildInputs ? []
, buildType ? "release"
, meta ? {}
, mixEnv ? "prod"
, impureMixRebar ? false
, ... } @ args:
let
mixDeps = fetchMixDeps {
inherit src name mixEnv;
sha256 = mixSha256;
};
in stdenv.mkDerivation (args // {
dontStrip = true;
nativeBuildInputs = nativeBuildInputs ++ [ hex elixir erlang ];
MIX_ENV = mixEnv;
HEX_OFFLINE = 1;
setRebar = if impureMixRebar
then "mix local.rebar --force"
else ''
export MIX_REBAR="${rebar}/bin/rebar"
export MIX_REBAR3="${rebar3}/bin/rebar3"
'';
postUnpack = ''
export HEX_HOME="$TMPDIR/hex"
export MIX_HOME="$TMPDIR/mix"
export REBAR_GLOBAL_CONFIG_DIR="$TMPDIR/rebar3"
export REBAR_CACHE_DIR="$TMPDIR/rebar3.cache"
export MIX_DEPS_PATH="$TMPDIR/deps"
$setRebar
cp --no-preserve=mode -R "${mixDeps}" "$MIX_DEPS_PATH"
'' + (args.postUnpack or "");
configurePhase = args.configurePhase or ''
runHook preConfigure
mix deps.compile --no-deps-check --skip-umbrella-children
runHook postConfigure
'';
buildPhase = args.buildPhase or ''
runHook preBuild
mix do compile --no-deps-check, release --path "$out"
runHook postBuild
'';
installPhase = args.installPhase or ''
runHook preInstall
runHook postInstall
'';
checkPhase = args.checkPhase or ''
runHook preCheck
echo "Running mix test ''${checkFlags} ''${checkFlagsArray+''${checkFlagsArray[@]}}"
mix test ''${checkFlags} ''${checkFlagsArray+"''${checkFlagsArray[@]}"}
runHook postCheck
'';
})