diff --git a/pkgs/servers/rmfakecloud/default.nix b/pkgs/servers/rmfakecloud/default.nix index db4b335e666f..4b84ca3e3567 100644 --- a/pkgs/servers/rmfakecloud/default.nix +++ b/pkgs/servers/rmfakecloud/default.nix @@ -1,4 +1,4 @@ -{ lib, fetchFromGitHub, buildGoModule }: +{ lib, fetchFromGitHub, buildGoModule, callPackage, enableWebui ? true }: buildGoModule rec { pname = "rmfakecloud"; @@ -13,8 +13,12 @@ buildGoModule rec { vendorSha256 = "sha256-NwDaPpjkQogXE37RGS3zEALlp3NuXP9RW//vbwM6y0A="; - postPatch = '' - # skip including the JS SPA, which is difficult to build + ui = callPackage ./webui.nix { inherit version src; }; + + postPatch = if enableWebui then '' + mkdir -p ui/build + cp -r ${ui}/* ui/build + '' else '' sed -i '/go:/d' ui/assets.go ''; diff --git a/pkgs/servers/rmfakecloud/webui.nix b/pkgs/servers/rmfakecloud/webui.nix new file mode 100644 index 000000000000..8b636baec115 --- /dev/null +++ b/pkgs/servers/rmfakecloud/webui.nix @@ -0,0 +1,37 @@ +{ version, src, stdenv, lib, fetchFromGitHub, fetchYarnDeps, fixup_yarn_lock, yarn, nodejs }: + +stdenv.mkDerivation rec { + inherit version src; + + pname = "rmfakecloud-webui"; + + yarnOfflineCache = fetchYarnDeps { + yarnLock = "${src}/ui/yarn.lock"; + sha256 = "sha256-lKA3W7gXT2Dnux+sIXCluG5HxkGQgHPnCjgV/a4pjY0="; + }; + + nativeBuildInputs = [ fixup_yarn_lock yarn nodejs ]; + + buildPhase = '' + export HOME=$(mktemp -d) + cd ui + fixup_yarn_lock yarn.lock + yarn config --offline set yarn-offline-mirror ${yarnOfflineCache} + yarn install --offline --frozen-lockfile --ignore-engines --ignore-scripts --no-progress + patchShebangs node_modules + export PATH=$PWD/node_modules/.bin:$PATH + ./node_modules/.bin/react-scripts build + mkdir -p $out + cd .. + ''; + + installPhase = '' + cp -r ui/build/* $out + ''; + + meta = with lib; { + description = "Only the webui files for rmfakecloud"; + homepage = "https://ddvk.github.io/rmfakecloud/"; + license = licenses.agpl3Only; + }; +}