release.nix (2726B)
1 { pkgs, haskellRuntime, zigRuntime }: 2 let 3 siteSource = pkgs.lib.cleanSourceWith { 4 src = ./.; 5 filter = path: type: 6 let 7 relative = pkgs.lib.removePrefix "${toString ./.}/" path; 8 top = builtins.head (pkgs.lib.splitString "/" relative); 9 in builtins.elem top [ 10 "src" "dist" "index.html" "style.css" "catalogue.json" 11 "images" "compiler.json" "packages.json" "environments.json" "tsconfig.json" 12 ]; 13 }; 14 artwork = import ./artwork.nix { inherit pkgs; }; 15 dependencies = pkgs.runCommand "arboricx-site-deps" { 16 nativeBuildInputs = [ pkgs.python3 pkgs.makeWrapper ]; 17 } '' 18 mkdir -p $out/share 19 python3 ${./release.py} \ 20 --catalogue ${./catalogue.json} --compiler ${./compiler.json} \ 21 --index ${./packages.json} --environments ${./environments.json} \ 22 --bundles ${./bundles} --output $out/share/arboricx-site-deps 23 cp ${./seed.py} $out/share/arboricx-site-deps/seed.py 24 makeWrapper ${pkgs.python3}/bin/python3 $out/bin/arboricx-seed-site \ 25 --add-flags "$out/share/arboricx-site-deps/seed.py --deps $out/share/arboricx-site-deps" 26 ''; 27 site = pkgs.runCommand "arboricx-site" { 28 nativeBuildInputs = [ pkgs.typescript pkgs.python3 pkgs.esbuild ]; 29 # Retain a matching dependency pack for every retained site release/rollback. 30 passthru.dependencies = dependencies; 31 } '' 32 cd ${siteSource} 33 tsc -p tsconfig.json --outDir "$TMPDIR/dist" 34 diff -ru dist "$TMPDIR/dist" 35 mkdir -p $out 36 cp index.html style.css catalogue.json compiler.json packages.json environments.json $out/ 37 cp -r images $out/images 38 for name in preview.png favicon.png apple-touch-icon.png; do 39 cmp images/$name ${artwork}/$name 40 done 41 cp -r "$TMPDIR/dist" $out/dist 42 # JS evaluator drivers/checkpoints are conformance tools, not a site backend. 43 rm -r $out/dist/conformance 44 mkdir -p $out/runtime/zig 45 cp ${zigRuntime}/lib/arboricx.wasm $out/runtime/zig/ 46 cp ${../wasm/runtime.mjs} $out/runtime/zig/runtime.mjs 47 cp ${../wasm/site-session.mjs} $out/runtime/zig/site-session.mjs 48 mkdir -p $out/runtime/haskell 49 cp ${haskellRuntime}/{client.mjs,worker.mjs,bridge.mjs,pins.mjs,reactor.wasm} $out/runtime/haskell/ 50 cp -r ${haskellRuntime}/{shim,data,site} $out/runtime/haskell/ 51 chmod -R u+w $out 52 python3 ${./reference.py} --root ${../..} --output $out 53 python3 ${./bundle-assets.py} $out ${./test/probe-api.mjs} 54 python3 ${./asset-release.py} $out 55 # Keep the dependency pack in this output's Nix closure, not its webroot. 56 mkdir -p $out/nix-support 57 echo ${dependencies} > $out/nix-support/site-dependencies 58 ''; 59 in { 60 arboricxSite = site; 61 arboricxSiteDeps = dependencies; 62 }