refactor(web/tvixbolt): buildRustPackage -> crate2nix
With the recent changes to crate2nix and buildRustCrate in nixpkgs it is now possible to build tvixbolt via crate2nix like we do for other tvix crates. We can reuse a lot of the customizations done in //tvix in tvixbolt to avoid repeating ourselves. A script for serving tvixbolt locally for testing purposes is also available now through the .serve attribute of tvixbolt. This change supersedes https://cl.tvl.fyi/c/depot/+/11821. Change-Id: I4864df8b75aec73cf5fee2428924ed4cfbb32902 Reviewed-on: https://cl.tvl.fyi/c/depot/+/11952 Tested-by: BuildkiteCI Autosubmit: Ilan Joselevich <personal@ilanjoselevich.com> Reviewed-by: flokli <flokli@flokli.de>
This commit is contained in:
parent
6a7069904e
commit
7ca32d9f0b
9 changed files with 4595 additions and 122 deletions
|
|
@ -1,74 +1,30 @@
|
|||
{ depot, lib, pkgs, ... }:
|
||||
|
||||
{ pkgs, lib, depot, ... }:
|
||||
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 = [
|
||||
pkgs.binaryen
|
||||
pkgs.sass
|
||||
pkgs.trunk
|
||||
|
||||
wasmRust
|
||||
assertWasmBindgen
|
||||
];
|
||||
|
||||
# Cargo.toml needs to be patched with the /nix/store source path of
|
||||
# tvix-eval.
|
||||
cargoTomlPatch = pkgs.writeText "tvix-eval-src.patch" ''
|
||||
diff --git a/Cargo.toml b/Cargo.toml
|
||||
index 75006bec18..6ca244bbb2 100644
|
||||
--- a/Cargo.toml
|
||||
+++ b/Cargo.toml
|
||||
@@ -16,7 +16,7 @@ rnix = "0.11.0"
|
||||
wasm-bindgen = "= 0.2.83"
|
||||
|
||||
[dependencies.tvix-eval]
|
||||
-path = "../../tvix/eval"
|
||||
+path = "${../../tvix/eval}"
|
||||
default-features = false
|
||||
|
||||
[dependencies.serde]
|
||||
'';
|
||||
pkgsCross = pkgs.pkgsCross.wasm32-unknown-none;
|
||||
in
|
||||
pkgs.rustPlatform.buildRustPackage rec {
|
||||
pname = "tvixbolt";
|
||||
version = "canon";
|
||||
src = lib.cleanSource ./.;
|
||||
(pkgsCross.callPackage ./Cargo.nix {
|
||||
defaultCrateOverrides = (depot.tvix.utils.defaultCrateOverridesForPkgs pkgsCross) // {
|
||||
tvixbolt = prev: {
|
||||
src = depot.tvix.utils.filterRustCrateSrc { root = prev.src.origSrc; };
|
||||
};
|
||||
};
|
||||
}).rootCrate.build.overrideAttrs (oldAttrs: {
|
||||
installPhase = ''
|
||||
${lib.getExe pkgs.wasm-bindgen-cli} \
|
||||
--target web \
|
||||
--out-dir $out \
|
||||
--out-name ${oldAttrs.crateName} \
|
||||
--no-typescript \
|
||||
target/lib/${oldAttrs.crateName}-${oldAttrs.metadata}.wasm
|
||||
|
||||
cargoLock.lockFile = ./Cargo.lock;
|
||||
|
||||
patches = [
|
||||
cargoTomlPatch
|
||||
];
|
||||
|
||||
buildPhase = ''
|
||||
export PATH=${lib.makeBinPath deps}:$PATH
|
||||
mkdir home
|
||||
export HOME=$PWD/home
|
||||
trunk build --release -d $out
|
||||
mv src/*.{html,css} $out
|
||||
'';
|
||||
|
||||
dontInstall = true;
|
||||
}
|
||||
passthru.serve = pkgs.writeShellScriptBin "tvixbolt-serve" ''
|
||||
${lib.getExe pkgs.simple-http-server} \
|
||||
--index \
|
||||
--nocache \
|
||||
"$@" \
|
||||
${depot.web.tvixbolt}
|
||||
'';
|
||||
})
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue