From b5e5cdafc4d0980c333db0afcafaf038be4e2eee Mon Sep 17 00:00:00 2001 From: Marc Scholten Date: Sun, 8 Sep 2024 20:19:30 -0700 Subject: [PATCH] Speed up 'nix build' by caching Generated.Types modules The Generated.Types only needs to be rebuild when the Application/Schema.sql has changed --- NixSupport/default.nix | 34 ++++++++++++++++++++++++++++++++-- flake-module.nix | 2 ++ 2 files changed, 34 insertions(+), 2 deletions(-) diff --git a/NixSupport/default.nix b/NixSupport/default.nix index 805a00004..473cb6ce2 100644 --- a/NixSupport/default.nix +++ b/NixSupport/default.nix @@ -13,6 +13,7 @@ , rtsFlags ? "" , appName ? "app" , optimizationLevel ? "2" +, filter }: let @@ -31,13 +32,43 @@ let jobsBinary = if optimized then "build/bin/RunJobsOptimized" else "build/bin/RunJobs"; + + odir = if optimized then "RunOptimizedProdServer" else "RunUnoptimizedProdServer"; + + schemaObjectFiles = + let + self = projectPath; + in + pkgs.stdenv.mkDerivation { + name = appName + "-schema"; + buildPhase = '' + mkdir -p build/Generated + build-generated-code + + export IHP=${ihp}/lib/IHP + ghc -O${if optimized then optimizationLevel else "0"} $(make print-ghc-options) --make build/Generated/Types.hs -odir build/${odir} -hidir build/${odir} + + cp -r build $out + ''; + src = filter { root = self; include = ["Application/Schema.sql" "Makefile"]; }; + nativeBuildInputs = + [ (ghc.ghcWithPackages (p: [ p.ihp-ide ])) # Needed for build-generated-code + ] + ; + dontInstall = true; + dontFixup = false; + }; in pkgs.stdenv.mkDerivation { name = appName; buildPhase = '' runHook preBuild - mkdir -p build + mkdir -p build/Generated build/${odir} + cp -r ${schemaObjectFiles}/${odir} build/ + cp -r ${schemaObjectFiles}/Generated build/ + + chmod -R +w build/${odir}/* # When npm install is executed by the project's makefile it will fail with: # @@ -111,7 +142,6 @@ in nativeBuildInputs = builtins.concatLists [ [ pkgs.makeWrapper pkgs.cacert # Needed for npm install to work from within the IHP build process - ghc.ihp-ide # Needed for build-generated-code ] (if includeDevTools then [(pkgs.postgresql_13.withPackages postgresExtensions)] else []) ]; diff --git a/flake-module.nix b/flake-module.nix index 2d6457577..9748e195d 100644 --- a/flake-module.nix +++ b/flake-module.nix @@ -148,6 +148,7 @@ ihpFlake: rtsFlags = cfg.rtsFlags; optimizationLevel = cfg.optimizationLevel; appName = cfg.appName; + filter = ihpFlake.inputs.nix-filter.lib; }; unoptimized-prod-server = import "${ihp}/NixSupport/default.nix" { @@ -162,6 +163,7 @@ ihpFlake: rtsFlags = cfg.rtsFlags; optimizationLevel = "0"; appName = cfg.appName; + filter = ihpFlake.inputs.nix-filter.lib; }; unoptimized-docker-image = pkgs.dockerTools.buildImage {