stripe-cli: 1.23.3 -> 1.23.5 (#375724)
[NixPkgs.git] / pkgs / development / python-modules / semgrep / default.nix
blob939454a719757416872eeae9328452f8886dae9f
1 { lib
2 , callPackage
3 , fetchFromGitHub
4 , semgrep-core
5 , buildPythonPackage
6 , pythonPackages
8 , pytestCheckHook
9 , git
12 # testing locally post build:
13 # ./result/bin/semgrep scan --metrics=off --config 'r/generic.unicode.security.bidi.contains-bidirectional-characters'
15 let
16   common = import ./common.nix { inherit lib; };
17   semgrepBinPath = lib.makeBinPath [ semgrep-core ];
19 buildPythonPackage rec {
20   pname = "semgrep";
21   inherit (common) version;
22   src = fetchFromGitHub {
23     owner = "semgrep";
24     repo = "semgrep";
25     rev = "v${version}";
26     hash = common.srcHash;
27   };
29   # prepare a subset of the submodules as we only need a handful
30   # and there are many many submodules total
31   postPatch = (lib.concatStringsSep "\n" (lib.mapAttrsToList
32     (
33       path: submodule: ''
34         # substitute ${path}
35         # remove git submodule placeholder
36         rm -r ${path}
37         # link submodule
38         ln -s ${submodule}/ ${path}
39       ''
40     )
41     passthru.submodulesSubset)) + ''
42     cd cli
43   '';
45   # tell cli/setup.py to not copy semgrep-core into the result
46   # this means we can share a copy of semgrep-core and avoid an issue where it
47   # copies the binary but doesn't retain the executable bit
48   SEMGREP_SKIP_BIN = true;
50   pythonRelaxDeps = [
51     "boltons"
52     "glom"
53   ];
55   propagatedBuildInputs = with pythonPackages; [
56     attrs
57     boltons
58     colorama
59     click
60     click-option-group
61     glom
62     requests
63     rich
64     ruamel-yaml
65     tqdm
66     packaging
67     jsonschema
68     wcmatch
69     peewee
70     defusedxml
71     urllib3
72     typing-extensions
73     python-lsp-jsonrpc
74     tomli
75   ];
77   doCheck = true;
79   nativeCheckInputs = [ git pytestCheckHook ] ++ (with pythonPackages; [
80     flaky
81     pytest-snapshot
82     pytest-mock
83     pytest-freezegun
84     types-freezegun
85   ]);
87   disabledTestPaths = [
88     "tests/default/e2e"
89     "tests/default/e2e-pro"
90     "tests/default/e2e-pysemgrep"
91   ];
93   disabledTests = [
94     # requires networking
95     "test_send"
96     # requires networking
97     "test_parse_exclude_rules_auto"
98     # many child tests require networking to download files
99     "TestConfigLoaderForProducts"
100     # doesn't start flaky plugin correctly
101     "test_debug_performance"
102   ];
104   preCheck = ''
105     # tests need a home directory
106     export HOME="$(mktemp -d)"
108     # tests need access to `semgrep-core`
109     export OLD_PATH="$PATH"
110     export PATH="$PATH:${semgrepBinPath}"
112     # we're in cli
113     # replace old semgrep with wrapped one
114     rm ./bin/semgrep
115     ln -s $out/bin/semgrep ./bin/semgrep
116   '';
118   postCheck = ''
119     export PATH="$OLD_PATH"
120     unset OLD_PATH
121   '';
123   # since we stop cli/setup.py from finding semgrep-core and copying it into
124   # the result we need to provide it on the PATH
125   preFixup = ''
126     makeWrapperArgs+=(--prefix PATH : ${semgrepBinPath})
127   '';
129   postInstall = ''
130     chmod +x $out/bin/{,py}semgrep
131   '';
133   passthru = {
134     inherit common semgrep-core;
135     submodulesSubset = lib.mapAttrs (k: args: fetchFromGitHub args) common.submodules;
136     updateScript = ./update.sh;
137   };
139   meta = common.meta // {
140     description = common.meta.description + " - cli";
141     inherit (semgrep-core.meta) platforms;
142   };