From b17f3a3832a7bb53cb27643d75011cb56532e7a0 Mon Sep 17 00:00:00 2001 From: Rory& Date: Fri, 13 Mar 2026 02:00:13 +0100 Subject: [PATCH] nix: cache builds --- default.nix | 124 ++++++++++++++++++++++++++++++++-------------------- 1 file changed, 76 insertions(+), 48 deletions(-) diff --git a/default.nix b/default.nix index ee058e59c..940b89051 100644 --- a/default.nix +++ b/default.nix @@ -22,51 +22,49 @@ let ) ); }; -in -pkgs.stdenv.mkDerivation { - pname = "spacebar-server-ts"; - nodejs = pkgs.nodejs_24; - version = "1.0.0-" + rVersion; - meta = with lib; { - description = "Spacebar server, a FOSS reimplementation of the Discord backend."; - homepage = "https://github.com/spacebarchat/server"; - license = licenses.agpl3Plus; - platforms = platforms.all; - mainProgram = "start-bundle"; - maintainers = with maintainers; [ RorySys ]; - }; + revsFile = pkgs.writeText "spacebar-server-rev.json" ( + builtins.toJSON { + rev = self.sourceInfo.rev or self.sourceInfo.dirtyRev; + shortRev = self.sourceInfo.shortRev or self.sourceInfo.dirtyShortRev; + lastModified = self.sourceInfo.lastModified; + } + ); - src = filteredSrc; - dontStrip = true; + srcHash = builtins.substring 11 32 (toString filteredSrc); + unwrapped = pkgs.stdenv.mkDerivation { + pname = "spacebar-server-ts-unwrapped"; + nodejs = pkgs.nodejs_24; + version = "1.0.0-" + srcHash; - nativeBuildInputs = with pkgs; [ - nodejs - makeWrapper - (pkgs.python3.withPackages (ps: with ps; [ setuptools ])) - ]; + meta = with lib; { + description = "Spacebar server, a FOSS reimplementation of the Discord backend."; + homepage = "https://github.com/spacebarchat/server"; + license = licenses.agpl3Plus; + platforms = platforms.all; + mainProgram = "start-bundle"; + maintainers = with maintainers; [ RorySys ]; + }; - configurePhase = '' - cp -r --no-preserve=ownership,timestamps ${pkgs.callPackage ./node-modules.nix { }} node_modules - chown $USER:$GROUP node_modules -R - chmod +w node_modules -R - ''; + src = filteredSrc; + dontStrip = true; - buildPhase = '' - npm run build:tsgo - ''; + nativeBuildInputs = with pkgs; [ + nodejs + (pkgs.python3.withPackages (ps: with ps; [ setuptools ])) + ]; - installPhase = - let - revsFile = pkgs.writeText "spacebar-server-rev.json" ( - builtins.toJSON { - rev = self.sourceInfo.rev or self.sourceInfo.dirtyRev; - shortRev = self.sourceInfo.shortRev or self.sourceInfo.dirtyShortRev; - lastModified = self.sourceInfo.lastModified; - } - ); - in - '' + configurePhase = '' + cp -r --no-preserve=ownership,timestamps ${pkgs.callPackage ./node-modules.nix { }} node_modules + chown $USER:$GROUP node_modules -R + chmod +w node_modules -R + ''; + + buildPhase = '' + npm run build:tsgo + ''; + + installPhase = '' runHook preInstall # set -x @@ -80,19 +78,49 @@ pkgs.stdenv.mkDerivation { echo "Installing package into $out" mkdir -p $out cp -r assets dist node_modules package.json $out/ - cp ${revsFile} $out/.rev - - # Create wrappers for start scripts - echo "Creating wrappers for start scripts" - for i in dist/**/start.js - do - makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/$i - done - makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/apply-migrations --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/dist/apply-migrations.js # set +x runHook postInstall ''; + passthru.tests = pkgs.testers.runNixOSTest (import ./nix/tests/test-bundle-starts.nix self); + }; +in +pkgs.stdenv.mkDerivation { + pname = "spacebar-server-ts"; + nodejs = unwrapped.nodejs; + version = "1.0.0-" + rVersion; + meta = unwrapped.meta; + + nativeBuildInputs = with pkgs; [ + makeWrapper + ]; + + # this isnt a real builder, we dont need these at all + dontUnpack = true; + dontBuild = true; + dontPatch = true; + dontConfigure = true; + dontStrip = true; + dontFixup = true; + + installPhase = '' + # Copy outputs + echo "Installing package into $out" + mkdir -p $out + cp -r --no-preserve=ownership,timestamps ${unwrapped}/. $out/ + + # add version info + cp ${revsFile} $out/.rev + + # Create wrappers for start scripts + echo "Creating wrappers for start scripts" + for i in dist/**/start.js + do + makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/start-`dirname ''${i/dist\//}` --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/$i + done + makeWrapper ${pkgs.nodejs_24}/bin/node $out/bin/apply-migrations --prefix NODE_PATH : $out/node_modules --add-flags --enable-source-maps --add-flags $out/dist/apply-migrations.js + ''; + passthru.tests = pkgs.testers.runNixOSTest (import ./nix/tests/test-bundle-starts.nix self); }