diff --git a/extra/admin-api/Spacebar.Cdn.Worker/Program.cs b/extra/admin-api/Spacebar.Cdn.Worker/Program.cs index fc3aaf932..c75151b50 100644 --- a/extra/admin-api/Spacebar.Cdn.Worker/Program.cs +++ b/extra/admin-api/Spacebar.Cdn.Worker/Program.cs @@ -5,6 +5,7 @@ using ArcaneLibs; using ImageMagick; using Spacebar.AdminApi.TestClient.Services.Helpers; using Spacebar.Cdn.Worker; +using Spacebar.Interop.Cdn.Abstractions; var builder = WebApplication.CreateBuilder(args); @@ -56,6 +57,9 @@ MagickNET.Initialize(); // builder.WebHost.ConfigureKestrel(opts => opts.ListenUnixSocket(Environment.GetEnvironmentVariable("SOCKET_PATH")!)); +builder.Services.AddSingleton(new FilesystemFileSource(Environment.GetEnvironmentVariable("STORAGE_PATH") ?? throw new InvalidOperationException("STORAGE_PATH not set!"))); +// builder.Services.AddSingleton(); + builder.Services.AddControllers(); var app = builder.Build(); app.MapControllers(); diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.AnyCPU.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.AnyCPU.json new file mode 100644 index 000000000..e9ba726cd --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.AnyCPU.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q16-HDRI-AnyCPU", + "version": "14.11.1", + "hash": "sha256-WH7GgpQtkk9FpEz3xwcERrVYq6Bz5SrtjakjFRgHuII=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.aarch64.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.aarch64.json new file mode 100644 index 000000000..fca9d5897 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.aarch64.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q16-HDRI-OpenMP-arm64", + "version": "14.11.1", + "hash": "sha256-kN/hpOiLTOD5jKUaWXz8nCoOTwP4lB9JczdodZZIvyc=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.x86_64.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.x86_64.json new file mode 100644 index 000000000..cb3b08fc8 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16-HDRI.x86_64.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q16-HDRI-OpenMP-x64", + "version": "14.11.1", + "hash": "sha256-mf/bRfdiQi96AZKDDBvbSMFA2YSQDMdmhcrF0Vlvs/8=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.AnyCPU.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.AnyCPU.json new file mode 100644 index 000000000..17a219a05 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.AnyCPU.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q16-AnyCPU", + "version": "14.11.1", + "hash": "sha256-GbCGSCB9iB9YA9Xmht0vPAlfJMY/tgGpNajorQv1fl4=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.aarch64.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.aarch64.json new file mode 100644 index 000000000..5e07d713e --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.aarch64.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q16-OpenMP-arm64", + "version": "14.11.1", + "hash": "sha256-T6KmNQhLxiLtb+10A6cpXl5G0+mKhtOiqjyF0T94fs0=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.x86_64.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.x86_64.json new file mode 100644 index 000000000..f0f7c52f6 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q16.x86_64.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q16-OpenMP-x64", + "version": "14.11.1", + "hash": "sha256-5VCBrKTGedHkJWJOp8w4B5uiPfT/ZsYlVrC3FYbHHbA=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.AnyCPU.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.AnyCPU.json new file mode 100644 index 000000000..84191717f --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.AnyCPU.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q8-AnyCPU", + "version": "14.11.1", + "hash": "sha256-yRecBHZiMcJHR3dkvfGqthvMo9qlvvcxF6hIdXs/wAM=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.aarch64.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.aarch64.json new file mode 100644 index 000000000..4799b2af9 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.aarch64.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q8-OpenMP-arm64", + "version": "14.11.1", + "hash": "sha256-Nt9RNaLpx+VYK+TgdB/GaIEYfBstWJKZQas8ixGfmtM=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.x86_64.json b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.x86_64.json new file mode 100644 index 000000000..08c7fe689 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/deps.Q8.x86_64.json @@ -0,0 +1,17 @@ +[ + { + "pname": "ArcaneLibs", + "version": "1.0.1-preview.20260126-091403", + "hash": "sha256-CSmNE16nDi05qyDAcJR+8SqQQ2ReAeX0+/dRP3WpNsg=" + }, + { + "pname": "Magick.NET-Q8-OpenMP-x64", + "version": "14.11.1", + "hash": "sha256-OHuPBwGFCz8nOsPc1NgUHAieCf8FE1ZjdAVpTfAo5X8=" + }, + { + "pname": "Magick.NET.Core", + "version": "14.11.1", + "hash": "sha256-984jXKS/y2602DgaXsfDh9TFOhpyAF/gHZG8BGQXljA=" + } +] diff --git a/extra/admin-api/Spacebar.Cdn.Worker/outputs.nix b/extra/admin-api/Spacebar.Cdn.Worker/outputs.nix new file mode 100644 index 000000000..48f897377 --- /dev/null +++ b/extra/admin-api/Spacebar.Cdn.Worker/outputs.nix @@ -0,0 +1,101 @@ +{ + 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; + buildSpacebarDotnetModule = import ../../../nix/lib/buildSpacebarDotnetModule.nix { inherit pkgs rVersion; }; + in + { + packages = + let + proj = self.packages.${system}; + sysArch = (lib.systems.elaborate system).linuxArch; + cdnCsWorkerArch = + if sysArch == "x86_64" then + "x86_64" + else if sysArch == "aarch64" then + "aarch64" + else + "AnyCPU"; + makeWorkerPackage = + arch: variant: + buildSpacebarDotnetModule { + name = "Spacebar.Cdn.Worker-${variant}.${arch}"; + nugetDeps = ./deps.${variant}.${arch}.json; + projectFile = "Spacebar.Cdn.Worker.${variant}.${arch}.csproj"; + srcRoot = ./.; + packNupkg = false; + projectReferences = [ + proj.Spacebar-Interop-Cdn-Abstractions + ]; + } + // { + __extraProjectPrefix = "Spacebar.Cdn.Worker"; + }; + in + { + Spacebar-Cdn-Worker-x86_64-Q16-HDRI = makeWorkerPackage "x86_64" "Q16-HDRI"; + Spacebar-Cdn-Worker-x86_64-Q16 = makeWorkerPackage "x86_64" "Q16"; + Spacebar-Cdn-Worker-x86_64-Q8 = makeWorkerPackage "x86_64" "Q8"; + + Spacebar-Cdn-Worker-aarch64-Q16-HDRI = makeWorkerPackage "aarch64" "Q16-HDRI"; + Spacebar-Cdn-Worker-aarch64-Q16 = makeWorkerPackage "aarch64" "Q16"; + Spacebar-Cdn-Worker-aarch64-Q8 = makeWorkerPackage "aarch64" "Q8"; + + Spacebar-Cdn-Worker-AnyCPU-Q16-HDRI = makeWorkerPackage "AnyCPU" "Q16-HDRI"; + Spacebar-Cdn-Worker-AnyCPU-Q16 = makeWorkerPackage "AnyCPU" "Q16"; + Spacebar-Cdn-Worker-AnyCPU-Q8 = makeWorkerPackage "AnyCPU" "Q8"; + }; + + containers.docker = + let + makeContainer = + variant: + (pkgs.dockerTools.buildLayeredImage { + name = "spacebar-server-cdn-cs-worker-${lib.toLower variant}"; + tag = builtins.replaceStrings [ "+" ] [ "_" ] self.packages.${system}."Spacebar-Cdn-Worker-${variant}".version; + contents = [ self.packages.${system}."Spacebar-Cdn-Worker-${variant}" ]; + config = { + Cmd = [ "${self.packages.${system}."Spacebar-Cdn-Worker-${variant}"}/bin/Spacebar.Cdn.Worker" ]; + Expose = [ "5000" ]; + }; + }); + in + { + Spacebar-Cdn-Worker-Q16-HDRI = makeContainer "Q16-HDRI"; + Spacebar-Cdn-Worker-Q16 = makeContainer "Q16"; + Spacebar-Cdn-Worker-Q8 = makeContainer "Q8"; + }; + } +) +#// { +# # 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; +# docker-offload = self.containers.x86_64-linux.docker.offload; +# docker-cdn-cs = self.containers.x86_64-linux.docker.cdn-cs; +# }; +# }; +#} diff --git a/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs b/extra/admin-api/Spacebar.Cdn/CdnConfiguration.cs new file mode 100644 index 000000000..e69de29bb diff --git a/nix/lib/buildSpacebarDotnetModule.nix b/nix/lib/buildSpacebarDotnetModule.nix new file mode 100644 index 000000000..edbd76800 --- /dev/null +++ b/nix/lib/buildSpacebarDotnetModule.nix @@ -0,0 +1,44 @@ +{ pkgs }: +{ + name, + nugetDeps ? null, + projectReferences ? [ ], + projectFile ? "${name}/${name}.csproj", + runtimeId ? null, + useAppHost ? null, + packNupkg ? true, + srcRoot ? ./., +}@args: +pkgs.buildDotnetModule rec { + inherit + projectReferences + nugetDeps + projectFile + runtimeId + useAppHost + srcRoot + packNupkg + ; + + pname = "${name}"; + version = "1.0.0-" + rVersion; + dotnetPackFlags = [ + "--include-symbols" + "--include-source" + "--version-suffix ${rVersion}" + ]; + # dotnetFlags = [ "-v:n" ]; # diag + dotnet-sdk = pkgs.dotnet-sdk_10; + dotnet-runtime = pkgs.dotnet-aspnetcore_10; + src = pkgs.lib.cleanSource srcRoot; + meta = with pkgs.lib; { + description = "Spacebar Server, Typescript Edition (C# extensions)"; + homepage = "https://github.com/spacebarchat/server"; + license = licenses.agpl3Plus; + maintainers = with maintainers; [ RorySys ]; + mainProgram = name; + }; +} +// { + __nugetDeps = args.nugetDeps; +}