summary refs log tree commit diff
path: root/pkgs/development/beam-modules/fetch-mix-deps.nix
blob: 0c6f4e35a90e2fc3197ba2e8b82805985d8eefb2 (plain) (blame)
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
{ stdenvNoCC, lib, elixir, hex, rebar, rebar3, cacert, git }:

{ pname
, version
, sha256
, src
, mixEnv ? "prod"
, debug ? false
, meta ? { }
, patches ? []
, ...
}@attrs:

stdenvNoCC.mkDerivation (attrs // {
  nativeBuildInputs = [ elixir hex cacert git ];

  MIX_ENV = mixEnv;
  MIX_DEBUG = if debug then 1 else 0;
  DEBUG = if debug then 1 else 0; # for rebar3
  # the api with `mix local.rebar rebar path` makes a copy of the binary
  MIX_REBAR = "${rebar}/bin/rebar";
  MIX_REBAR3 = "${rebar3}/bin/rebar3";
  # there is a persistent download failure with absinthe 1.6.3
  # those defaults reduce the failure rate
  HEX_HTTP_CONCURRENCY = 1;
  HEX_HTTP_TIMEOUT = 120;

  configurePhase = attrs.configurePhase or ''
    runHook preConfigure
    export HEX_HOME="$TEMPDIR/.hex";
    export MIX_HOME="$TEMPDIR/.mix";
    export MIX_DEPS_PATH="$TEMPDIR/deps";

    # Rebar
    export REBAR_GLOBAL_CONFIG_DIR="$TMPDIR/rebar3"
    export REBAR_CACHE_DIR="$TMPDIR/rebar3.cache"
    runHook postConfigure
  '';

  inherit patches;

  dontBuild = true;

  installPhase = attrs.installPhase or ''
    runHook preInstall
    mix deps.get --only ${mixEnv}
    find "$TEMPDIR/deps" -path '*/.git/*' -a ! -name HEAD -exec rm -rf {} +
    cp -r --no-preserve=mode,ownership,timestamps $TEMPDIR/deps $out
    runHook postInstall
  '';

  outputHashAlgo = "sha256";
  outputHashMode = "recursive";
  outputHash = sha256;

  impureEnvVars = lib.fetchers.proxyImpureEnvVars;
  inherit meta;
})