diff options
Diffstat (limited to 'nixpkgs/pkgs/development/web/playwright/driver.nix')
-rw-r--r-- | nixpkgs/pkgs/development/web/playwright/driver.nix | 136 |
1 files changed, 136 insertions, 0 deletions
diff --git a/nixpkgs/pkgs/development/web/playwright/driver.nix b/nixpkgs/pkgs/development/web/playwright/driver.nix new file mode 100644 index 000000000000..7f755eda21ce --- /dev/null +++ b/nixpkgs/pkgs/development/web/playwright/driver.nix @@ -0,0 +1,136 @@ +{ lib +, stdenv +, chromium +, ffmpeg +, git +, jq +, nodejs +, fetchFromGitHub +, fetchurl +, makeFontsConf +, makeWrapper +, runCommand +, unzip +, cacert +}: +let + inherit (stdenv.hostPlatform) system; + + throwSystem = throw "Unsupported system: ${system}"; + + driver = stdenv.mkDerivation (finalAttrs: + let + suffix = { + x86_64-linux = "linux"; + aarch64-linux = "linux-arm64"; + x86_64-darwin = "mac"; + aarch64-darwin = "mac-arm64"; + }.${system} or throwSystem; + filename = "playwright-${finalAttrs.version}-${suffix}.zip"; + in + { + pname = "playwright-driver"; + # run ./pkgs/development/python-modules/playwright/update.sh to update + version = "1.40.0"; + + src = fetchurl { + url = "https://playwright.azureedge.net/builds/driver/${filename}"; + sha256 = { + x86_64-linux = "0y9n23r4yfcgm4a50rfgicl91vrllak0d8h26yagh6h8hl0r3nhh"; + aarch64-linux = "0zd456klidi4sg7wahfrdbs2bwiq3q6ngxd4iv3vi9f9w9nq2p2k"; + x86_64-darwin = "0yaiwg9821w9nszzkrp5skzf5792nahvfqnr4axk84dcngslxvmk"; + aarch64-darwin = "1b1jmv6l97ss8c4sc3n1xckn05fpq3fihjbjxr2qz6i9dsy3xj57"; + }.${system} or throwSystem; + }; + + sourceRoot = "."; + + nativeBuildInputs = [ unzip ]; + + postPatch = '' + # Use Nix's NodeJS instead of the bundled one. + substituteInPlace playwright.sh --replace '"$SCRIPT_PATH/node"' '"${nodejs}/bin/node"' + rm node + + # Hard-code the script path to $out directory to avoid a dependency on coreutils + substituteInPlace playwright.sh \ + --replace 'SCRIPT_PATH="$(cd "$(dirname "$0")" ; pwd -P)"' "SCRIPT_PATH=$out" + + patchShebangs playwright.sh package/bin/*.sh + ''; + + installPhase = '' + runHook preInstall + + mkdir -p $out/bin + mv playwright.sh $out/bin/playwright + mv package $out/ + + runHook postInstall + ''; + + passthru = { + inherit filename; + browsers = { + x86_64-linux = browsers-linux { }; + aarch64-linux = browsers-linux { }; + x86_64-darwin = browsers-mac; + aarch64-darwin = browsers-mac; + }.${system} or throwSystem; + browsers-chromium = browsers-linux {}; + }; + }); + + browsers-mac = stdenv.mkDerivation { + pname = "playwright-browsers"; + inherit (driver) version; + + dontUnpack = true; + + nativeBuildInputs = [ + cacert + ]; + + installPhase = '' + runHook preInstall + + export PLAYWRIGHT_BROWSERS_PATH=$out + ${driver}/bin/playwright install + rm -r $out/.links + + runHook postInstall + ''; + + meta.platforms = lib.platforms.darwin; + }; + + browsers-linux = { withChromium ? true }: let + fontconfig = makeFontsConf { + fontDirectories = []; + }; + in + runCommand ("playwright-browsers" + + lib.optionalString withChromium "-chromium") + { + nativeBuildInputs = [ + makeWrapper + jq + ]; + } ('' + BROWSERS_JSON=${driver}/package/browsers.json + '' + lib.optionalString withChromium '' + CHROMIUM_REVISION=$(jq -r '.browsers[] | select(.name == "chromium").revision' $BROWSERS_JSON) + mkdir -p $out/chromium-$CHROMIUM_REVISION/chrome-linux + + # See here for the Chrome options: + # https://github.com/NixOS/nixpkgs/issues/136207#issuecomment-908637738 + makeWrapper ${chromium}/bin/chromium $out/chromium-$CHROMIUM_REVISION/chrome-linux/chrome \ + --set SSL_CERT_FILE /etc/ssl/certs/ca-bundle.crt \ + --set FONTCONFIG_FILE ${fontconfig} + '' + '' + FFMPEG_REVISION=$(jq -r '.browsers[] | select(.name == "ffmpeg").revision' $BROWSERS_JSON) + mkdir -p $out/ffmpeg-$FFMPEG_REVISION + ln -s ${ffmpeg}/bin/ffmpeg $out/ffmpeg-$FFMPEG_REVISION/ffmpeg-linux + ''); +in + driver |