bb74ebb72b
We are currently using an impure method to build a derivation for playwrights browsers on darwin: We just call `playwright install` during build-time. But this recently began to fail, with an error that the azure certificate would be self-signed, while it was not. This is presumably due to https://github.com/NixOS/nixpkgs/pull/257513 where we started to use the systems CA store for nodejs instead of the bundled one, so we add cacert to fix it. Maybe the whole impure method of downloading browsers on darwin should be reconsidered in favor of following the same approach as on Linux, but that would probably have the drawback that we'd loose safari as one of the browsers.
136 lines
3.6 KiB
Nix
136 lines
3.6 KiB
Nix
{ 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
|