evcc: 0.131.4 -> 0.131.5
[NixPkgs.git] / pkgs / development / web / playwright / driver.nix
blob1058a61d48fbcd9c4830b48ade58d1aca3038076
2   lib,
3   buildNpmPackage,
4   stdenv,
5   chromium,
6   ffmpeg,
7   jq,
8   nodejs,
9   fetchFromGitHub,
10   linkFarm,
11   callPackage,
12   makeFontsConf,
13   makeWrapper,
14   runCommand,
15   cacert,
17 let
18   inherit (stdenv.hostPlatform) system;
20   throwSystem = throw "Unsupported system: ${system}";
21   suffix =
22     {
23       x86_64-linux = "linux";
24       aarch64-linux = "linux-arm64";
25       x86_64-darwin = "mac";
26       aarch64-darwin = "mac-arm64";
27     }
28     .${system} or throwSystem;
30   version = "1.47.0";
32   src = fetchFromGitHub {
33     owner = "Microsoft";
34     repo = "playwright";
35     rev = "v${version}";
36     hash = "sha256-cKjVDy1wFo8NlF8v+8YBuQUF2OUYjCmv27uhEoVUrno=";
37   };
39   babel-bundle = buildNpmPackage {
40     pname = "babel-bundle";
41     inherit version src;
42     sourceRoot = "${src.name}/packages/playwright/bundles/babel";
43     npmDepsHash = "sha256-HrDTkP2lHl2XKD8aGpmnf6YtSe/w9UePH5W9QfbaoMg=";
44     dontNpmBuild = true;
45     installPhase = ''
46       cp -r . "$out"
47     '';
48   };
49   expect-bundle = buildNpmPackage {
50     pname = "expect-bundle";
51     inherit version src;
52     sourceRoot = "${src.name}/packages/playwright/bundles/expect";
53     npmDepsHash = "sha256-qnFx/AQZtmxNFrrabfOpsWy6I64DFJf3sWrJzL1wfU4=";
54     dontNpmBuild = true;
55     installPhase = ''
56       cp -r . "$out"
57     '';
58   };
59   utils-bundle = buildNpmPackage {
60     pname = "utils-bundle";
61     inherit version src;
62     sourceRoot = "${src.name}/packages/playwright/bundles/utils";
63     npmDepsHash = "sha256-d+nE11x/493BexI70mVbnZFLQClU88sscbNwruXjx1M=";
64     dontNpmBuild = true;
65     installPhase = ''
66       cp -r . "$out"
67     '';
68   };
69   utils-bundle-core = buildNpmPackage {
70     pname = "utils-bundle-core";
71     inherit version src;
72     sourceRoot = "${src.name}/packages/playwright-core/bundles/utils";
73     npmDepsHash = "sha256-aktxEDQKxsDcInyjDKDuIu4zwtrAH0lRda/mP1IayPA=";
74     dontNpmBuild = true;
75     installPhase = ''
76       cp -r . "$out"
77     '';
78   };
79   zip-bundle = buildNpmPackage {
80     pname = "zip-bundle";
81     inherit version src;
82     sourceRoot = "${src.name}/packages/playwright-core/bundles/zip";
83     npmDepsHash = "sha256-62Apz8uX6d4HKDqQxR6w5Vs31tl63McWGPwT6s2YsBE=";
84     dontNpmBuild = true;
85     installPhase = ''
86       cp -r . "$out"
87     '';
88   };
90   playwright = buildNpmPackage {
91     pname = "playwright";
92     inherit version src;
94     sourceRoot = "${src.name}"; # update.sh depends on sourceRoot presence
95     npmDepsHash = "sha256-FaDTJmIiaaOCvq6tARfiWX5IBTTNOJ/iVkRsO4D8aqc=";
97     nativeBuildInputs = [ cacert ];
99     ELECTRON_SKIP_BINARY_DOWNLOAD = true;
101     postPatch = ''
102       sed -i '/\/\/ Update test runner./,/^\s*$/{d}' utils/build/build.js
103       sed -i '/\/\/ Update bundles./,/^\s*$/{d}' utils/build/build.js
104       sed -i '/execSync/d' ./utils/generate_third_party_notice.js
105       sed -i '/plugins: /d' ./packages/playwright/bundles/utils/build.js
106       sed -i '/plugins: /d' ./packages/playwright-core/bundles/zip/build.js
107       chmod +w packages/playwright/bundles/babel
108       ln -s ${babel-bundle}/node_modules packages/playwright/bundles/babel/node_modules
109       chmod +w packages/playwright/bundles/expect
110       ln -s ${expect-bundle}/node_modules packages/playwright/bundles/expect/node_modules
111       chmod +w packages/playwright/bundles/utils
112       ln -s ${utils-bundle}/node_modules packages/playwright/bundles/utils/node_modules
113       chmod +w packages/playwright-core/bundles/utils
114       ln -s ${utils-bundle-core}/node_modules packages/playwright-core/bundles/utils/node_modules
115       chmod +w packages/playwright-core/bundles/zip
116       ln -s ${zip-bundle}/node_modules packages/playwright-core/bundles/zip/node_modules
117     '';
119     installPhase = ''
120       runHook preInstall
122       shopt -s extglob
124       mkdir -p "$out/lib"
125       cp -r packages/playwright/node_modules "$out/lib/node_modules"
127       mkdir -p "$out/lib/node_modules/playwright"
128       cp -r packages/playwright/!(bundles|src|node_modules|.*) "$out/lib/node_modules/playwright"
130       mkdir -p "$out/lib/node_modules/playwright-core"
131       cp -r packages/playwright-core/!(bundles|src|bin|.*) "$out/lib/node_modules/playwright-core"
133       mkdir -p "$out/lib/node_modules/@playwright/test"
134       cp -r packages/playwright-test/* "$out/lib/node_modules/@playwright/test"
136       runHook postInstall
137     '';
139     meta = {
140       description = "Framework for Web Testing and Automation";
141       homepage = "https://playwright.dev";
142       license = lib.licenses.asl20;
143       maintainers = with lib.maintainers; [ kalekseev ];
144       inherit (nodejs.meta) platforms;
145     };
146   };
148   playwright-core = stdenv.mkDerivation (finalAttrs: {
149     pname = "playwright-core";
150     inherit (playwright) version src meta;
152     installPhase = ''
153       runHook preInstall
155       cp -r ${playwright}/lib/node_modules/playwright-core "$out"
157       runHook postInstall
158     '';
160     passthru = {
161       browsersJSON = (lib.importJSON ./browsers.json).browsers;
162       browsers =
163         {
164           x86_64-linux = browsers-linux { };
165           aarch64-linux = browsers-linux { };
166           x86_64-darwin = browsers-mac;
167           aarch64-darwin = browsers-mac;
168         }
169         .${system} or throwSystem;
170       browsers-chromium = browsers-linux { };
171     };
172   });
174   playwright-test = stdenv.mkDerivation (finalAttrs: {
175     pname = "playwright-test";
176     inherit (playwright) version src;
178     nativeBuildInputs = [ makeWrapper ];
179     installPhase = ''
180       runHook preInstall
182       shopt -s extglob
183       mkdir -p $out/bin
184       cp -r ${playwright}/* $out
186       makeWrapper "${nodejs}/bin/node" "$out/bin/playwright" \
187         --add-flags "$out/lib/node_modules/@playwright/test/cli.js" \
188         --prefix NODE_PATH : ${placeholder "out"}/lib/node_modules \
189         --set-default PLAYWRIGHT_BROWSERS_PATH "${playwright-core.passthru.browsers}"
191       runHook postInstall
192     '';
194     meta = playwright.meta // {
195       mainProgram = "playwright";
196     };
197   });
199   browsers-mac = stdenv.mkDerivation {
200     pname = "playwright-browsers";
201     inherit (playwright) version;
203     dontUnpack = true;
205     nativeBuildInputs = [ cacert ];
207     installPhase = ''
208       runHook preInstall
210       export PLAYWRIGHT_BROWSERS_PATH=$out
211       ${playwright-core}/cli.js install
212       rm -r $out/.links
214       runHook postInstall
215     '';
217     meta.platforms = lib.platforms.darwin;
218   };
220   browsers-linux = lib.makeOverridable (
221     {
222       withChromium ? true,
223       withFirefox ? true,
224       withWebkit ? true,
225       withFfmpeg ? true,
226       fontconfig_file ? makeFontsConf {
227         fontDirectories = [ ];
228       },
229     }:
230     let
231       browsers =
232         lib.optionals withChromium [ "chromium" ]
233         ++ lib.optionals withFirefox [ "firefox" ]
234         ++ lib.optionals withWebkit [ "webkit" ]
235         ++ lib.optionals withFfmpeg [ "ffmpeg" ];
236     in
237     linkFarm "playwright-browsers" (
238       lib.listToAttrs (
239         map (
240           name:
241           let
242             value = playwright-core.passthru.browsersJSON.${name};
243           in
244           lib.nameValuePair
245             # TODO check platform for revisionOverrides
246             "${name}-${value.revision}"
247             (
248               callPackage (./. + "/${name}.nix") (
249                 {
250                   inherit suffix system throwSystem;
251                   inherit (value) revision;
252                 }
253                 // lib.optionalAttrs (name == "chromium") {
254                   inherit fontconfig_file;
255                 }
256               )
257             )
258         ) browsers
259       )
260     )
261   );
264   playwright-core = playwright-core;
265   playwright-test = playwright-test;