From 6f776474958a15c60ba61c82772e71dc2f6d23ae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Maciej=20Kr=C3=BCger?= Date: Thu, 21 May 2026 19:37:13 +0200 Subject: [PATCH] tests.pnpm: add pnpm_11_v4 test for fetcherVersion 4 Tests the SQLite dump/reconstruct code path introduced in fetcherVersion 4, which ensures reproducibility of the pnpm v11 store index. Assisted-by: Claude Opus 4.6 (1M context) --- pkgs/test/pnpm/default.nix | 1 + pkgs/test/pnpm/pnpm_11_v4/default.nix | 60 ++++++++++++++++++++ pkgs/test/pnpm/pnpm_11_v4/src/.gitignore | 2 + pkgs/test/pnpm/pnpm_11_v4/src/index.ts | 1 + pkgs/test/pnpm/pnpm_11_v4/src/package.json | 20 +++++++ pkgs/test/pnpm/pnpm_11_v4/src/pnpm-lock.yaml | 39 +++++++++++++ pkgs/test/pnpm/pnpm_11_v4/src/tsconfig.json | 13 +++++ 7 files changed, 136 insertions(+) create mode 100644 pkgs/test/pnpm/pnpm_11_v4/default.nix create mode 100644 pkgs/test/pnpm/pnpm_11_v4/src/.gitignore create mode 100644 pkgs/test/pnpm/pnpm_11_v4/src/index.ts create mode 100644 pkgs/test/pnpm/pnpm_11_v4/src/package.json create mode 100644 pkgs/test/pnpm/pnpm_11_v4/src/pnpm-lock.yaml create mode 100644 pkgs/test/pnpm/pnpm_11_v4/src/tsconfig.json diff --git a/pkgs/test/pnpm/default.nix b/pkgs/test/pnpm/default.nix index 00ec222b9453..14c62ea820d3 100644 --- a/pkgs/test/pnpm/default.nix +++ b/pkgs/test/pnpm/default.nix @@ -3,4 +3,5 @@ pnpm-empty-lockfile = callPackage ./pnpm-empty-lockfile { }; pnpm-fixup-state-db = callPackage ./pnpm-fixup-state-db { }; pnpm_11_v3 = callPackage ./pnpm_11_v3 { }; + pnpm_11_v4 = callPackage ./pnpm_11_v4 { }; } diff --git a/pkgs/test/pnpm/pnpm_11_v4/default.nix b/pkgs/test/pnpm/pnpm_11_v4/default.nix new file mode 100644 index 000000000000..d34c6239f1f9 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11_v4/default.nix @@ -0,0 +1,60 @@ +{ + fetchPnpmDeps, + lib, + makeShellWrapper, + nodejs, + pnpmConfigHook, + pnpm_11, + stdenv, + testers, +}: +let + pnpm = pnpm_11; +in +stdenv.mkDerivation (finalAttrs: { + pname = "pnpm-test"; + inherit (pnpm) version; + + src = ./src; + + pnpmDeps = testers.invalidateFetcherByDrvHash fetchPnpmDeps { + inherit (finalAttrs) pname version src; + inherit pnpm; + fetcherVersion = 4; + hash = "sha256-f5EC0m+y9vvt+6alquFjdgGmH8ha1YprthBU3dnq9SE="; + }; + + nativeBuildInputs = [ + makeShellWrapper + nodejs + pnpm + pnpmConfigHook + ]; + + buildPhase = '' + runHook preBuild + + pnpm build + + runHook postBuild + ''; + + installPhase = '' + runHook preInstall + + install -Dm644 -t $out/lib/pnpm-11-test dist/index.js + + makeWrapper ${lib.getExe nodejs} $out/bin/pnpm-11-test \ + --add-flags "$out/lib/pnpm-11-test" + + runHook postInstall + ''; + + __structuredAttrs = true; + + meta = { + license = lib.licenses.mit; + mainProgram = "pnpm-11-test"; + inherit (pnpm.meta) maintainers; + }; +}) diff --git a/pkgs/test/pnpm/pnpm_11_v4/src/.gitignore b/pkgs/test/pnpm/pnpm_11_v4/src/.gitignore new file mode 100644 index 000000000000..1eae0cf6700c --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11_v4/src/.gitignore @@ -0,0 +1,2 @@ +dist/ +node_modules/ diff --git a/pkgs/test/pnpm/pnpm_11_v4/src/index.ts b/pkgs/test/pnpm/pnpm_11_v4/src/index.ts new file mode 100644 index 000000000000..accefceba62b --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11_v4/src/index.ts @@ -0,0 +1 @@ +console.log("Hello World"); diff --git a/pkgs/test/pnpm/pnpm_11_v4/src/package.json b/pkgs/test/pnpm/pnpm_11_v4/src/package.json new file mode 100644 index 000000000000..1eb3b51b3886 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11_v4/src/package.json @@ -0,0 +1,20 @@ +{ + "name": "pnpm11test", + "version": "1.0.0", + "description": "", + "main": "dist/index.js", + "scripts": { + "build": "tsc", + "start": "node dist/index.js" + }, + "license": "MIT", + "packageManager": "pnpm", + "type": "module", + "files": [ + "dist/" + ], + "devDependencies": { + "@types/node": "^25.5.0", + "typescript": "^6.0.2" + } +} diff --git a/pkgs/test/pnpm/pnpm_11_v4/src/pnpm-lock.yaml b/pkgs/test/pnpm/pnpm_11_v4/src/pnpm-lock.yaml new file mode 100644 index 000000000000..def71aa4e5a2 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11_v4/src/pnpm-lock.yaml @@ -0,0 +1,39 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@types/node': + specifier: ^25.5.0 + version: 25.5.0 + typescript: + specifier: ^6.0.2 + version: 6.0.2 + +packages: + + '@types/node@25.5.0': + resolution: {integrity: sha512-jp2P3tQMSxWugkCUKLRPVUpGaL5MVFwF8RDuSRztfwgN1wmqJeMSbKlnEtQqU8UrhTmzEmZdu2I6v2dpp7XIxw==} + + typescript@6.0.2: + resolution: {integrity: sha512-bGdAIrZ0wiGDo5l8c++HWtbaNCWTS4UTv7RaTH/ThVIgjkveJt83m74bBHMJkuCbslY8ixgLBVZJIOiQlQTjfQ==} + engines: {node: '>=14.17'} + hasBin: true + + undici-types@7.18.2: + resolution: {integrity: sha512-AsuCzffGHJybSaRrmr5eHr81mwJU3kjw6M+uprWvCXiNeN9SOGwQ3Jn8jb8m3Z6izVgknn1R0FTCEAP2QrLY/w==} + +snapshots: + + '@types/node@25.5.0': + dependencies: + undici-types: 7.18.2 + + typescript@6.0.2: {} + + undici-types@7.18.2: {} diff --git a/pkgs/test/pnpm/pnpm_11_v4/src/tsconfig.json b/pkgs/test/pnpm/pnpm_11_v4/src/tsconfig.json new file mode 100644 index 000000000000..3471bd329666 --- /dev/null +++ b/pkgs/test/pnpm/pnpm_11_v4/src/tsconfig.json @@ -0,0 +1,13 @@ +{ + "compilerOptions": { + "target": "ESNext", + "module": "NodeNext", + "moduleResolution": "NodeNext", + "outDir": "dist", + "rootDir": ".", + "strict": true, + "esModuleInterop": true, + "skipLibCheck": true, + "forceConsistentCasingInFileNames": true + } +}