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 }