From dcbcaee4cf05877fb44ef17fad31ec20fc7f4c01 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20=C5=BDlender?= Date: Tue, 27 Aug 2024 20:14:29 +0200 Subject: [PATCH] prisma: init at 5.18.0 --- .../manual/release-notes/rl-2411.section.md | 2 + .../applications/office/documenso/default.nix | 6 +- pkgs/by-name/pr/prisma/package.nix | 101 ++++++++++++++++++ .../pr/prisma/test-cli.nix} | 26 +++-- .../node-packages/node-packages.json | 1 - .../node-packages/node-packages.nix | 70 ------------ pkgs/development/node-packages/overrides.nix | 27 ----- .../tools/database/prisma-engines/default.nix | 6 +- pkgs/servers/pingvin-share/backend.nix | 4 +- 9 files changed, 129 insertions(+), 114 deletions(-) create mode 100644 pkgs/by-name/pr/prisma/package.nix rename pkgs/{development/node-packages/package-tests/prisma.nix => by-name/pr/prisma/test-cli.nix} (69%) diff --git a/nixos/doc/manual/release-notes/rl-2411.section.md b/nixos/doc/manual/release-notes/rl-2411.section.md index 4ca399136920..3e480f8c415a 100644 --- a/nixos/doc/manual/release-notes/rl-2411.section.md +++ b/nixos/doc/manual/release-notes/rl-2411.section.md @@ -233,6 +233,8 @@ and `nodePackages.vscode-json-languageserver-bin` were dropped due to an unmaintained upstream. The `vscode-langservers-extracted` package is a maintained drop-in replacement. +- `nodePackages.prisma` has been replaced by `prisma`. + - `fetchNextcloudApp` has been rewritten to use `fetchurl` rather than `fetchzip`. This invalidates all existing hashes but you can restore the old behavior by passing it `unpack = true`. diff --git a/pkgs/applications/office/documenso/default.nix b/pkgs/applications/office/documenso/default.nix index cca2c86c5584..00ef8c0e7bbe 100644 --- a/pkgs/applications/office/documenso/default.nix +++ b/pkgs/applications/office/documenso/default.nix @@ -1,7 +1,7 @@ { lib , fetchFromGitHub , buildNpmPackage -, nodePackages +, prisma , nix-update-script }: let @@ -18,12 +18,14 @@ buildNpmPackage { hash = "sha256-uKOJVZ0GRHo/CYvd/Ix/tq1WDhutRji1tSGdcITsNlo="; }; + nativeBuildInputs = [ prisma ]; + preBuild = '' # somehow for linux, npm is not finding the prisma package with the # packages installed with the lockfile. # This generates a prisma version incompatibility warning and is a kludge # until the upstream package-lock is modified. - ${nodePackages.prisma}/bin/prisma generate + prisma generate ''; npmDepsHash = "sha256-+JbvFMi8xoyxkuL9k96K1Vq0neciCGkkyZUPd15ES2E="; diff --git a/pkgs/by-name/pr/prisma/package.nix b/pkgs/by-name/pr/prisma/package.nix new file mode 100644 index 000000000000..c03e1925254b --- /dev/null +++ b/pkgs/by-name/pr/prisma/package.nix @@ -0,0 +1,101 @@ +{ + lib, + fetchFromGitHub, + stdenv, + nodejs, + pnpm_8, + prisma-engines, + jq, + makeWrapper, + moreutils, + callPackage, +}: + +stdenv.mkDerivation (finalAttrs: { + pname = "prisma"; + version = "5.18.0"; + + src = fetchFromGitHub { + owner = "prisma"; + repo = "prisma"; + rev = finalAttrs.version; + hash = "sha256-BLD2nKryigXr03BCgGwb3PnCcBLMyDfSFb9Snj0VPKI="; + }; + + nativeBuildInputs = [ + nodejs + pnpm_8.configHook + jq + makeWrapper + moreutils + ]; + + pnpmDeps = pnpm_8.fetchDeps { + inherit (finalAttrs) pname version src; + hash = "sha256-lgdJk7HCfX3cAvdEI8xG/IVBiLWezdUN0q+e/0LtVUQ="; + }; + + patchPhase = '' + runHook prePatch + + for package in packages/*; do + jq --arg version $version '.version = $version' $package/package.json | sponge $package/package.json + done + + runHook postPatch + ''; + + buildPhase = '' + runHook preBuild + + pnpm build + + runHook postBuild + ''; + + # FIXME: Use pnpm deploy: https://github.com/pnpm/pnpm/issues/5315 + installPhase = '' + runHook preInstall + + mkdir -p $out/lib/prisma + + # Fetch CLI workspace dependencies + deps_json=$(pnpm list --filter ./packages/cli --prod --depth Infinity --json) + deps=$(jq -r '[.. | strings | select(startswith("link:../")) | sub("^link:../"; "")] | unique[]' <<< "$deps_json") + + # Remove unnecessary external dependencies + rm -rf node_modules + pnpm install --offline --ignore-scripts --frozen-lockfile --prod --filter ./packages/cli + cp -r node_modules $out/lib/prisma + + # Only install cli and its workspace dependencies + for package in cli $deps; do + filename=$(npm pack --json ./packages/$package | jq -r '.[].filename') + mkdir -p $out/lib/prisma/packages/$package + cp -r packages/$package/node_modules $out/lib/prisma/packages/$package + tar xf $filename --strip-components=1 -C $out/lib/prisma/packages/$package + done + + makeWrapper "${lib.getExe nodejs}" "$out/bin/prisma" \ + --add-flags "$out/lib/prisma/packages/cli/build/index.js" \ + --set PRISMA_SCHEMA_ENGINE_BINARY ${prisma-engines}/bin/schema-engine \ + --set PRISMA_QUERY_ENGINE_BINARY ${prisma-engines}/bin/query-engine \ + --set PRISMA_QUERY_ENGINE_LIBRARY ${lib.getLib prisma-engines}/lib/libquery_engine.node + + runHook postInstall + ''; + + dontStrip = true; + + passthru.tests = { + cli = callPackage ./test-cli.nix { }; + }; + + meta = with lib; { + description = "Next-generation ORM for Node.js and TypeScript"; + homepage = "https://www.prisma.io/"; + license = licenses.asl20; + maintainers = with maintainers; [ aqrln ]; + platforms = platforms.unix; + }; +}) diff --git a/pkgs/development/node-packages/package-tests/prisma.nix b/pkgs/by-name/pr/prisma/test-cli.nix similarity index 69% rename from pkgs/development/node-packages/package-tests/prisma.nix rename to pkgs/by-name/pr/prisma/test-cli.nix index 35a5516a3b5b..d0449df3fc05 100644 --- a/pkgs/development/node-packages/package-tests/prisma.nix +++ b/pkgs/by-name/pr/prisma/test-cli.nix @@ -1,21 +1,29 @@ -{ lib, pkgs, runCommand, prisma }: +{ + lib, + runCommand, + prisma, + prisma-engines, + sqlite-interactive, +}: let - inherit (prisma) packageName; prismaMajorVersion = lib.versions.majorMinor prisma.version; - enginesMajorVersion = lib.versions.majorMinor pkgs.prisma-engines.version; + enginesMajorVersion = lib.versions.majorMinor prisma-engines.version; in - -runCommand "${packageName}-tests" { - nativeBuildInputs = with pkgs; [ prisma sqlite-interactive ]; - meta.timeout = 60; -} +runCommand "prisma-cli-tests" + { + nativeBuildInputs = [ + prisma + sqlite-interactive + ]; + meta.timeout = 60; + } '' mkdir $out cd $out if [ "${prismaMajorVersion}" != "${enginesMajorVersion}" ]; then - echo "nodePackages.prisma in version ${prismaMajorVersion} and prisma-engines in ${enginesMajorVersion}. Major versions must match." + echo "prisma in version ${prismaMajorVersion} and prisma-engines in ${enginesMajorVersion}. Major versions must match." exit 1 fi diff --git a/pkgs/development/node-packages/node-packages.json b/pkgs/development/node-packages/node-packages.json index 1cdca49cd02f..06c4caf247b0 100644 --- a/pkgs/development/node-packages/node-packages.json +++ b/pkgs/development/node-packages/node-packages.json @@ -168,7 +168,6 @@ , "prebuild-install" , "prettier" , "prettier-plugin-toml" -, "prisma" , "@prisma/language-server" , "pscid" , "pulp" diff --git a/pkgs/development/node-packages/node-packages.nix b/pkgs/development/node-packages/node-packages.nix index 1a36b419534c..51342b571c18 100644 --- a/pkgs/development/node-packages/node-packages.nix +++ b/pkgs/development/node-packages/node-packages.nix @@ -8707,51 +8707,6 @@ let sha512 = "j7P6Rgr3mmtdkeDGTe0E/aYyWEWVtc5yFXtHCRHs28/jptDEWfaVOc5T7cblqy1XKPPfCxJc/8DwQ5YgLOZOVQ=="; }; }; - "@prisma/debug-5.17.0" = { - name = "_at_prisma_slash_debug"; - packageName = "@prisma/debug"; - version = "5.17.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@prisma/debug/-/debug-5.17.0.tgz"; - sha512 = "l7+AteR3P8FXiYyo496zkuoiJ5r9jLQEdUuxIxNCN1ud8rdbH3GTxm+f+dCyaSv9l9WY+29L9czaVRXz9mULfg=="; - }; - }; - "@prisma/engines-5.17.0" = { - name = "_at_prisma_slash_engines"; - packageName = "@prisma/engines"; - version = "5.17.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@prisma/engines/-/engines-5.17.0.tgz"; - sha512 = "+r+Nf+JP210Jur+/X8SIPLtz+uW9YA4QO5IXA+KcSOBe/shT47bCcRMTYCbOESw3FFYFTwe7vU6KTWHKPiwvtg=="; - }; - }; - "@prisma/engines-version-5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053" = { - name = "_at_prisma_slash_engines-version"; - packageName = "@prisma/engines-version"; - version = "5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053"; - src = fetchurl { - url = "https://registry.npmjs.org/@prisma/engines-version/-/engines-version-5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053.tgz"; - sha512 = "tUuxZZysZDcrk5oaNOdrBnnkoTtmNQPkzINFDjz7eG6vcs9AVDmA/F6K5Plsb2aQc/l5M2EnFqn3htng9FA4hg=="; - }; - }; - "@prisma/fetch-engine-5.17.0" = { - name = "_at_prisma_slash_fetch-engine"; - packageName = "@prisma/fetch-engine"; - version = "5.17.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@prisma/fetch-engine/-/fetch-engine-5.17.0.tgz"; - sha512 = "ESxiOaHuC488ilLPnrv/tM2KrPhQB5TRris/IeIV4ZvUuKeaicCl4Xj/JCQeG9IlxqOgf1cCg5h5vAzlewN91Q=="; - }; - }; - "@prisma/get-platform-5.17.0" = { - name = "_at_prisma_slash_get-platform"; - packageName = "@prisma/get-platform"; - version = "5.17.0"; - src = fetchurl { - url = "https://registry.npmjs.org/@prisma/get-platform/-/get-platform-5.17.0.tgz"; - sha512 = "UlDgbRozCP1rfJ5Tlkf3Cnftb6srGrEQ4Nm3og+1Se2gWmCZ0hmPIi+tQikGDUVLlvOWx3Gyi9LzgRP+HTXV9w=="; - }; - }; "@prisma/prisma-schema-wasm-5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053" = { name = "_at_prisma_slash_prisma-schema-wasm"; packageName = "@prisma/prisma-schema-wasm"; @@ -81407,31 +81362,6 @@ in bypassCache = true; reconstructLock = true; }; - prisma = nodeEnv.buildNodePackage { - name = "prisma"; - packageName = "prisma"; - version = "5.17.0"; - src = fetchurl { - url = "https://registry.npmjs.org/prisma/-/prisma-5.17.0.tgz"; - sha512 = "m4UWkN5lBE6yevqeOxEvmepnL5cNPEjzMw2IqDB59AcEV6w7D8vGljDLd1gPFH+W6gUxw9x7/RmN5dCS/WTPxA=="; - }; - dependencies = [ - sources."@prisma/debug-5.17.0" - sources."@prisma/engines-5.17.0" - sources."@prisma/engines-version-5.17.0-31.393aa359c9ad4a4bb28630fb5613f9c281cde053" - sources."@prisma/fetch-engine-5.17.0" - sources."@prisma/get-platform-5.17.0" - ]; - buildInputs = globalBuildInputs; - meta = { - description = "Prisma is an open-source database toolkit. It includes a JavaScript/TypeScript ORM for Node.js, migrations and a modern GUI to view and edit the data in your database. You can use Prisma in new projects or add it to an existing one."; - homepage = "https://www.prisma.io"; - license = "Apache-2.0"; - }; - production = true; - bypassCache = true; - reconstructLock = true; - }; "@prisma/language-server" = nodeEnv.buildNodePackage { name = "_at_prisma_slash_language-server"; packageName = "@prisma/language-server"; diff --git a/pkgs/development/node-packages/overrides.nix b/pkgs/development/node-packages/overrides.nix index 94e4c1961a26..bdd80fa64da0 100644 --- a/pkgs/development/node-packages/overrides.nix +++ b/pkgs/development/node-packages/overrides.nix @@ -268,33 +268,6 @@ final: prev: { }; }); - # To update prisma, please first update prisma-engines to the latest - # version. Then change the correct hash to this package. The PR should hold - # two commits: one for the engines and the other one for the node package. - prisma = prev.prisma.override rec { - nativeBuildInputs = [ pkgs.buildPackages.makeWrapper ]; - - inherit (pkgs.prisma-engines) version; - - src = fetchurl { - url = "https://registry.npmjs.org/prisma/-/prisma-${version}.tgz"; - hash = "sha256-TlwKCuDQRFM6+Hhx9eFCfXbtLZq6RwBTIFCWzE4D8N8="; - }; - postInstall = with pkgs; '' - wrapProgram "$out/bin/prisma" \ - --set PRISMA_SCHEMA_ENGINE_BINARY ${prisma-engines}/bin/schema-engine \ - --set PRISMA_QUERY_ENGINE_BINARY ${prisma-engines}/bin/query-engine \ - --set PRISMA_QUERY_ENGINE_LIBRARY ${lib.getLib prisma-engines}/lib/libquery_engine.node \ - --set PRISMA_FMT_BINARY ${prisma-engines}/bin/prisma-fmt - ''; - - passthru.tests = { - simple-execution = pkgs.callPackage ./package-tests/prisma.nix { - inherit (final) prisma; - }; - }; - }; - pulp = prev.pulp.override { # tries to install purescript npmFlags = builtins.toString [ "--ignore-scripts" ]; diff --git a/pkgs/development/tools/database/prisma-engines/default.nix b/pkgs/development/tools/database/prisma-engines/default.nix index 737d73b6fb68..295c791d4f5e 100644 --- a/pkgs/development/tools/database/prisma-engines/default.nix +++ b/pkgs/development/tools/database/prisma-engines/default.nix @@ -9,8 +9,8 @@ , stdenv }: -# Updating this package will force an update for nodePackages.prisma. The -# version of prisma-engines and nodePackages.prisma must be the same for them to +# Updating this package will force an update for prisma. The +# version of prisma-engines and prisma must be the same for them to # function correctly. rustPlatform.buildRustPackage rec { pname = "prisma-engines"; @@ -89,7 +89,7 @@ rustPlatform.buildRustPackage rec { # Here's an example application using Prisma with Nix: https://github.com/pimeys/nix-prisma-example # At example's `flake.nix` shellHook, notice the requirement of defining environment variables for prisma, it's values will show on `prisma --version`. # Read the example's README: https://github.com/pimeys/nix-prisma-example/blob/main/README.md -# Prisma requires 2 packages, `prisma-engines` and `nodePackages.prisma`, to be at *exact* same versions. +# Prisma requires 2 packages, `prisma-engines` and `prisma`, to be at *exact* same versions. # Certify at `package.json` that dependencies "@prisma/client" and "prisma" are equal, meaning no caret (`^`) in version. # Configure NPM to use exact version: `npm config set save-exact=true` # Delete `package-lock.json`, delete `node_modules` directory and run `npm install`. diff --git a/pkgs/servers/pingvin-share/backend.nix b/pkgs/servers/pingvin-share/backend.nix index 47baa5d1a48d..37bc0ffd6be1 100644 --- a/pkgs/servers/pingvin-share/backend.nix +++ b/pkgs/servers/pingvin-share/backend.nix @@ -3,7 +3,7 @@ buildNpmPackage, vips, pkg-config, - nodePackages, + prisma, src, version, nixosTests, @@ -28,7 +28,7 @@ buildNpmPackage { buildInputs = [ vips ]; nativeBuildInputs = [ pkg-config - nodePackages.prisma + prisma ]; npmDepsHash = "sha256-btjvX+2krSc0/bJqeLcVTqHBVWqiTFipp3MidO9wApY=";