Files
server/extra/admin-api/outputs.nix
2026-01-26 10:20:52 +01:00

175 lines
6.3 KiB
Nix

{
self,
nixpkgs,
flake-utils,
}:
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;
makeNupkg =
{
name,
nugetDeps ? null,
projectReferences ? [ ],
projectFile ? "${name}/${name}.csproj",
runtimeId ? null,
useAppHost ? null,
packNupkg ? true,
}@args:
pkgs.buildDotnetModule rec {
inherit
projectReferences
nugetDeps
projectFile
runtimeId
useAppHost
;
pname = "${name}";
version = "1.0.0-" + rVersion;
dotnetPackFlags = [
"--include-symbols"
"--include-source"
"--version-suffix ${rVersion}"
];
# dotnetFlags = [ "-v:diag" ];
dotnet-sdk = pkgs.dotnet-sdk_10;
dotnet-runtime = pkgs.dotnet-aspnetcore_10;
src = pkgs.lib.cleanSource ./.;
packNupkg = true;
meta = with pkgs.lib; {
description = "Spacebar Server, Typescript Edition (C# extensions)";
homepage = "https://github.com/spacebarchat/server";
license = licenses.agpl3Plus;
maintainers = with maintainers; [ RorySys ];
};
};
in
{
packages =
let
proj = self.packages.${system};
in
{
# Interop
Spacebar-Interop-Cdn-Abstractions = makeNupkg {
name = "Spacebar.Interop.Cdn.Abstractions";
projectFile = "Interop/Spacebar.Interop.Cdn.Abstractions/Spacebar.Interop.Cdn.Abstractions.csproj";
nugetDeps = Interop/Spacebar.Interop.Cdn.Abstractions/deps.json;
};
Spacebar-Interop-Replication-Abstractions = makeNupkg {
name = "Spacebar.Interop.Replication.Abstractions";
projectFile = "Interop/Spacebar.Interop.Replication.Abstractions/Spacebar.Interop.Replication.Abstractions.csproj";
};
Spacebar-Interop-Replication-RabbitMq = makeNupkg {
name = "Spacebar.Interop.Replication.RabbitMq";
projectFile = "Interop/Spacebar.Interop.Replication.RabbitMq/Spacebar.Interop.Replication.RabbitMq.csproj";
nugetDeps = Interop/Spacebar.Interop.Replication.RabbitMq/deps.json;
projectReferences = [ proj.Spacebar-Interop-Replication-Abstractions ];
};
Spacebar-Interop-Replication-UnixSocket = makeNupkg {
name = "Spacebar.Interop.Replication.UnixSocket";
projectFile = "Interop/Spacebar.Interop.Replication.UnixSocket/Spacebar.Interop.Replication.UnixSocket.csproj";
nugetDeps = Interop/Spacebar.Interop.Replication.UnixSocket/deps.json;
projectReferences = [ proj.Spacebar-Interop-Replication-Abstractions ];
};
# Models
Spacebar-Models-AdminApi = makeNupkg {
name = "Spacebar.Models.AdminApi";
projectFile = "Models/Spacebar.Models.AdminApi/Spacebar.Models.AdminApi.csproj";
};
Spacebar-Models-Config = makeNupkg {
name = "Spacebar.Models.Config";
projectFile = "Models/Spacebar.Models.Config/Spacebar.Models.Config.csproj";
};
Spacebar-Models-Db = makeNupkg {
name = "Spacebar.Models.Db";
projectFile = "Models/Spacebar.Models.Db/Spacebar.Models.Db.csproj";
nugetDeps = Models/Spacebar.Models.Db/deps.json;
};
# Utilities
Spacebar-CleanSettingsRows = makeNupkg {
name = "Spacebar.CleanSettingsRows";
projectFile = "Utilities/Spacebar.CleanSettingsRows/Spacebar.CleanSettingsRows.csproj";
nugetDeps = Utilities/Spacebar.CleanSettingsRows/deps.json;
packNupkg = false;
projectReferences = [ proj.Spacebar-Models-Db ];
};
Spacebar-Cdn-Fsck = makeNupkg {
name = "Spacebar.Cdn.Fsck";
projectFile = "Utilities/Spacebar.Cdn.Fsck/Spacebar.Cdn.Fsck.csproj";
nugetDeps = Utilities/Spacebar.Cdn.Fsck/deps.json;
packNupkg = false;
projectReferences = [ proj.Spacebar-Models-Db proj.Spacebar-Interop-Cdn-Abstractions ];
};
# Main projects
Spacebar-AdminApi = makeNupkg {
name = "Spacebar.AdminApi";
nugetDeps = Spacebar.AdminApi/deps.json;
packNupkg = false;
projectReferences = [
proj.Spacebar-Models-AdminApi
proj.Spacebar-Models-Db
];
};
Spacebar-Cdn = makeNupkg {
name = "Spacebar.Cdn";
nugetDeps = Spacebar.Cdn/deps.json;
packNupkg = false;
projectReferences = [
proj.Spacebar-Models-Db
];
};
# Spacebar-AdminApi-TestClient = makeNupkg {
# name = "Spacebar.AdminApi.TestClient";
# projectFile = "Utilities/Spacebar.AdminApi.TestClient/Spacebar.AdminApi.TestClient.csproj";
# nugetDeps = Utilities/Spacebar.AdminApi.TestClient/deps.json;
# projectReferences = [
# proj.Spacebar-AdminApi-Models
# ];
## runtimeId = "browser-wasm";
## useAppHost = false;
# };
};
containers.docker.admin-api = pkgs.dockerTools.buildLayeredImage {
name = "spacebar-server-ts-admin-api";
tag = builtins.replaceStrings [ "+" ] [ "_" ] self.packages.${system}.Spacebar-AdminApi.version;
contents = [ self.packages.${system}.Spacebar-AdminApi ];
config = {
Cmd = [ "${self.outputs.packages.${system}.Spacebar-AdminApi}/bin/Spacebar.AdminApi" ];
Expose = [ "3001" ];
};
};
}
)
// {
# nixosModules.default = import ./nix/modules/default self;
checks =
let
pkgs = import nixpkgs { system = "x86_64-linux"; };
in
pkgs.lib.recursiveUpdate (pkgs.lib.attrsets.unionOfDisjoint { } self.packages) {
x86_64-linux = {
# spacebar-server-tests = self.packages.x86_64-linux.default.passthru.tests;
docker-admin-api = self.containers.x86_64-linux.docker.admin-api;
};
};
}