nix: cache builds
1 files changed, 76 insertions, 48 deletions
diff --git a/default.nix b/default.nix
index ee058e59..940b8905 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 ]))
+ ];
+
+ 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 =
- 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
- ''
+ 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);
}
|