ghostfolio: 2.254.0 -> 3.2.0, refactor

This commit is contained in:
Moraxyc 2026-05-13 18:30:48 +08:00
commit a2bce4fdec
No known key found for this signature in database

View file

@ -5,19 +5,19 @@
nodejs,
faketty,
openssl,
prisma_6,
prisma-engines_6,
prisma_7,
prisma-engines_7,
}:
buildNpmPackage (finalAttrs: {
pname = "ghostfolio";
version = "2.254.0";
version = "3.2.0";
src = fetchFromGitHub {
owner = "ghostfolio";
repo = "ghostfolio";
tag = finalAttrs.version;
hash = "sha256-bcUr0tzq/X2pOmg7ZYj46+TQO9NBKmevm+C6PbyV/yc=";
hash = "sha256-KmjGHiuPbXxJ9IkTA8PtjeNfhSyZnqdEp5yn8ypdM2g=";
# populate values that require us to use git. By doing this in postFetch we
# can delete .git afterwards and maintain better reproducibility of the src.
leaveDotGit = true;
@ -27,10 +27,19 @@ buildNpmPackage (finalAttrs: {
'';
};
npmDepsHash = "sha256-Wa15OSsd2IXTO1OjZoiFsSF0UhrzvS6fsymvxyPm0s8=";
npmDepsHash = "sha256-YLS1tT15bj9WF9xzOn9UhXIA7Qe0FcQgfOQFSntPYm4=";
postPatch = ''
substituteInPlace replace.build.mjs \
--replace-fail 'new Date()' "new Date(''$(<SOURCE_DATE_EPOCH))"
# SyntaxError: Named export 'PrismaClient' not found
substituteInPlace prisma/seed.mts \
--replace-fail "import { PrismaClient } from '@prisma/client';" \
"import prismaClientPkg from '@prisma/client'; const { PrismaClient } = prismaClientPkg;"
'';
nativeBuildInputs = [
prisma_6
prisma_7
faketty
];
@ -42,9 +51,6 @@ buildNpmPackage (finalAttrs: {
prisma generate
substituteInPlace replace.build.mjs \
--replace-fail 'new Date()' "new Date(''$(<SOURCE_DATE_EPOCH))"
# Workaround for https://github.com/nrwl/nx/issues/22445
faketty npm run build:production
@ -58,32 +64,41 @@ buildNpmPackage (finalAttrs: {
cp -r {node_modules,prisma} dist/apps/api/
mkdir -p "$out/lib/node_modules/ghostfolio"
cp -r dist/apps/{api,client} "$out/lib/node_modules/ghostfolio/"
mkdir -p $out/lib/ghostfolio
cp -r dist/apps/{api,client} "$out/lib/ghostfolio/"
substituteInPlace .config/prisma.ts \
--replace-fail "__dirname, '..', 'prisma'" "'$out/lib/ghostfolio/api/prisma'" \
--replace-fail "node " "${lib.getExe nodejs} "
install -Dm444 .config/prisma.ts "$out/lib/ghostfolio/api/prisma.config.ts"
makeWrapper ${lib.getExe nodejs} "$out/bin/ghostfolio" \
--add-flags "$out/lib/node_modules/ghostfolio/api/main" "''${user_args[@]}" \
--add-flags "$out/lib/ghostfolio/api/main" "''${user_args[@]}" \
--prefix PATH : ${lib.makeBinPath [ openssl ]} \
--prefix LD_LIBRARY_PATH : ${lib.makeLibraryPath [ openssl ]} \
${lib.concatStringsSep " " (
lib.mapAttrsToList (name: value: "--set ${name} ${lib.escapeShellArg value}") {
PRISMA_SCHEMA_ENGINE_BINARY = lib.getExe' prisma-engines_6 "schema-engine";
PRISMA_QUERY_ENGINE_BINARY = lib.getExe' prisma-engines_6 "query-engine";
PRISMA_QUERY_ENGINE_LIBRARY = "${prisma-engines_6}/lib/libquery_engine.node";
PRISMA_INTROSPECTION_ENGINE_BINARY = lib.getExe' prisma-engines_6 "introspection-engine";
PRISMA_FMT_BINARY = lib.getExe' prisma-engines_6 "prisma-fmt";
PRISMA_SCHEMA_ENGINE_BINARY = lib.getExe' prisma-engines_7 "schema-engine";
PRISMA_QUERY_ENGINE_BINARY = lib.getExe' prisma-engines_7 "query-engine";
PRISMA_QUERY_ENGINE_LIBRARY = "${prisma-engines_7}/lib/libquery_engine.node";
PRISMA_INTROSPECTION_ENGINE_BINARY = lib.getExe' prisma-engines_7 "introspection-engine";
PRISMA_FMT_BINARY = lib.getExe' prisma-engines_7 "prisma-fmt";
}
)}
# For compatibility
mkdir -p $out/lib/node_modules
ln -sr $out/lib/ghostfolio $out/lib/node_modules/ghostfolio
runHook postInstall
'';
# Remove dev deps not needed at runtime
preFixup = ''
find $out/lib/node_modules -name "*.py" -delete
apiModules="$out/lib/node_modules/ghostfolio/api/node_modules"
find $out/lib -name "*.py" -delete
apiModules="$out/lib/ghostfolio/api/node_modules"
rm -rf \
"$out/lib/node_modules/ghostfolio/client/development" \
"$out/lib/ghostfolio/client/development" \
"$apiModules"/sass-embedded* \
"$apiModules"/{@,}esbuild \
"$apiModules"/{@,}rollup \