From f480036454db17815d0c9aea9fd0f469950d2351 Mon Sep 17 00:00:00 2001 From: emily Date: Thu, 15 Aug 2024 23:58:07 +0200 Subject: [PATCH] feat: Add nix package --- .gitignore | 6 ++- nix/fix-build-spinner.patch | 33 ++++++++++++++ nix/nodeHashes.nix | 6 +++ nix/package.nix | 90 +++++++++++++++++++++++++++++++++++++ 4 files changed, 134 insertions(+), 1 deletion(-) create mode 100644 nix/fix-build-spinner.patch create mode 100644 nix/nodeHashes.nix create mode 100644 nix/package.nix diff --git a/.gitignore b/.gitignore index b378a2e4..79f66ab2 100644 --- a/.gitignore +++ b/.gitignore @@ -117,6 +117,10 @@ out .nuxt dist +# Nix build output + +result + # Gatsby files .cache/ @@ -182,4 +186,4 @@ glitch-dev *.pem oclif.manifest.json .direnv/ -tsconfig.tsbuildinfo \ No newline at end of file +tsconfig.tsbuildinfo diff --git a/nix/fix-build-spinner.patch b/nix/fix-build-spinner.patch new file mode 100644 index 00000000..7445c3d1 --- /dev/null +++ b/nix/fix-build-spinner.patch @@ -0,0 +1,33 @@ +diff --git a/build.ts b/build.ts +index 3b3ebe9..9531121 100644 +--- a/build.ts ++++ b/build.ts +@@ -1,10 +1,10 @@ + import { $ } from "bun"; +-import ora from "ora"; ++// import ora from "ora"; + import { routes } from "~/routes"; + +-const buildSpinner = ora("Building").start(); ++// const buildSpinner = ora("Building").start(); + +-await $`rm -rf dist && mkdir dist`; ++// await $`rm -rf dist && mkdir dist`; + + await Bun.build({ + entrypoints: [ +@@ -25,7 +25,7 @@ await Bun.build({ + } + }); + +-buildSpinner.text = "Transforming"; ++// buildSpinner.text = "Transforming"; + + // Copy Drizzle migrations to dist + await $`cp -r drizzle dist/drizzle`; +@@ -49,4 +49,4 @@ await $`cp package.json dist/package.json`; + // Copy cli/theme.json + await $`cp cli/theme.json dist/cli/theme.json`; + +-buildSpinner.stop(); ++// buildSpinner.stop(); diff --git a/nix/nodeHashes.nix b/nix/nodeHashes.nix new file mode 100644 index 00000000..df2b68d4 --- /dev/null +++ b/nix/nodeHashes.nix @@ -0,0 +1,6 @@ +{ lib }: { + x86_64-linux = "sha256-T/U9altP5HFzmULtsuvHQIXQXDCmQEAau8KFN8J5i/8="; + x86_64-darwin = lib.fakeHash; + aarch64-linux = "sha256-6ZzrYI2G+7q9Efgu5iKhZB3bT2C7T5fk4I/t5glpQYA="; + aarch64-darwin = lib.fakeHash; +} diff --git a/nix/package.nix b/nix/package.nix new file mode 100644 index 00000000..947f9732 --- /dev/null +++ b/nix/package.nix @@ -0,0 +1,90 @@ +{ + lib, + stdenv, + fetchFromGitHub, + bun, + callPackage, + nodeHashes ? callPackage ./nodeHashes.nix { inherit lib; }, + nodePackages_latest, + makeBinaryWrapper, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "versiajs"; + version = "0.7.0"; + + src = ../.; + + node_modules = stdenv.mkDerivation { + pname = "${finalAttrs.pname}-node_modules"; + + inherit (finalAttrs) version src; + + nativeBuildInputs = with nodePackages_latest; [ bun nodejs typescript ]; + + dontConfigure = true; + + buildPhase = '' + bun install --production --no-progress --ignore-scripts --frozen-lockfile + ''; + + installPhase = '' + mkdir -p $out/node_modules + cp -r node_modules $out + ''; + + dontFixup = true; + + outputHash = nodeHashes.${stdenv.system}; + outputHashMode = "recursive"; + }; + + nativeBuildInputs = [ bun ]; + + buildInputs = [ bun nodePackages_latest.nodejs makeBinaryWrapper ]; + + patches = [ ./fix-build-spinner.patch ]; + + configurePhase = '' + runHook preConfigure + + cp -r ${finalAttrs.node_modules}/node_modules . + + runHook postConfigure + ''; + + buildPhase = '' + runHook preBuild + + bun run build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + cp -r dist/ $out + + mkdir -p $out/bin + + makeBinaryWrapper ${bun}/bin/bun $out/bin/versiajs \ + --prefix PATH : ${lib.makeBinPath [ bun ]} \ + --set NODE_ENV "production" \ + --add-flags "run --prefer-offline --no-install --cwd $out $out/index.js" + + makeBinaryWrapper ${bun}/bin/bun $out/bin/versiajs-cli \ + --prefix PATH : ${lib.makeBinPath [ bun ]} \ + --add-flags "run --prefer-offline --no-install --cwd $out $out/cli/index.js" + + runHook postInstall + ''; + + meta = { + description = "A new federated server written with TypeScript and Bun "; + homepage = "https://lysand.org"; + license = with lib.licenses; [ agpl3Plus ]; + maintainers = with lib.maintainers; [ snaki ]; + platforms = [ "x86_64-linux" "x86_64-darwin" "aarch64-linux" "aarch64-darwin" ]; + }; +})