tricu

A lazy functional language based on Tree Calculus
Log | Files | Refs | README | LICENSE

release.nix (2594B)


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