nix: single-source frontend npmDepsHash into frontend/npm-deps-hash
The hash was hardcoded independently in nix/packages/frontend.nix, nix/packages/swarm-ui.nix, and nix/checks.nix's inline swarm-ui-typecheck derivation, all three building from the one frontend/package-lock.json. Nothing enforced the three copies staying in sync, and on a recent PR only some of them got updated when the lockfile changed. Moved the hash into a new file, frontend/npm-deps-hash (plain text, no trailing newline, co-located with package-lock.json so it reads as the lockfile's other half), and all three derivations now builtins.readFile it instead of hardcoding their own copy. A lockfile change now only needs prefetch-npm-deps + one file overwrite; the other two derivations pick it up automatically. Verified: nix eval against all three derivations' npmDepsHash attribute (eval-only, not a build) confirms all three resolve to the same value read from the one file.
This commit is contained in:
parent
85ef5e5fbe
commit
2a67cc0e69
4 changed files with 25 additions and 18 deletions
1
frontend/npm-deps-hash
Normal file
1
frontend/npm-deps-hash
Normal file
|
|
@ -0,0 +1 @@
|
|||
sha256-8mYI9b1nuQ8YNFkW/ezJwO5Qw6NJTDG+kspYozs/5cI=
|
||||
|
|
@ -149,10 +149,12 @@ in
|
|||
version = "0.0.0";
|
||||
src = ../frontend;
|
||||
|
||||
# Same lockfile as `frontend`/`swarm-ui` above — recompute in
|
||||
# lockstep with those two whenever `frontend/package-lock.json`
|
||||
# changes (`prefetch-npm-deps frontend/package-lock.json`).
|
||||
npmDepsHash = "sha256-8mYI9b1nuQ8YNFkW/ezJwO5Qw6NJTDG+kspYozs/5cI=";
|
||||
# Same lockfile as `frontend`/`swarm-ui` above — reads the same
|
||||
# `frontend/npm-deps-hash` file both of those do, so this stays in
|
||||
# lockstep automatically. Regenerate that file with
|
||||
# `prefetch-npm-deps frontend/package-lock.json` when the lockfile
|
||||
# changes.
|
||||
npmDepsHash = builtins.readFile ../frontend/npm-deps-hash;
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
|
|
|||
|
|
@ -35,12 +35,15 @@ buildNpmPackage {
|
|||
version = "0.0.0";
|
||||
src = ../../frontend;
|
||||
|
||||
# Computed from `frontend/package-lock.json` via
|
||||
# prefetch-npm-deps frontend/package-lock.json
|
||||
# Update whenever the lockfile changes. Recompute locally with the
|
||||
# same command (`pkgs.prefetch-npm-deps`), or let the build fail
|
||||
# and copy the actual hash from the error message.
|
||||
npmDepsHash = "sha256-8mYI9b1nuQ8YNFkW/ezJwO5Qw6NJTDG+kspYozs/5cI=";
|
||||
# Read from `../../frontend/npm-deps-hash`, the single source of
|
||||
# truth `./swarm-ui.nix` and `../checks.nix`'s `swarm-ui-typecheck`
|
||||
# also read — all three build from the one `frontend/package-lock.json`,
|
||||
# so one file keeps them from drifting independently (this used to be
|
||||
# a hardcoded copy per derivation, and only some of the three got
|
||||
# updated the one time the lockfile changed). Regenerate with
|
||||
# `prefetch-npm-deps frontend/package-lock.json` and overwrite the
|
||||
# file whenever the lockfile changes.
|
||||
npmDepsHash = builtins.readFile ../../frontend/npm-deps-hash;
|
||||
|
||||
# `npm run build` recurses into all workspaces (`--workspaces
|
||||
# --if-present`). The workspaces' build scripts each run their own
|
||||
|
|
|
|||
|
|
@ -19,10 +19,12 @@
|
|||
# against authelia is figured out) has something to point at.
|
||||
#
|
||||
# Shares `frontend/package-lock.json` with `./frontend.nix` (same repo,
|
||||
# same npm workspace root) — `npmDepsHash` must be updated in lockstep
|
||||
# with that file's whenever the lockfile changes, since both hash the
|
||||
# same file. Scoped to build only the `swarm-ui` workspace (not the
|
||||
# whole `npm run build --workspaces` frontend.nix runs) via an explicit
|
||||
# same npm workspace root) — `npmDepsHash` is read from
|
||||
# `../../frontend/npm-deps-hash`, the same file `./frontend.nix` and
|
||||
# `../checks.nix`'s `swarm-ui-typecheck` read, so all three stay in
|
||||
# lockstep automatically instead of needing 3 separate hand-edits.
|
||||
# Scoped to build only the `swarm-ui` workspace (not the whole
|
||||
# `npm run build --workspaces` frontend.nix runs) via an explicit
|
||||
# `npm run build --workspace=…` buildPhase, so a dashboard/agent-only
|
||||
# change doesn't need to rebuild (or re-review the output of) this
|
||||
# derivation.
|
||||
|
|
@ -32,10 +34,9 @@ buildNpmPackage {
|
|||
version = "0.0.0";
|
||||
src = ../../frontend;
|
||||
|
||||
# Recompute with `prefetch-npm-deps frontend/package-lock.json`
|
||||
# whenever the lockfile changes — same value as `./frontend.nix`'s
|
||||
# `npmDepsHash`, both hash the one shared lockfile.
|
||||
npmDepsHash = "sha256-8mYI9b1nuQ8YNFkW/ezJwO5Qw6NJTDG+kspYozs/5cI=";
|
||||
# See `./frontend.nix`'s comment on the same line — one shared file,
|
||||
# regenerate with `prefetch-npm-deps frontend/package-lock.json`.
|
||||
npmDepsHash = builtins.readFile ../../frontend/npm-deps-hash;
|
||||
|
||||
buildPhase = ''
|
||||
runHook preBuild
|
||||
|
|
|
|||
Loading…
Reference in a new issue