2023-04-18 23:18:03 +02:00
|
|
|
{ lib
|
|
|
|
, stdenv
|
|
|
|
, chromium
|
|
|
|
, ffmpeg
|
|
|
|
, git
|
|
|
|
, jq
|
|
|
|
, nodejs
|
|
|
|
, fetchFromGitHub
|
|
|
|
, fetchurl
|
|
|
|
, makeFontsConf
|
|
|
|
, makeWrapper
|
|
|
|
, runCommand
|
|
|
|
, unzip
|
|
|
|
}:
|
|
|
|
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";
|
2023-06-04 13:07:33 +02:00
|
|
|
# run ./pkgs/development/python-modules/playwright/update.sh to update
|
2023-11-24 15:49:07 +01:00
|
|
|
version = "1.40.0";
|
2023-04-18 23:18:03 +02:00
|
|
|
|
|
|
|
src = fetchurl {
|
|
|
|
url = "https://playwright.azureedge.net/builds/driver/${filename}";
|
|
|
|
sha256 = {
|
2023-11-24 15:49:07 +01:00
|
|
|
x86_64-linux = "0y9n23r4yfcgm4a50rfgicl91vrllak0d8h26yagh6h8hl0r3nhh";
|
|
|
|
aarch64-linux = "0zd456klidi4sg7wahfrdbs2bwiq3q6ngxd4iv3vi9f9w9nq2p2k";
|
|
|
|
x86_64-darwin = "0yaiwg9821w9nszzkrp5skzf5792nahvfqnr4axk84dcngslxvmk";
|
|
|
|
aarch64-darwin = "1b1jmv6l97ss8c4sc3n1xckn05fpq3fihjbjxr2qz6i9dsy3xj57";
|
2023-04-18 23:18:03 +02:00
|
|
|
}.${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;
|
|
|
|
|
|
|
|
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
|