From 24b4347936e39405b3a7532031e53c8e6f5569b2 Mon Sep 17 00:00:00 2001 From: TomaSajt <62384384+TomaSajt@users.noreply.github.com> Date: Thu, 29 Aug 2024 13:07:38 +0200 Subject: [PATCH] electron-fiddle: 0.32.6 -> 0.36.4, fix build and refactor --- .../tools/electron-fiddle/default.nix | 126 +++++++++--------- 1 file changed, 65 insertions(+), 61 deletions(-) diff --git a/pkgs/development/tools/electron-fiddle/default.nix b/pkgs/development/tools/electron-fiddle/default.nix index cde2dcae311c2..a01decf0bb689 100644 --- a/pkgs/development/tools/electron-fiddle/default.nix +++ b/pkgs/development/tools/electron-fiddle/default.nix @@ -1,30 +1,28 @@ -{ buildFHSEnv -, electron_24 -, fetchFromGitHub -, fetchYarnDeps -, fetchurl -, fixup-yarn-lock -, git -, lib -, makeDesktopItem -, nodejs_18 -, stdenvNoCC -, util-linux -, yarn -, zip +{ + buildFHSEnv, + electron, + fetchFromGitHub, + fetchYarnDeps, + fetchurl, + yarnConfigHook, + yarnBuildHook, + git, + lib, + makeDesktopItem, + nodejs, + stdenvNoCC, + util-linux, + zip, }: let - pname = "electron-fiddle"; - version = "0.32.6"; - electron = electron_24; - nodejs = nodejs_18; + version = "0.36.4"; src = fetchFromGitHub { owner = "electron"; repo = "fiddle"; - rev = "v${version}"; - hash = "sha256-Iuss2xwts1aWy2rKYG7J2EvFdH8Bbedn/uZG2bi9UHw="; + rev = "refs/tags/v${version}"; + hash = "sha256-z251eD8N3QQoQzx613yNRBhVIumrapBQ+onkEhk5nr8="; }; # As of https://github.com/electron/fiddle/pull/1316 this is fetched @@ -35,52 +33,51 @@ let hash = "sha256-1sxd3eJ6/WjXS6XQbrgKUTNUmrhuc1dAvy+VAivGErg="; }; - offlineCache = fetchYarnDeps { - yarnLock = "${src}/yarn.lock"; - hash = "sha256-dwhwUWwv6RYKEMdhRBvKVXvM8n1r+Qo0D3/uFsWIOpw="; - }; - - electronDummyMirror = "https://electron.invalid/"; - electronDummyDir = "nix"; - electronDummyFilename = - builtins.baseNameOf (builtins.head (electron.src.urls)); - electronDummyHash = - builtins.hashString "sha256" "${electronDummyMirror}${electronDummyDir}"; - unwrapped = stdenvNoCC.mkDerivation { - pname = "${pname}-unwrapped"; + pname = "electron-fiddle-unwrapped"; inherit version src; - nativeBuildInputs = [ fixup-yarn-lock git nodejs util-linux yarn zip ]; + offlineCache = fetchYarnDeps { + yarnLock = "${src}/yarn.lock"; + hash = "sha256-7iEWI1X+7kqqj9QOXpb5Rq22wdMbrAKdyY9UJekUbas="; + }; + + nativeBuildInputs = [ + yarnConfigHook + yarnBuildHook + git + nodejs + util-linux + zip + ]; - configurePhase = '' - export HOME=$TMPDIR - fixup-yarn-lock yarn.lock - yarn config --offline set yarn-offline-mirror ${offlineCache} - yarn install --offline --frozen-lockfile --ignore-scripts --no-progress --non-interactive - patchShebangs node_modules + preBuild = '' + ln -s ${releasesJson} static/releases.json - mkdir -p ~/.cache/electron/${electronDummyHash} - cp -ra '${electron.dist}' "$TMPDIR/electron" - chmod -R u+w "$TMPDIR/electron" - (cd "$TMPDIR/electron" && zip -0Xr ~/.cache/electron/${electronDummyHash}/${electronDummyFilename} .) + # electron files need to be writable on Darwin + cp -r ${electron.dist} electron-dist + chmod -R u+w electron-dist - ln -s ${releasesJson} static/releases.json - ''; + pushd electron-dist + zip -0Xqr ../electron.zip . + popd - buildPhase = '' - ELECTRON_CUSTOM_VERSION='${electron.version}' \ - ELECTRON_MIRROR='${electronDummyMirror}' \ - ELECTRON_CUSTOM_DIR='${electronDummyDir}' \ - ELECTRON_CUSTOM_FILENAME='${electronDummyFilename}' \ - yarn --offline run package + rm -r electron-dist + + # force @electron/packager to use our electron instead of downloading it, even if it is a different version + substituteInPlace node_modules/@electron/packager/dist/packager.js \ + --replace-fail 'await this.getElectronZipPath(downloadOpts)' '"electron.zip"' ''; + yarnBuildScript = "package"; + installPhase = '' + runHook preInstall + mkdir -p "$out/lib/electron-fiddle/resources" cp "out/Electron Fiddle-"*/resources/app.asar "$out/lib/electron-fiddle/resources/" - mkdir -p "$out/share/icons/hicolor/scalable/apps" - cp assets/icons/fiddle.svg "$out/share/icons/hicolor/scalable/apps/electron-fiddle.svg" + + runHook postInstall ''; }; @@ -92,7 +89,11 @@ let exec = "electron-fiddle %U"; icon = "electron-fiddle"; startupNotify = true; - categories = [ "GNOME" "GTK" "Utility" ]; + categories = [ + "GNOME" + "GTK" + "Utility" + ]; mimeTypes = [ "x-scheme-handler/electron-fiddle" ]; }; @@ -102,13 +103,12 @@ buildFHSEnv { runScript = "${electron}/bin/electron ${unwrapped}/lib/electron-fiddle/resources/app.asar"; extraInstallCommands = '' - mkdir -p "$out/share/icons/hicolor/scalable/apps" - ln -s "${unwrapped}/share/icons/hicolor/scalable/apps/electron-fiddle.svg" "$out/share/icons/hicolor/scalable/apps/" - mkdir -p "$out/share/applications" - cp "${desktopItem}/share/applications"/*.desktop "$out/share/applications/" + install -Dm644 "${src}"/assets/icons/fiddle.svg "$out"/share/icons/hicolor/scalable/apps/electron-fiddle.svg + install -Dm644 "${desktopItem}"/share/applications/*.desktop -t "$out"/share/applications/ ''; - targetPkgs = pkgs: + targetPkgs = + pkgs: with pkgs; map lib.getLib [ # for electron-fiddle itself @@ -170,7 +170,11 @@ buildFHSEnv { description = "Easiest way to get started with Electron"; homepage = "https://www.electronjs.org/fiddle"; license = licenses.mit; - maintainers = with maintainers; [ andersk ]; + mainProgram = "electron-fiddle"; + maintainers = with maintainers; [ + andersk + tomasajt + ]; platforms = electron.meta.platforms; }; }