tvl-depot/users/tazjin/predlozhnik/default.nix
Vincent Ambo d795a05c07 feat(tazjin/predlozhnik): bootstrap yew/wasm-based web UI
this commit is mostly to figure out hwo to build a yew application in
depot using the wasm toolchain. it's a bit finnicky, but could be a
lot worse.

Change-Id: I7804a774f1686a1f308ae1a3f549cd0ae7b5dbeb
Reviewed-on: https://cl.tvl.fyi/c/depot/+/5980
Tested-by: BuildkiteCI
Reviewed-by: tazjin <tazjin@tvl.su>
2022-07-27 21:54:26 +00:00

52 lines
1.3 KiB
Nix

{ lib, pkgs, ... }:
let
wasmRust = pkgs.rust-bin.stable.latest.default.override {
targets = [ "wasm32-unknown-unknown" ];
};
cargoToml = with builtins; fromTOML (readFile ./Cargo.toml);
wasmBindgenMatch =
cargoToml.dependencies.wasm-bindgen == "= ${pkgs.wasm-bindgen-cli.version}";
assertWasmBindgen = assert (lib.assertMsg wasmBindgenMatch ''
Due to instability in the Rust WASM ecosystem, the trunk build
tool enforces that the Cargo-dependency version of `wasm-bindgen`
MUST match the version of the CLI supplied in the environment.
This can get out of sync when nixpkgs is updated. To resolve it,
wasm-bindgen must be bumped in the Cargo.toml file and cargo needs
to be run to resolve the dependencies.
Versions of `wasm-bindgen` in Cargo.toml:
Expected: '= ${pkgs.wasm-bindgen-cli.version}'
Actual: '${cargoToml.dependencies.wasm-bindgen}'
''); pkgs.wasm-bindgen-cli;
deps = with pkgs; [
binaryen
sass
wasmRust
trunk
assertWasmBindgen
];
in
pkgs.rustPlatform.buildRustPackage rec {
pname = "predlozhnik";
version = "canon";
src = lib.cleanSource ./.;
cargoLock.lockFile = ./Cargo.lock;
buildPhase = ''
export PATH=${lib.makeBinPath deps}:$PATH
mkdir home
export HOME=$PWD/.home
env
trunk build --release -d $out
'';
dontInstall = true;
}