From f298abec5a19d66fb304f0847a3b8e95389ee153 Mon Sep 17 00:00:00 2001 From: Peder Bergebakken Sundt Date: Fri, 27 Sep 2024 21:51:48 +0200 Subject: [PATCH 1/2] pagefind: 1.1.0 -> 1.1.1 Diff: https://github.com/CloudCannon/pagefind/compare/v1.1.0...v1.1.1 Release: https://github.com/CloudCannon/pagefind/releases/tag/v1.1.1 Changelog: https://github.com/CloudCannon/pagefind/blob/v1.1.1/CHANGELOG.md --- pkgs/applications/misc/pagefind/default.nix | 54 ++++++++++++++++----- 1 file changed, 42 insertions(+), 12 deletions(-) diff --git a/pkgs/applications/misc/pagefind/default.nix b/pkgs/applications/misc/pagefind/default.nix index 66ebad25ec36..fce13d526eff 100644 --- a/pkgs/applications/misc/pagefind/default.nix +++ b/pkgs/applications/misc/pagefind/default.nix @@ -1,7 +1,10 @@ { lib +, stdenv , rustPlatform , fetchFromGitHub , fetchNpmDeps +, fetchurl +, httplz , npmHooks , binaryen , gzip @@ -9,7 +12,6 @@ , rustc , wasm-bindgen-cli , wasm-pack -, fetchpatch }: let @@ -20,28 +22,28 @@ let cargoHash = "sha256-aACJ+lYNEU8FFBs158G1/JG8sc6Rq080PeKCMnwdpH0="; }; + # the lindera-unidic v0.32.2 crate uses [1] an outdated unidic-mecab fork [2] and builds it in pure rust + # [1] https://github.com/lindera/lindera/blob/v0.32.2/lindera-unidic/build.rs#L5-L11 + # [2] https://github.com/lindera/unidic-mecab + lindera-unidic-src = fetchurl { + url = "https://dlwqk3ibdg1xh.cloudfront.net/unidic-mecab-2.1.2.tar.gz"; + hash = "sha256-JKx1/k5E2XO1XmWEfDX6Suwtt6QaB7ScoSUUbbn8EYk="; + }; + in rustPlatform.buildRustPackage rec { pname = "pagefind"; - version = "1.1.0"; + version = "1.1.1"; src = fetchFromGitHub { owner = "cloudcannon"; repo = "pagefind"; rev = "refs/tags/v${version}"; - hash = "sha256-pcgcu9zylSTjj5rxNff+afFBWVpN5sGtlpadG1wb93M="; + hash = "sha256-4NfosDp5Wwz2lnqaFNcaIbWpjWiaQ4WCL6TcKEkfPck="; }; - cargoPatches = [ - (fetchpatch { # https://github.com/CloudCannon/pagefind/pull/680 - name = "cargo-update-time.patch"; - url = "https://github.com/CloudCannon/pagefind/commit/e6778572d225316803180db822f5cc12a936acd2.patch"; - hash = "sha256-XHpHA1hPIe+wjDQ6LE9hn2jn3eMBOK9Yoo920jfH9do="; - }) - ]; - - cargoHash = "sha256-KWWln7QCRo02cOgHy5JNERGS0CvvgsPISwkTZeeNEkg="; + cargoHash = "sha256-hnT9w3j8/YuN00x0LBPr75BKGWSnIYUNFTWIgtghJP4"; env.npmDeps_web_js = fetchNpmDeps { name = "npm-deps-web-js"; @@ -78,8 +80,24 @@ rustPlatform.buildRustPackage rec { cargoDeps=$cargoDeps_web cargoSetupPostUnpackHook cargoDeps=$cargoDeps_web cargoSetupPostPatchHook ) + + # patch a build-time dependency download + ( + cd $cargoDepsCopy/lindera-unidic + oldHash=$(sha256sum build.rs | cut -d " " -f 1) + + # file:// does not work + substituteInPlace build.rs --replace-fail \ + "https://dlwqk3ibdg1xh.cloudfront.net/unidic-mecab-2.1.2.tar.gz" \ + "http://localhost:34567/unidic-mecab-2.1.2.tar.gz" + + newHash=$(sha256sum build.rs | cut -d " " -f 1) + substituteInPlace .cargo-checksum.json --replace-fail $oldHash $newHash + ) ''; + __darwinAllowLocalNetworking = true; + nativeBuildInputs = [ binaryen gzip @@ -88,6 +106,7 @@ rustPlatform.buildRustPackage rec { rustc.llvmPackages.lld wasm-bindgen-92 wasm-pack + httplz ]; # build wasm and js assets @@ -95,6 +114,12 @@ rustPlatform.buildRustPackage rec { preBuild = '' export HOME=$(mktemp -d) + # serve lindera-unidic on localhost + mkdir .lindera-http-plz + ln -s ${lindera-unidic-src} .lindera-http-plz/unidic-mecab-2.1.2.tar.gz + httplz --port 34567 -- .lindera-http-plz/ & + httplz_pid=$! + echo entering pagefind_web_js... ( cd pagefind_web_js @@ -120,6 +145,11 @@ rustPlatform.buildRustPackage rec { ) ''; + # the file is also fetched during checkPhase + preInstall = '' + kill ${lib.optionalString stdenv.hostPlatform.isDarwin "-9"} $httplz_pid + ''; + buildFeatures = [ "extended" ]; meta = with lib; { From 0a35428c2ee657265aa1ba198664296eded41176 Mon Sep 17 00:00:00 2001 From: phanirithvij Date: Sat, 28 Sep 2024 11:07:32 +0530 Subject: [PATCH 2/2] pagefind: use available port, fmt, remove with lib Signed-off-by: phanirithvij Co-authored-by: pbsds --- pkgs/applications/misc/pagefind/default.nix | 84 ++++++++++++--------- 1 file changed, 48 insertions(+), 36 deletions(-) diff --git a/pkgs/applications/misc/pagefind/default.nix b/pkgs/applications/misc/pagefind/default.nix index fce13d526eff..9b616010dc30 100644 --- a/pkgs/applications/misc/pagefind/default.nix +++ b/pkgs/applications/misc/pagefind/default.nix @@ -1,17 +1,19 @@ -{ lib -, stdenv -, rustPlatform -, fetchFromGitHub -, fetchNpmDeps -, fetchurl -, httplz -, npmHooks -, binaryen -, gzip -, nodejs -, rustc -, wasm-bindgen-cli -, wasm-pack +{ + lib, + stdenv, + rustPlatform, + fetchFromGitHub, + fetchNpmDeps, + fetchurl, + httplz, + binaryen, + gzip, + nodejs, + npmHooks, + python3, + rustc, + wasm-bindgen-cli, + wasm-pack, }: let @@ -86,10 +88,22 @@ rustPlatform.buildRustPackage rec { cd $cargoDepsCopy/lindera-unidic oldHash=$(sha256sum build.rs | cut -d " " -f 1) + # serve lindera-unidic on localhost vacant port + httplz_port="${ + if stdenv.buildPlatform.isDarwin then + ''$(python -c 'import socket; s=socket.socket(); s.bind(("", 0)); print(s.getsockname()[1]); s.close()')'' + else + "34567" + }" + mkdir .lindera-http-plz + ln -s ${lindera-unidic-src} .lindera-http-plz/unidic-mecab-2.1.2.tar.gz + httplz --port "$httplz_port" -- .lindera-http-plz/ & + echo $! >$TMPDIR/.httplz_pid + # file:// does not work substituteInPlace build.rs --replace-fail \ "https://dlwqk3ibdg1xh.cloudfront.net/unidic-mecab-2.1.2.tar.gz" \ - "http://localhost:34567/unidic-mecab-2.1.2.tar.gz" + "http://localhost:$httplz_port/unidic-mecab-2.1.2.tar.gz" newHash=$(sha256sum build.rs | cut -d " " -f 1) substituteInPlace .cargo-checksum.json --replace-fail $oldHash $newHash @@ -98,28 +112,26 @@ rustPlatform.buildRustPackage rec { __darwinAllowLocalNetworking = true; - nativeBuildInputs = [ - binaryen - gzip - nodejs - rustc - rustc.llvmPackages.lld - wasm-bindgen-92 - wasm-pack - httplz - ]; + nativeBuildInputs = + [ + binaryen + gzip + nodejs + rustc + rustc.llvmPackages.lld + wasm-bindgen-92 + wasm-pack + httplz + ] + ++ lib.optionals stdenv.isDarwin [ + python3 + ]; # build wasm and js assets # based on "test-and-build" in https://github.com/CloudCannon/pagefind/blob/main/.github/workflows/release.yml preBuild = '' export HOME=$(mktemp -d) - # serve lindera-unidic on localhost - mkdir .lindera-http-plz - ln -s ${lindera-unidic-src} .lindera-http-plz/unidic-mecab-2.1.2.tar.gz - httplz --port 34567 -- .lindera-http-plz/ & - httplz_pid=$! - echo entering pagefind_web_js... ( cd pagefind_web_js @@ -147,17 +159,17 @@ rustPlatform.buildRustPackage rec { # the file is also fetched during checkPhase preInstall = '' - kill ${lib.optionalString stdenv.hostPlatform.isDarwin "-9"} $httplz_pid + kill ${lib.optionalString stdenv.hostPlatform.isDarwin "-9"} $(cat $TMPDIR/.httplz_pid) ''; buildFeatures = [ "extended" ]; - meta = with lib; { + meta = { description = "Generate low-bandwidth search index for your static website"; homepage = "https://pagefind.app/"; - license = licenses.mit; - maintainers = with maintainers; [ pbsds ]; - platforms = platforms.unix; + license = lib.licenses.mit; + maintainers = with lib.maintainers; [ pbsds ]; + platforms = lib.platforms.unix; mainProgram = "pagefind"; }; }