mirror of
https://github.com/spacebarchat/server.git
synced 2026-03-29 14:09:52 +00:00
164 lines
5.8 KiB
Nix
164 lines
5.8 KiB
Nix
{
|
|
description = "Spacebar server, written in Typescript.";
|
|
|
|
inputs = {
|
|
nixpkgs.url = "github:NixOS/nixpkgs/nixos-unstable";
|
|
flake-utils.url = "github:numtide/flake-utils";
|
|
};
|
|
|
|
outputs =
|
|
{
|
|
self,
|
|
nixpkgs,
|
|
flake-utils,
|
|
}:
|
|
nixpkgs.lib.recursiveUpdate
|
|
(
|
|
let
|
|
rVersion =
|
|
let
|
|
rev = self.sourceInfo.shortRev or self.sourceInfo.dirtyShortRev;
|
|
date = builtins.substring 0 8 self.sourceInfo.lastModifiedDate;
|
|
time = builtins.substring 8 6 self.sourceInfo.lastModifiedDate;
|
|
in
|
|
"preview.${date}-${time}"; # +${rev}";
|
|
in
|
|
flake-utils.lib.eachSystem flake-utils.lib.allSystems (
|
|
system:
|
|
let
|
|
pkgs = import nixpkgs {
|
|
inherit system;
|
|
};
|
|
lib = pkgs.lib;
|
|
in
|
|
{
|
|
packages = {
|
|
default = pkgs.buildNpmPackage {
|
|
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 ]; # lol.
|
|
};
|
|
|
|
src = ./.;
|
|
npmDeps = pkgs.importNpmLock { npmRoot = ./.; };
|
|
npmConfigHook = pkgs.importNpmLock.npmConfigHook;
|
|
|
|
npmBuildScript = "build:src";
|
|
makeCacheWritable = true;
|
|
nativeBuildInputs = with pkgs; [
|
|
(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
|
|
''
|
|
runHook preInstall
|
|
# set -x
|
|
|
|
# remove packages not needed for production, or at least try to...
|
|
npm prune --omit dev --no-save $npmInstallFlags "''${npmInstallFlagsArray[@]}" $npmFlags "''${npmFlagsArray[@]}"
|
|
${./nix/trimNodeModules.sh}
|
|
|
|
# Copy outputs
|
|
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
|
|
|
|
# set +x
|
|
runHook postInstall
|
|
'';
|
|
|
|
passthru.tests = pkgs.testers.runNixOSTest (import ./nix/tests/test-bundle-starts.nix self);
|
|
};
|
|
};
|
|
|
|
containers = {
|
|
docker = {
|
|
default = pkgs.dockerTools.buildLayeredImage {
|
|
name = "spacebar-server-ts";
|
|
tag = builtins.replaceStrings [ "+" ] [ "_" ] self.packages.${system}.default.version;
|
|
contents = [ self.packages.${system}.default ];
|
|
config = {
|
|
Cmd = [ "${self.outputs.packages.${system}.default}/bin/start-bundle" ];
|
|
Expose = [ "3001" ];
|
|
};
|
|
};
|
|
}
|
|
// lib.genAttrs [ "api" "cdn" "gateway" ] (
|
|
mod:
|
|
pkgs.dockerTools.buildLayeredImage {
|
|
name = "spacebar-server-ts-${mod}";
|
|
tag = builtins.replaceStrings [ "+" ] [ "_" ] self.packages.${system}.default.version;
|
|
contents = [
|
|
self.packages.${system}.default
|
|
];
|
|
config = {
|
|
Cmd = [ "${self.outputs.packages.${system}.default}/bin/start-${mod}" ];
|
|
Expose = [ "3001" ];
|
|
};
|
|
|
|
}
|
|
);
|
|
};
|
|
|
|
devShells.default = pkgs.mkShell {
|
|
buildInputs = with pkgs; [
|
|
nodejs_24
|
|
nodePackages.typescript
|
|
nodePackages.patch-package
|
|
nodePackages.prettier
|
|
];
|
|
};
|
|
}
|
|
)
|
|
// {
|
|
nixosModules.default = import ./nix/modules/default self;
|
|
checks =
|
|
let
|
|
pkgs = import nixpkgs { system = "x86_64-linux"; };
|
|
lib = pkgs.lib;
|
|
in
|
|
lib.recursiveUpdate (lib.attrsets.unionOfDisjoint { } self.packages) {
|
|
x86_64-linux = {
|
|
spacebar-server-tests = self.packages.x86_64-linux.default.passthru.tests;
|
|
}
|
|
// (lib.listToAttrs (
|
|
lib.mapAttrsToList (name: container: {
|
|
name = "docker-${name}";
|
|
value = container;
|
|
}) self.containers.x86_64-linux.docker
|
|
));
|
|
};
|
|
}
|
|
)
|
|
(
|
|
import ./extra/admin-api/outputs.nix {
|
|
inherit self nixpkgs flake-utils;
|
|
}
|
|
);
|
|
}
|