| 29 Apr 2025 |
c3n21 | * My current attempt is already using fetchYarnBerryDeps (on my machine, not on the PR), but it seems that with pnp it just doesn't work, do you think I should report it here https://github.com/NixOS/nixpkgs/pull/399404? | 16:31:12 |
Cathal | Hmm, the actual fetcher seems to work fine manually for me. e.g. this works correctly:
{
stdenv,
fetchFromGitHub,
yarn-berry_3,
nodejs,
}:
stdenv.mkDerivation (finalAttrs: {
pname = "verdaccio";
version = "6.1.2";
src = fetchFromGitHub {
owner = "verdaccio";
repo = "verdaccio";
rev = "v${finalAttrs.version}";
hash = "sha256-EssvN5HtGI5Hmw4EXetj5nzrkBZAAJGgOx09dlYJzhI=";
};
nativeBuildInputs = [
yarn-berry_3.yarnBerryConfigHook
yarn-berry_3
nodejs
];
offlineCache = yarn-berry_3.fetchYarnBerryDeps {
inherit (finalAttrs) src;
hash = "sha256-jzkmDxQtIFMa1LIPcvKKsXIItPntgXTavoWhd5eZWyQ=";
};
buildPhase = ''
yarn build
'';
installPhase = ''
mkdir -p $out
cp -r build $out
'';
})
| 16:33:21 |
c3n21 | Yes the fetcher seems to work
Try this
{
lib,
stdenv,
nodejs,
fetchFromGitHub,
yarn-berry_3,
}:
let
yarn-berry = yarn-berry_3;
in
stdenv.mkDerivation (finalAttrs: rec {
pname = "verdaccio";
version = "6.1.2";
src = fetchFromGitHub {
owner = "verdaccio";
repo = pname;
rev = "v${version}";
hash = "sha256-EssvN5HtGI5Hmw4EXetj5nzrkBZAAJGgOx09dlYJzhI=";
};
nativeBuildInputs = [
nodejs
yarn-berry
yarn-berry.yarnBerryConfigHook
];
offlineCache = yarn-berry.fetchYarnBerryDeps {
inherit (finalAttrs) src;
hash = "sha256-jzkmDxQtIFMa1LIPcvKKsXIItPntgXTavoWhd5eZWyQ=";
};
buildPhase = ''
runHook preBuild
yarn run build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r {bin,build,package.json,.pnp.cjs} $out/
runHook postInstall
'';
meta = with lib; {
description = "A simple, zero-config-required local private npm registry";
longDescription = ''
Verdaccio is a simple, zero-config-required local private npm registry. No need for an entire database just to get started! Verdaccio comes out of the box with its own tiny database, and the ability to proxy other registries (eg. npmjs.org), caching the downloaded modules along the way. For those looking to extend their storage capabilities, Verdaccio supports various community-made plugins to hook into services such as Amazon's s3, Google Cloud Storage or create your own plugin.
'';
homepage = "https://verdaccio.org";
license = licenses.mit;
};
})
| 16:34:14 |
c3n21 | * Yes the fetcher seems to work but when you try to run the entrypoint script it doesn't work
Try this
{
lib,
stdenv,
nodejs,
fetchFromGitHub,
yarn-berry_3,
}:
let
yarn-berry = yarn-berry_3;
in
stdenv.mkDerivation (finalAttrs: rec {
pname = "verdaccio";
version = "6.1.2";
src = fetchFromGitHub {
owner = "verdaccio";
repo = pname;
rev = "v${version}";
hash = "sha256-EssvN5HtGI5Hmw4EXetj5nzrkBZAAJGgOx09dlYJzhI=";
};
nativeBuildInputs = [
nodejs
yarn-berry
yarn-berry.yarnBerryConfigHook
];
offlineCache = yarn-berry.fetchYarnBerryDeps {
inherit (finalAttrs) src;
hash = "sha256-jzkmDxQtIFMa1LIPcvKKsXIItPntgXTavoWhd5eZWyQ=";
};
buildPhase = ''
runHook preBuild
yarn run build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r {bin,build,package.json,.pnp.cjs} $out/
runHook postInstall
'';
meta = with lib; {
description = "A simple, zero-config-required local private npm registry";
longDescription = ''
Verdaccio is a simple, zero-config-required local private npm registry. No need for an entire database just to get started! Verdaccio comes out of the box with its own tiny database, and the ability to proxy other registries (eg. npmjs.org), caching the downloaded modules along the way. For those looking to extend their storage capabilities, Verdaccio supports various community-made plugins to hook into services such as Amazon's s3, Google Cloud Storage or create your own plugin.
'';
homepage = "https://verdaccio.org";
license = licenses.mit;
};
})
| 16:35:00 |
c3n21 | * Yes the fetcher seems to work but when you try to run the entrypoint script it doesn't work
Try this
{
lib,
stdenv,
nodejs,
fetchFromGitHub,
yarn-berry_3,
}:
let
yarn-berry = yarn-berry_3;
in
stdenv.mkDerivation (finalAttrs: rec {
pname = "verdaccio";
version = "6.1.2";
src = fetchFromGitHub {
owner = "verdaccio";
repo = pname;
rev = "v${version}";
hash = "sha256-EssvN5HtGI5Hmw4EXetj5nzrkBZAAJGgOx09dlYJzhI=";
};
nativeBuildInputs = [
nodejs
yarn-berry
yarn-berry.yarnBerryConfigHook
];
offlineCache = yarn-berry.fetchYarnBerryDeps {
inherit (finalAttrs) src;
hash = "sha256-jzkmDxQtIFMa1LIPcvKKsXIItPntgXTavoWhd5eZWyQ=";
};
buildPhase = ''
runHook preBuild
yarn run build
runHook postBuild
'';
installPhase = ''
runHook preInstall
mkdir -p $out
cp -r {bin,build,package.json,.pnp.cjs} $out/
runHook postInstall
'';
meta = with lib; {
description = "A simple, zero-config-required local private npm registry";
longDescription = ''
Verdaccio is a simple, zero-config-required local private npm registry. No need for an entire database just to get started! Verdaccio comes out of the box with its own tiny database, and the ability to proxy other registries (eg. npmjs.org), caching the downloaded modules along the way. For those looking to extend their storage capabilities, Verdaccio supports various community-made plugins to hook into services such as Amazon's s3, Google Cloud Storage or create your own plugin.
'';
homepage = "https://verdaccio.org";
license = licenses.mit;
};
})
and run ./result/bin/verdaccio
| 16:36:05 |
Cathal | Yeah I see what you mean now. I wonder if the yarnInstallHook has any support for PNP mode? Probably not though. | 16:38:45 |
c3n21 | Yeah, at this point I'm wondering if I should just wait the release of 7.x as the author told me that it will use pnpm or just try to hack this around | 16:44:21 |
Cathal | I'm no yarn expert, but from a quick search seems that it should be possible to wrap the end binary to correctly pass the .pnp files, or set an env var. I came across this for example: https://github.com/madjam002/yarnpnp2nix/blob/master/lib/mkYarnPackage.nix#L196-L197 | 16:48:16 |
Cathal | Might be more trouble than it's worth for the Verdaccio pakcage specifically, since they're switching to pnpm anyways, but there will likely be other packages who hit this issue in the future. | 16:51:29 |