tricu

An interpreted language for exploring Tree Calculus
Log | Files | Refs | README | LICENSE

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 }