Newer
Older
percord / extra / admin-api / outputs.nix
@Rory& Rory& on 17 Dec 3 KB More flake checks
{
  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
      {
        Spacebar-Db = makeNupkg {
          name = "Spacebar.Db";
          nugetDeps = Spacebar.Db/deps.json;
        };
        Spacebar-AdminApi-Models = makeNupkg {
          name = "Spacebar.AdminApi.Models";
        };
        Spacebar-ConfigModel = makeNupkg {
          name = "Spacebar.ConfigModel";
        };
        Spacebar-CleanSettingsRows = makeNupkg {
          name = "Spacebar.CleanSettingsRows";
          nugetDeps = Spacebar.CleanSettingsRows/deps.json;
          packNupkg = false;
          projectReferences = [ proj.Spacebar-Db ];
        };
        Spacebar-AdminApi = makeNupkg {
          name = "Spacebar.AdminApi";
          nugetDeps = Spacebar.AdminApi/deps.json;
          packNupkg = false;
          projectReferences = [
            proj.Spacebar-AdminApi-Models
            proj.Spacebar-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.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.admin-api;
      };
    };
}