about summary refs log tree commit diff
path: root/pkgs/tools/admin/pulumi-packages/base.nix
blob: 001a247379bc3c46f09266716f8fc190dd8329c5 (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
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
{ buildGoModule
, fetchFromGitHub
, python3Packages
}:
let
  mkBasePackage =
    { pname
    , src
    , version
    , vendorHash
    , cmd
    , extraLdflags
    , ...
    }@args: buildGoModule (rec {
      inherit pname src vendorHash version;

      sourceRoot = "${src.name}/provider";

      subPackages = [ "cmd/${cmd}" ];

      doCheck = false;

      ldflags = [
        "-s"
        "-w"
      ] ++ extraLdflags;
    } // args);

  mkPythonPackage =
    { meta
    , pname
    , src
    , version
    , ...
    }: python3Packages.callPackage
      ({ buildPythonPackage, pythonOlder, parver, pulumi, semver }:
      buildPythonPackage rec {
        inherit pname meta src version;
        format = "setuptools";

        disabled = pythonOlder "3.7";

        sourceRoot = "${src.name}/sdk/python";

        propagatedBuildInputs = [
          parver
          pulumi
          semver
        ];

        postPatch = ''
          sed -i \
            -e 's/^VERSION = .*/VERSION = "${version}"/g' \
            -e 's/^PLUGIN_VERSION = .*/PLUGIN_VERSION = "${version}"/g' \
            setup.py
        '';

        # Auto-generated; upstream does not have any tests.
        # Verify that the version substitution works
        checkPhase = ''
          runHook preCheck

          pip show "${pname}" | grep "Version: ${version}" > /dev/null \
            || (echo "ERROR: Version substitution seems to be broken"; exit 1)

          runHook postCheck
        '';

        pythonImportsCheck = [
          (builtins.replaceStrings [ "-" ] [ "_" ] pname)
        ];
      })
      { };
in
{ owner
, repo
, rev
, version
, hash
, vendorHash
, cmdGen
, cmdRes
, extraLdflags
, meta
, fetchSubmodules ? false
, ...
}@args:
let
  src = fetchFromGitHub {
    name = "source-${repo}-${rev}";
    inherit owner repo rev hash fetchSubmodules;
  };

  pulumi-gen = mkBasePackage rec {
    inherit src version vendorHash extraLdflags;

    cmd = cmdGen;
    pname = cmdGen;
  };
in
mkBasePackage ({
  inherit meta src version vendorHash extraLdflags;

  pname = repo;

  nativeBuildInputs = [
    pulumi-gen
  ];

  cmd = cmdRes;

  postConfigure = ''
    pushd ..

    chmod +w sdk/
    ${cmdGen} schema

    popd

    VERSION=v${version} go generate cmd/${cmdRes}/main.go
  '';

  passthru.sdks.python = mkPythonPackage {
    inherit meta src version;

    pname = repo;
  };
} // args)