open-webui: add pyodide (#386756)

Changed files
+18 -3
pkgs
by-name
op
open-webui
+15 -1
pkgs/by-name/op/open-webui/package.nix
···
fetchFromGitHub,
python312,
nixosTests,
+
fetchurl,
}:
let
pname = "open-webui";
···
hash = "sha256-SFw5bCzMSBuzIzZmhA+ylXXkouZ+OSsMBfc7QG7OSLU=";
};
-
frontend = buildNpmPackage {
+
frontend = buildNpmPackage rec {
inherit pname version src;
+
# the backend for run-on-client-browser python execution
+
# must match lock file in open-webui
+
pyodideVersion = "0.27.2";
+
pyodide = fetchurl {
+
hash = "sha256-sZ47IxPiL1e12rmpH3Zv2v6L2+1tz/kIrT4uYbng+Ec=";
+
url = "https://github.com/pyodide/pyodide/releases/download/${pyodideVersion}/pyodide-${pyodideVersion}.tar.bz2";
+
};
+
npmDepsHash = "sha256-rEV68SizR7NyYsRzlndg/ulvr8BeiDq3MpiBmaCUn2M=";
# Disabling `pyodide:fetch` as it downloads packages during `buildPhase`
···
env.CYPRESS_INSTALL_BINARY = "0"; # disallow cypress from downloading binaries in sandbox
env.ONNXRUNTIME_NODE_INSTALL_CUDA = "skip";
env.NODE_OPTIONS = "--max-old-space-size=8192";
+
+
preBuild = ''
+
tar xf ${pyodide} -C static/
+
'';
installPhase = ''
runHook preInstall
···
inherit (nixosTests) open-webui;
};
updateScript = ./update.sh;
+
inherit frontend;
};
meta = {
+3 -2
pkgs/by-name/op/open-webui/update.sh
···
update-source-version open-webui "${version:1}" --file="$path"
-
# Fetch npm deps
+
# Fetch npm deps and pyodide
tmpdir=$(mktemp -d)
curl -O --output-dir $tmpdir "https://raw.githubusercontent.com/open-webui/open-webui/refs/tags/${version}/package-lock.json"
curl -O --output-dir $tmpdir "https://raw.githubusercontent.com/open-webui/open-webui/refs/tags/${version}/package.json"
pushd $tmpdir
npm_hash=$(prefetch-npm-deps package-lock.json)
sed -i 's#npmDepsHash = "[^"]*"#npmDepsHash = "'"$npm_hash"'"#' "$path"
+
pyodide_version=$(sed -rn 's/^.*pyodide.*\^([0-9.]*)\".*$/\1/p' package.json)
popd
+
update-source-version open-webui.frontend "${pyodide_version}" --file="$path" --version-key=pyodideVersion --source-key=pyodide
rm -rf $tmpdir
-