Consolidate per-package package-lock.json files into a single root-level workspace lockfile. Update all consumers: - Nix: shared src/npmDeps/npmDepsHash in lib.nix; devshell hook stamps package.json paths then runs npm ci from root; individual .nix files use mkNpmPassthru attrs instead of per-package fetchNpmDeps. - Python CLI: new _workspace_root() helper so _tui_need_npm_install, _make_tui_argv, _build_web_ui resolve lockfile/node_modules from the workspace root. - Desktop: replace --force-build/mtime heuristic with content-hash build stamp (_compute_desktop_content_hash via pathspec). Remove --force-build flag. - Dockerfile: single root npm install; no per-directory lockfile copies. - CI: nix-lockfile-fix and osv-scanner reference root package-lock.json; apps/dashboard → apps/desktop. - Tests: new test_tui_npm_install.py; desktop stamp tests in test_gui_command.py; updated assertions in test_cmd_update.py, test_web_ui_build.py, test_dockerfile_pid1_reaping.py. - Docs: remove --force-build from desktop flag table. Deleted: apps/desktop/package-lock.json, ui-tui/package-lock.json, ui-tui/packages/hermes-ink/package-lock.json, web/package-lock.json.
35 lines
1.1 KiB
Nix
35 lines
1.1 KiB
Nix
# nix/web.nix — Hermes Web Dashboard (Vite/React) frontend build
|
|
{ pkgs, hermesNpmLib, ... }:
|
|
let
|
|
npm = hermesNpmLib.mkNpmPassthru { folder = "web"; attr = "web"; pname = "hermes-web"; };
|
|
|
|
packageJson = builtins.fromJSON (builtins.readFile (npm.src + "/web/package.json"));
|
|
version = packageJson.version;
|
|
in
|
|
pkgs.buildNpmPackage (npm // {
|
|
pname = "hermes-web";
|
|
inherit version;
|
|
|
|
doCheck = false;
|
|
|
|
buildPhase = ''
|
|
# Build from web/ so vite.config.ts and tsconfig resolve correctly.
|
|
# The workspace root's node_modules/ is at ../node_modules/.
|
|
cd web
|
|
node ../node_modules/typescript/bin/tsc -b
|
|
# outDir in vite.config.ts points to ../hermes_cli/web_dist for the
|
|
# monorepo layout. Override with --outDir dist for the nix build.
|
|
node ../node_modules/vite/bin/vite.js build --outDir dist
|
|
|
|
# Return to source root so installPhase paths are correct.
|
|
cd ..
|
|
'';
|
|
|
|
installPhase = ''
|
|
runHook preInstall
|
|
# vite writes to web/dist/ (we cd'd there, overrode outDir, then cd'd back).
|
|
cp -r web/dist $out
|
|
runHook postInstall
|
|
'';
|
|
})
|