From 1beb18e321236bf6a8bbc3ca505d9f2d728cfc79 Mon Sep 17 00:00:00 2001 From: Jesse Wierzbinski Date: Mon, 14 Apr 2025 17:13:36 +0200 Subject: [PATCH] build: :building_construction: Package Worker --- build-worker.ts | 10 +++++----- flake.nix | 7 +++++-- nix/fix-build-spinner-worker.patch | 30 ++++++++++++++++++++++++++++++ nix/package-worker.nix | 21 +++++++++++++++++++++ nix/package.nix | 4 +++- tests/setup.ts | 2 +- worker.ts | 1 + 7 files changed, 66 insertions(+), 9 deletions(-) create mode 100644 nix/fix-build-spinner-worker.patch create mode 100644 nix/package-worker.nix create mode 100644 worker.ts diff --git a/build-worker.ts b/build-worker.ts index 5e2a6d5a..a66e7076 100644 --- a/build-worker.ts +++ b/build-worker.ts @@ -8,7 +8,7 @@ await $`rm -rf dist && mkdir dist`; await build({ entrypoints: [ - "entrypoints/worker/index.ts", + "worker.ts", // HACK: Include to avoid cyclical import errors "config.ts", ], @@ -21,13 +21,13 @@ await build({ buildSpinner.text = "Transforming"; // Copy Drizzle migrations to dist -await $`cp -r drizzle dist/drizzle`; +await $`cp -rL drizzle dist/drizzle`; // Copy Sharp to dist await $`mkdir -p dist/node_modules/@img`; -await $`cp -r node_modules/@img/sharp-libvips-linuxmusl-* dist/node_modules/@img`; -await $`cp -r node_modules/@img/sharp-linuxmusl-* dist/node_modules/@img`; +await $`cp -rL node_modules/@img/sharp-libvips-linux* dist/node_modules/@img`; +await $`cp -rL node_modules/@img/sharp-linux* dist/node_modules/@img`; -await $`cp -r node_modules/detect-libc dist/node_modules/`; +await $`cp -rL node_modules/detect-libc dist/node_modules/`; buildSpinner.stop(); diff --git a/flake.nix b/flake.nix index ef1f1529..f7cb72d4 100644 --- a/flake.nix +++ b/flake.nix @@ -14,8 +14,11 @@ ... }: { - overlays.default = final: prev: { + overlays.default = final: prev: rec { versia-server = final.callPackage ./nix/package.nix {}; + versia-server-worker = final.callPackage ./nix/package-worker.nix { + inherit versia-server; + }; }; } // flake-utils.lib.eachSystem ["x86_64-linux" "aarch64-linux"] (system: let @@ -25,7 +28,7 @@ }; in { packages = { - inherit (pkgs) versia-server; + inherit (pkgs) versia-server versia-server-worker; default = self.packages.${system}.versia-server; }; }); diff --git a/nix/fix-build-spinner-worker.patch b/nix/fix-build-spinner-worker.patch new file mode 100644 index 00000000..bbf9649e --- /dev/null +++ b/nix/fix-build-spinner-worker.patch @@ -0,0 +1,30 @@ +diff --git a/build-worker.ts b/build-worker.ts +index 5e2a6d5a..ee66871c 100644 +--- a/build-worker.ts ++++ b/build-worker.ts +@@ -1,8 +1,8 @@ + import { build } from "bun"; + import { $ } from "bun"; +-import ora from "ora"; ++// import ora from "ora"; + +-const buildSpinner = ora("Building").start(); ++// const buildSpinner = ora("Building").start(); + + await $`rm -rf dist && mkdir dist`; + +@@ -18,7 +18,7 @@ await build({ + minify: false, + }); + +-buildSpinner.text = "Transforming"; ++// buildSpinner.text = "Transforming"; + + // Copy Drizzle migrations to dist + await $`cp -r drizzle dist/drizzle`; +@@ -30,4 +30,4 @@ await $`cp -r node_modules/@img/sharp-linuxmusl-* dist/node_modules/@img`; + + await $`cp -r node_modules/detect-libc dist/node_modules/`; + +-buildSpinner.stop(); ++// buildSpinner.stop(); diff --git a/nix/package-worker.nix b/nix/package-worker.nix new file mode 100644 index 00000000..b62ee97c --- /dev/null +++ b/nix/package-worker.nix @@ -0,0 +1,21 @@ +# Simply edit the server to run "bun run build:worker" instead of "bun run build" +{versia-server}: +versia-server.overrideAttrs (oldAttrs: { + pname = "${oldAttrs.pname}-worker"; + buildPhase = '' + runHook preBuild + + bun run build:worker + + runHook postBuild + ''; + entrypointPath = "worker.js"; + + patches = [./fix-build-spinner-worker.patch]; + + meta = + oldAttrs.meta + // { + description = "${oldAttrs.meta.description} (worker)"; + }; +}) diff --git a/nix/package.nix b/nix/package.nix index 286c558a..459f26dc 100644 --- a/nix/package.nix +++ b/nix/package.nix @@ -44,6 +44,8 @@ in runHook postBuild ''; + entrypointPath = "index.js"; + installPhase = let libPath = lib.makeLibraryPath [ vips @@ -60,7 +62,7 @@ in cp -r dist $out/${finalAttrs.pname} makeWrapper ${lib.getExe bun} $out/bin/${finalAttrs.pname} \ - --add-flags "run $out/${finalAttrs.pname}/index.js" \ + --add-flags "run $out/${finalAttrs.pname}/${finalAttrs.entrypointPath}" \ --set NODE_PATH $out/${finalAttrs.pname}/node_modules \ --prefix PATH : ${binPath} \ --prefix LD_LIBRARY_PATH : ${libPath} diff --git a/tests/setup.ts b/tests/setup.ts index 469d5f3d..8c374279 100644 --- a/tests/setup.ts +++ b/tests/setup.ts @@ -5,4 +5,4 @@ await setupDatabase(); await deleteOldTestUsers(); // Start workers -await import("~/entrypoints/worker/index.ts"); +await import("~/worker.ts"); diff --git a/worker.ts b/worker.ts new file mode 100644 index 00000000..f41845e0 --- /dev/null +++ b/worker.ts @@ -0,0 +1 @@ +await import("~/entrypoints/worker/index.ts");