12 Jan 2025 |
emily | had to backport a bunch of Node.js changes to fix a failure but the libuv , compiler versions, etc. differ across branches | 20:13:06 |
emily | hm, no, sorry, that was 22 and only on x86_64-darwin | 20:13:06 |
emily | well, it still might be my fault :) but I remember 23 building | 20:13:41 |
emily | I believe next cycle is merging all the other Node/libuv changes from unstable so at latest it should be fixed then but … ideally it'd get fixed before then too | 20:13:41 |
13 Jan 2025 |
rosssmyth | I am curious why with pnpm.fetchDeps I am required to provide a hash, but then with rustPlatform.importCargoLock I am not required to provide a hash for the fetched dependencies. | 03:40:58 |
Winter | because importCargoLock parses and evaluates the lock file in Nix code | 03:44:28 |
Winter | fetchDeps does not | 03:44:32 |
Winter | there is an importCargoLock equivalent for npm, but not for pnpm. | 03:45:00 |
🐰 xiaoxiangmoe | Redacted or Malformed Event | 07:12:14 |
phaer | If anyone got time for a 1-character-PR: I think a check in linkNodeModulesHook is broken:
https://github.com/NixOS/nixpkgs/pull/372631 | 12:24:59 |
🐰 xiaoxiangmoe | {
lib,
stdenv,
buildNpmPackage,
fetchFromGitHub,
nodejs,
pnpm,
cacert,
}:
buildNpmPackage rec {
pname = "ni";
version = "23.2.0";
src = fetchFromGitHub {
owner = "antfu-collective";
repo = "ni";
tag = "v${version}";
hash = "sha256-f210qz53IgUXDon4bWIp+dynJ3aWi0za0puPjplzmqg=";
};
buildInputs = [
];
nativeBuildInputs = [
nodejs
];
npmConfigHook = pnpm.configHook;
npmDeps = pnpmDeps;
pnpmDeps = pnpm.fetchDeps {
inherit pname version src;
hash = "sha256-+hnkj0uevURkRboTH8WbSt82pZTdWL4ii1PKr6NO0Cg=";
};
meta = {
description = "Use the right package manager";
homepage = "https://github.com/antfu-collective/ni";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ xiaoxiangmoe ];
};
}
This raise a error
> UNABLE_TO_GET_ISSUER_CERT_LOCALLY request to https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz failed, reason: unable to get local issuer certificate
>
> FetchError: request to https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz failed, reason: unable to get local issuer certificate
> at ClientRequest.<anonymous> (/nix/store/hhprmwazmgvxqff5zpra2bw0cb12f4sl-pnpm-9.15.3/libexec/pnpm/dist/pnpm.cjs:66979:18)
> at ClientRequest.emit (node:events:518:28)
> at emitErrorEvent (node:_http_client:103:11)
> at TLSSocket.socketErrorListener (node:_http_client:506:5)
> at TLSSocket.emit (node:events:518:28)
> at emitErrorNT (node:internal/streams/destroy:170:8)
> at emitErrorCloseNT (node:internal/streams/destroy:129:3)
> at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
> Progress: resolved 685, reused 0, downloaded 0, added 0
For full logs, run 'nix log /nix/store/i13ksyg9fqd8rlc3dywlarsvm5ix2cbn-ni-pnpm-deps.drv'.
| 14:33:34 |
🐰 xiaoxiangmoe | * {
lib,
stdenv,
buildNpmPackage,
fetchFromGitHub,
nodejs,
pnpm,
cacert,
}:
buildNpmPackage rec {
pname = "ni";
version = "23.2.0";
src = fetchFromGitHub {
owner = "antfu-collective";
repo = "ni";
tag = "v${version}";
hash = "sha256-f210qz53IgUXDon4bWIp+dynJ3aWi0za0puPjplzmqg=";
};
buildInputs = [
];
nativeBuildInputs = [
nodejs
];
npmConfigHook = pnpm.configHook;
npmDeps = pnpmDeps;
pnpmDeps = pnpm.fetchDeps {
inherit pname version src;
hash = "sha256-+hnkj0uevURkRboTH8WbSt82pZTdWL4ii1PKr6NO0Cg=";
};
meta = {
description = "Use the right package manager";
homepage = "https://github.com/antfu-collective/ni";
license = lib.licenses.mit;
maintainers = with lib.maintainers; [ xiaoxiangmoe ];
};
}
This raise a error on macOS
> UNABLE_TO_GET_ISSUER_CERT_LOCALLY request to https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz failed, reason: unable to get local issuer certificate
>
> FetchError: request to https://registry.npmjs.org/@eslint/core/-/core-0.9.0.tgz failed, reason: unable to get local issuer certificate
> at ClientRequest.<anonymous> (/nix/store/hhprmwazmgvxqff5zpra2bw0cb12f4sl-pnpm-9.15.3/libexec/pnpm/dist/pnpm.cjs:66979:18)
> at ClientRequest.emit (node:events:518:28)
> at emitErrorEvent (node:_http_client:103:11)
> at TLSSocket.socketErrorListener (node:_http_client:506:5)
> at TLSSocket.emit (node:events:518:28)
> at emitErrorNT (node:internal/streams/destroy:170:8)
> at emitErrorCloseNT (node:internal/streams/destroy:129:3)
> at process.processTicksAndRejections (node:internal/process/task_queues:90:21)
> Progress: resolved 685, reused 0, downloaded 0, added 0
For full logs, run 'nix log /nix/store/i13ksyg9fqd8rlc3dywlarsvm5ix2cbn-ni-pnpm-deps.drv'.
| 14:34:05 |
🐰 xiaoxiangmoe | Is there anyway to add cacert for pnpm.fetchDeps in macOS? | 14:41:32 |
Lily Foster | In reply to @xiaoxiangmoe:matrix.org Is there anyway to add cacert for pnpm.fetchDeps in macOS? nativeBuildInputs in the pnpm.fetchDeps ? | 14:42:15 |
Lily Foster | (i'd be surprised though if that fetcher was made so uncarefully to not handle cert stuff like other fechers (e.g. npm) do) | 14:43:11 |
🐰 xiaoxiangmoe | But this also not working
WARN GET https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz error (UNABLE_TO_GET_ISSUER_CERT_LOCALLY). Will retry in 1 minute. 1 retries left.
| 14:43:30 |
15 Jan 2025 |
rosssmyth | After setting up my aforementioned pnpm build, I am now wondering why the devshell and build derivations behave differently. My outputs look like this:
devShells.default = pkgs.mkShellNoCC {
inherit pnpmDeps cargoDeps;
inputsFrom = [ self.packages.${system}.default ];
};
packages.default = pkgs.stdenvNoCC.mkDerivation (finalAttrs: {
inherit pnpmDeps cargoDeps pname version;
src = gitignoreSource ./.;
strict = true;
doCheck = false;
nativeBuildInputs = with pkgs; [
wasm-bindgen-cli
nodejs
nodejs.pkgs.pnpm.configHook
pkgs.rustPlatform.cargoSetupHook
wrappedWasmPack
(rust-bin.stable.latest.default.override {targets = ["wasm32-unknown-unknown"];})
];
buildPhase = ''
pnpm build
'';
installPhase = ''
mv dist/ $out
'';
});
The packaging derivation works exactly how I want it. But the devshell does not. Specifically, while in the packaging derivation all the dependencies are installed and then all I need to do is run "pnpm build" in the build phase as shown. But in the dev shell when I execute "pnpm build" pnpm complains that I need to install the dependencies still.
Is there something I am missing? Is mkshell different from mkderivation in a way that prevents this? Obviously it is impure, but I'd like to confine the dependencies in the store as much as I can.
| 02:58:12 |
Winter | it does not have the config hook. | 03:12:47 |
Winter | *run | 03:13:18 |
Winter | those setup hooks do not run when in a devshell | 03:13:37 |
rosssmyth | 😔 | 03:26:03 |
rosssmyth | It does download them somewhere to my store. It's just not setup so that pnpm can see the dependencies | 03:26:40 |
Winter | you can set that up with a shell hook | 03:39:57 |
rosssmyth | good idea | 03:41:34 |
rosssmyth | That does work | 03:41:43 |
| SomeoneSerge (Ever OOMed by Element) changed their display name from SomeoneSerge (utc+3) to SomeoneSerge. | 19:02:28 |
16 Jan 2025 |
| Hannes joined the room. | 01:28:40 |
Hannes | Hi, can someone tell what is the preferred way of packaging a Node.js CLI in nixpkgs? Should I add it to pkgs/development/node-packages/node-packages.json or use buildNpmPackage ? | 02:14:21 |
emily | latter | 02:16:10 |
Hannes | Thanks, I'm glad because I tried the first method and it wasn't working 😅 | 02:16:47 |