release: forbid use of `lib.fileset` in Nixpkgs (#369694)

Changed files
+115 -160
doc
nixos
pkgs
+3 -4
doc/doc-support/lib-function-docs.nix
···
stdenvNoCC.mkDerivation {
name = "nixpkgs-lib-docs";
-
src = lib.fileset.toSource {
-
root = ../..;
-
fileset = ../../lib;
-
};
+
src = ../../lib;
nativeBuildInputs = [
nixdoc
···
];
installPhase = ''
+
cd ..
+
export NIX_STATE_DIR=$(mktemp -d)
nix-instantiate --eval --strict --json ${./lib-function-locations.nix} \
--arg nixpkgsPath "./." \
+16 -10
doc/doc-support/package.nix
···
nativeBuildInputs = [ nixos-render-docs ];
-
src = lib.fileset.toSource {
-
root = ../.;
-
fileset = lib.fileset.unions [
-
(lib.fileset.fileFilter (file: file.hasExt "md" || file.hasExt "md.in") ../.)
-
../style.css
-
../anchor-use.js
-
../anchor.min.js
-
../manpage-urls.json
-
../redirects.json
-
];
+
src = lib.cleanSourceWith {
+
src = ../.;
+
filter =
+
path: type:
+
type == "directory"
+
|| lib.hasSuffix ".md" path
+
|| lib.hasSuffix ".md.in" path
+
|| lib.elem path (
+
map toString [
+
../style.css
+
../anchor-use.js
+
../anchor.min.js
+
../manpage-urls.json
+
../redirects.json
+
]
+
);
};
postPatch = ''
+1 -11
nixos/lib/test-driver/default.nix
···
extraPythonPackages ? (_: [ ]),
nixosTests,
}:
-
let
-
fs = lib.fileset;
-
in
python3Packages.buildPythonApplication {
pname = "nixos-test-driver";
version = "1.1";
pyproject = true;
-
src = fs.toSource {
-
root = ./.;
-
fileset = fs.unions [
-
./pyproject.toml
-
./test_driver
-
./extract-docstrings.py
-
];
-
};
+
src = ./src;
build-system = with python3Packages; [
setuptools
nixos/lib/test-driver/extract-docstrings.py nixos/lib/test-driver/src/extract-docstrings.py
+1 -1
nixos/lib/test-driver/nixos-test-driver-docstrings.nix
···
runCommand "nixos-test-driver-docstrings" env ''
mkdir $out
-
python3 ${./extract-docstrings.py} ${./test_driver/machine.py} \
+
python3 ${./src/extract-docstrings.py} ${./src/test_driver/machine.py} \
> $out/machine-methods.md
''
nixos/lib/test-driver/pyproject.toml nixos/lib/test-driver/src/pyproject.toml
nixos/lib/test-driver/test_driver/__init__.py nixos/lib/test-driver/src/test_driver/__init__.py
nixos/lib/test-driver/test_driver/driver.py nixos/lib/test-driver/src/test_driver/driver.py
nixos/lib/test-driver/test_driver/logger.py nixos/lib/test-driver/src/test_driver/logger.py
nixos/lib/test-driver/test_driver/machine.py nixos/lib/test-driver/src/test_driver/machine.py
nixos/lib/test-driver/test_driver/polling_condition.py nixos/lib/test-driver/src/test_driver/polling_condition.py
nixos/lib/test-driver/test_driver/py.typed nixos/lib/test-driver/src/test_driver/py.typed
nixos/lib/test-driver/test_driver/qmp.py nixos/lib/test-driver/src/test_driver/qmp.py
nixos/lib/test-driver/test_driver/vlan.py nixos/lib/test-driver/src/test_driver/vlan.py
pkgs/build-support/testers/shellcheck/example.sh pkgs/build-support/testers/shellcheck/src/example.sh
+6 -5
pkgs/build-support/testers/shellcheck/tester.nix
···
{
lib,
stdenv,
+
runCommand,
shellcheck,
}:
···
# Tests: ./tests.nix
{ src }:
let
-
inherit (lib) fileset pathType isPath;
+
inherit (lib) pathType isPath;
in
stdenv.mkDerivation {
name = "run-shellcheck";
···
if
isPath src && pathType src == "regular" # note that for strings this would have been IFD, which we prefer to avoid
then
-
fileset.toSource {
-
root = dirOf src;
-
fileset = src;
-
}
+
runCommand "testers-shellcheck-src" { } ''
+
mkdir $out
+
cp ${src} $out
+
''
else
src;
nativeBuildInputs = [ shellcheck ];
+2 -10
pkgs/build-support/testers/shellcheck/tests.nix
···
testers,
runCommand,
}:
-
let
-
inherit (lib) fileset;
-
in
lib.recurseIntoAttrs {
example-dir =
···
{
failure = testers.testBuildFailure (
testers.shellcheck {
-
src = fileset.toSource {
-
root = ./.;
-
fileset = fileset.unions [
-
./example.sh
-
];
-
};
+
src = ./src;
}
);
}
···
{
failure = testers.testBuildFailure (
testers.shellcheck {
-
src = ./example.sh;
+
src = ./src/example.sh;
}
);
}
+4 -10
pkgs/by-name/fl/flattenReferencesGraph/package.nix
···
{
callPackage,
-
lib,
+
nix-gitignore,
python3Packages,
}:
let
-
inherit (lib) fileset;
helpers = callPackage ./helpers.nix { };
pythonPackages = python3Packages;
+
in
pythonPackages.buildPythonApplication {
version = "0.1.0";
pname = "flatten-references-graph";
-
src = fileset.toSource {
-
root = ./src;
-
fileset = fileset.unions [
-
./src/.flake8
-
./src/flatten_references_graph
-
./src/setup.py
-
];
-
};
+
# Note: this uses only ./src/.gitignore
+
src = nix-gitignore.gitignoreSource [ ] ./src;
propagatedBuildInputs = with pythonPackages; [
igraph
pkgs/by-name/pu/purescm/.gitignore pkgs/by-name/pu/purescm/manifests/.gitignore
+2 -2
pkgs/by-name/pu/purescm/README.rst
···
To update this package
======================
-
#. Bump the ``./package.json`` version pin
-
#. Run ``nix-shell -p nodejs --command "npm i --package-lock-only"``
+
#. Bump the ``./manifests/package.json`` version pin
+
#. Run ``(cd manifests && nix-shell -p nodejs --command "npm i --package-lock-only")``
#. Update ``npmDeps.hash`` in the ``package.nix``
pkgs/by-name/pu/purescm/package-lock.json pkgs/by-name/pu/purescm/manifests/package-lock.json
pkgs/by-name/pu/purescm/package.json pkgs/by-name/pu/purescm/manifests/package.json
+3 -16
pkgs/by-name/pu/purescm/package.nix
···
let
inherit (lib) fileset;
-
packageLock = builtins.fromJSON (builtins.readFile ./package-lock.json);
+
packageLock = builtins.fromJSON (builtins.readFile ./manifests/package-lock.json);
pname = "purescm";
version = packageLock.packages."node_modules/${pname}".version;
···
package = buildNpmPackage {
inherit pname version;
-
src = fileset.toSource {
-
root = ./.;
-
fileset = fileset.unions [
-
./package.json
-
./package-lock.json
-
./.gitignore
-
];
-
};
+
src = ./manifests;
dontNpmBuild = true;
npmDeps = fetchNpmDeps {
-
src = fileset.toSource {
-
root = ./.;
-
fileset = fileset.unions [
-
./package-lock.json
-
./package.json
-
];
-
};
+
src = ./manifests;
hash = "sha256-ljeFcLvIET77Q0OR6O5Ok1fGnaxaKaoywpcy2aHq/6o=";
};
pkgs/by-name/sh/shopify-cli/package-lock.json pkgs/by-name/sh/shopify-cli/manifests/package-lock.json
pkgs/by-name/sh/shopify-cli/package.json pkgs/by-name/sh/shopify-cli/manifests/package.json
+1 -7
pkgs/by-name/sh/shopify-cli/package.nix
···
pname = "shopify";
version = version;
-
src = lib.fileset.toSource {
-
root = ./.;
-
fileset = with lib.fileset; unions [
-
./package.json
-
./package-lock.json
-
];
-
};
+
src = ./manifests;
npmDepsHash = "sha256-QhbOKOs/0GEOeySG4uROzgtD4o7C+6tS/TAaPcmC3xk=";
dontNpmBuild = true;
+5
pkgs/by-name/sh/shopify-cli/update.sh
···
exit 0
fi
+
pushd manifests
+
# Update the package.json
sed -i "s|$UPDATE_NIX_OLD_VERSION|$version|g" package.json
···
rm -f package-lock.json
npm i --package-lock-only
npm_hash=$(prefetch-npm-deps package-lock.json)
+
+
popd
+
sed -i "s|npmDepsHash = \".*\";|npmDepsHash = \"$npm_hash\";|" package.nix
popd
pkgs/development/cuda-modules/saxpy/CMakeLists.txt pkgs/development/cuda-modules/saxpy/src/CMakeLists.txt
+1 -8
pkgs/development/cuda-modules/saxpy/default.nix
···
libcublas
;
inherit (lib) getDev getLib getOutput;
-
fs = lib.fileset;
in
backendStdenv.mkDerivation {
pname = "saxpy";
version = "unstable-2023-07-11";
-
src = fs.toSource {
-
root = ./.;
-
fileset = fs.unions [
-
./CMakeLists.txt
-
./saxpy.cu
-
];
-
};
+
src = ./src;
__structuredAttrs = true;
strictDeps = true;
pkgs/development/cuda-modules/saxpy/saxpy.cu pkgs/development/cuda-modules/saxpy/src/saxpy.cu
+1 -11
pkgs/development/python-modules/waitress-django/default.nix
···
waitress,
}:
-
let
-
fs = lib.fileset;
-
in
-
buildPythonPackage {
pname = "waitress-django";
version = "1.0.0";
pyproject = true;
-
src = fs.toSource {
-
root = ./.;
-
fileset = fs.unions [
-
./setup.py
-
./src
-
];
-
};
+
src = ./src;
build-system = [ setuptools ];
+1 -2
pkgs/development/python-modules/waitress-django/setup.py pkgs/development/python-modules/waitress-django/src/setup.py
···
, description = "A waitress WSGI server serving django"
, author = "Bas van Dijk"
, author_email = "v.dijk.bas@gmail.com"
-
, package_dir = {"" : "src"}
-
, scripts = ["src/waitress-serve-django"]
+
, scripts = ["waitress-serve-django"]
)
+3 -11
pkgs/development/tools/yarn2nix-moretea/yarn2nix/default.nix pkgs/development/tools/yarn2nix-moretea/default.nix
···
});
yarn2nix = mkYarnPackage {
-
src = lib.fileset.toSource {
-
root = ./.;
-
fileset = lib.fileset.unions [
-
./bin
-
./lib
-
./package.json
-
./yarn.lock
-
];
-
};
+
src = ./yarn2nix;
# yarn2nix is the only package that requires the yarnNix option.
# All the other projects can auto-generate that file.
···
# Using the filter above and importing package.json from the filtered
# source results in an error in restricted mode. To circumvent this,
# we import package.json from the unfiltered source
-
packageJSON = ./package.json;
+
packageJSON = ./yarn2nix/package.json;
yarnFlags = defaultYarnFlags ++ [ "--ignore-scripts" "--production=true" ];
···
mkdir -p $out/lib
mkdir -p $out/bin
-
cp ${./lib/urlToName.js} $out/lib/urlToName.js
+
cp ${./yarn2nix/lib/urlToName.js} $out/lib/urlToName.js
cp ${./internal/fixup_yarn_lock.js} $out/bin/fixup_yarn_lock
patchShebangs $out
pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_bin.js pkgs/development/tools/yarn2nix-moretea/internal/fixup_bin.js
pkgs/development/tools/yarn2nix-moretea/yarn2nix/internal/fixup_yarn_lock.js pkgs/development/tools/yarn2nix-moretea/internal/fixup_yarn_lock.js
pkgs/development/tools/yarn2nix-moretea/yarn2nix/nix/expectShFunctions.sh pkgs/development/tools/yarn2nix-moretea/nix/expectShFunctions.sh
pkgs/development/tools/yarn2nix-moretea/yarn2nix/yarn.nix pkgs/development/tools/yarn2nix-moretea/yarn.nix
+3 -15
pkgs/test/haskell/cabalSdist/default.nix
···
}:
let
-
src = lib.fileset.toSource {
-
root = ./local;
-
fileset = lib.fileset.unions [
-
./local/app
-
./local/CHANGELOG.md
-
./local/local.cabal
-
];
-
};
-
# This prevents the source from depending on the formatting of the ./local/generated.nix file
-
localRaw = haskell.lib.compose.overrideSrc {
-
inherit src;
-
} (haskellPackages.callPackage ./local/generated.nix { });
+
localRaw = haskellPackages.callPackage ./generated.nix { };
in
lib.recurseIntoAttrs rec {
···
localFromCabalSdist = haskellPackages.buildFromCabalSdist localRaw;
-
# NOTE: ./local refers to the "./." path in `./local/generated.nix`.
# This test makes sure that localHasNoDirectReference can actually fail if
# it doesn't do anything. If this test fails, either the test setup was broken,
# or Haskell packaging has changed the way `src` is treated in such a way that
···
drvPath = builtins.unsafeDiscardOutputDependency localRaw.drvPath;
}
''
-
grep ${src} $drvPath >/dev/null
+
grep ${localRaw.src} $drvPath >/dev/null
touch $out
'';
···
drvPath = builtins.unsafeDiscardOutputDependency localFromCabalSdist.drvPath;
}
''
-
grep -v ${src} $drvPath >/dev/null
+
grep -v ${localRaw.src} $drvPath >/dev/null
touch $out
'';
}
+3 -2
pkgs/test/haskell/cabalSdist/local/generated.nix pkgs/test/haskell/cabalSdist/generated.nix
···
-
# nix run ../../../../..#cabal2nix -- ./.
+
# nix run ../../../../..#cabal2nix -- ./local
{
mkDerivation,
base,
···
mkDerivation {
pname = "local";
version = "0.1.0.0";
-
src = ./.; # also referred to as ./local in the test; these are the same path constants
+
src = ./local;
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [ base ];
description = "Nixpkgs test case";
license = lib.licenses.mit;
+
mainProgram = "local";
}
pkgs/test/haskell/setBuildTarget/Bar.hs pkgs/test/haskell/setBuildTarget/src/Bar.hs
pkgs/test/haskell/setBuildTarget/Foo.hs pkgs/test/haskell/setBuildTarget/src/Foo.hs
pkgs/test/haskell/setBuildTarget/Setup.hs pkgs/test/haskell/setBuildTarget/src/Setup.hs
+3 -11
pkgs/test/haskell/setBuildTarget/default.nix
···
{ pkgs, haskellPackages }:
let
-
# This can be regenerated by running `cabal2nix .` in the current directory.
+
# This can be regenerated by running `cabal2nix ./src` in the current directory.
pkgDef =
{
mkDerivation,
···
mkDerivation {
pname = "haskell-setBuildTarget";
version = "0.1.0.0";
-
src = lib.fileset.toSource {
-
root = ./.;
-
fileset = lib.fileset.unions [
-
./haskell-setBuildTarget.cabal
-
./Bar.hs
-
./Foo.hs
-
./Setup.hs
-
];
-
};
+
src = ./src;
isLibrary = false;
isExecutable = true;
executableHaskellDepends = [ base ];
-
license = lib.licenses.bsd3;
+
license = "unknown";
};
drv = haskellPackages.callPackage pkgDef { };
pkgs/test/haskell/setBuildTarget/haskell-setBuildTarget.cabal pkgs/test/haskell/setBuildTarget/src/haskell-setBuildTarget.cabal
pkgs/test/make-binary-wrapper/add-flags.c pkgs/test/make-binary-wrapper/add-flags/add-flags.c
pkgs/test/make-binary-wrapper/add-flags.cmdline pkgs/test/make-binary-wrapper/add-flags/add-flags.cmdline
pkgs/test/make-binary-wrapper/add-flags.env pkgs/test/make-binary-wrapper/add-flags/add-flags.env
pkgs/test/make-binary-wrapper/argv0.c pkgs/test/make-binary-wrapper/argv0/argv0.c
pkgs/test/make-binary-wrapper/argv0.cmdline pkgs/test/make-binary-wrapper/argv0/argv0.cmdline
pkgs/test/make-binary-wrapper/argv0.env pkgs/test/make-binary-wrapper/argv0/argv0.env
pkgs/test/make-binary-wrapper/basic.c pkgs/test/make-binary-wrapper/basic/basic.c
pkgs/test/make-binary-wrapper/basic.cmdline pkgs/test/make-binary-wrapper/basic/basic.cmdline
pkgs/test/make-binary-wrapper/basic.env pkgs/test/make-binary-wrapper/basic/basic.env
pkgs/test/make-binary-wrapper/chdir.c pkgs/test/make-binary-wrapper/chdir/chdir.c
pkgs/test/make-binary-wrapper/chdir.cmdline pkgs/test/make-binary-wrapper/chdir/chdir.cmdline
pkgs/test/make-binary-wrapper/chdir.env pkgs/test/make-binary-wrapper/chdir/chdir.env
pkgs/test/make-binary-wrapper/combination.c pkgs/test/make-binary-wrapper/combination/combination.c
pkgs/test/make-binary-wrapper/combination.cmdline pkgs/test/make-binary-wrapper/combination/combination.cmdline
pkgs/test/make-binary-wrapper/combination.env pkgs/test/make-binary-wrapper/combination/combination.env
+1 -10
pkgs/test/make-binary-wrapper/default.nix
···
runCommand "make-binary-wrapper-test-${testname}" env ''
mkdir -p tmp/foo # for the chdir test
-
source=${
-
lib.fileset.toSource {
-
root = ./.;
-
fileset = lib.fileset.unions [
-
(./. + "/${testname}.cmdline")
-
(./. + "/${testname}.c")
-
(lib.fileset.maybeMissing (./. + "/${testname}.env"))
-
];
-
}
-
}
+
source=${./${testname}}
params=$(<"$source/${testname}.cmdline")
eval "makeCWrapper /send/me/flags $params" > wrapper.c
pkgs/test/make-binary-wrapper/env.c pkgs/test/make-binary-wrapper/env/env.c
pkgs/test/make-binary-wrapper/env.cmdline pkgs/test/make-binary-wrapper/env/env.cmdline
pkgs/test/make-binary-wrapper/env.env pkgs/test/make-binary-wrapper/env/env.env
pkgs/test/make-binary-wrapper/inherit-argv0.c pkgs/test/make-binary-wrapper/inherit-argv0/inherit-argv0.c
pkgs/test/make-binary-wrapper/inherit-argv0.cmdline pkgs/test/make-binary-wrapper/inherit-argv0/inherit-argv0.cmdline
pkgs/test/make-binary-wrapper/inherit-argv0.env pkgs/test/make-binary-wrapper/inherit-argv0/inherit-argv0.env
pkgs/test/make-binary-wrapper/invalid-env.c pkgs/test/make-binary-wrapper/invalid-env/invalid-env.c
pkgs/test/make-binary-wrapper/invalid-env.cmdline pkgs/test/make-binary-wrapper/invalid-env/invalid-env.cmdline
pkgs/test/make-binary-wrapper/overlength-strings.c pkgs/test/make-binary-wrapper/overlength-strings/overlength-strings.c
pkgs/test/make-binary-wrapper/overlength-strings.cmdline pkgs/test/make-binary-wrapper/overlength-strings/overlength-strings.cmdline
pkgs/test/make-binary-wrapper/overlength-strings.env pkgs/test/make-binary-wrapper/overlength-strings/overlength-strings.env
pkgs/test/make-binary-wrapper/prefix.c pkgs/test/make-binary-wrapper/prefix/prefix.c
pkgs/test/make-binary-wrapper/prefix.cmdline pkgs/test/make-binary-wrapper/prefix/prefix.cmdline
pkgs/test/make-binary-wrapper/prefix.env pkgs/test/make-binary-wrapper/prefix/prefix.env
pkgs/test/make-binary-wrapper/suffix.c pkgs/test/make-binary-wrapper/suffix/suffix.c
pkgs/test/make-binary-wrapper/suffix.cmdline pkgs/test/make-binary-wrapper/suffix/suffix.cmdline
pkgs/test/make-binary-wrapper/suffix.env pkgs/test/make-binary-wrapper/suffix/suffix.env
+1 -1
pkgs/top-level/all-packages.nix
···
yarn-berry = callPackage ../development/tools/yarn-berry { };
-
yarn2nix-moretea = callPackage ../development/tools/yarn2nix-moretea/yarn2nix { pkgs = pkgs.__splicedPackages; };
+
yarn2nix-moretea = callPackage ../development/tools/yarn2nix-moretea { pkgs = pkgs.__splicedPackages; };
inherit (yarn2nix-moretea)
yarn2nix
+22 -1
pkgs/top-level/default.nix
···
, # Allow a configuration attribute set to be passed in as an argument.
config ? {}
+
, # Temporary hack to let Nixpkgs forbid internal use of `lib.fileset`
+
# until <https://github.com/NixOS/nix/issues/11503> is fixed.
+
__allowFileset ? true
+
, # List of overlays layers used to extend Nixpkgs.
overlays ? []
···
crossSystem0 = crossSystem;
in let
-
lib = import ../../lib;
+
pristineLib = import ../../lib;
+
+
lib =
+
if __allowFileset then
+
pristineLib
+
else
+
pristineLib.extend (_: _: {
+
fileset = abort ''
+
+
The use of `lib.fileset` is currently forbidden in Nixpkgs due to the
+
upstream Nix bug <https://github.com/NixOS/nix/issues/11503>. This
+
causes difficult‐to‐debug errors when combined with chroot stores,
+
such as in the NixOS installer.
+
+
For packages that require source to be vendored inside Nixpkgs,
+
please use a subdirectory of the package instead.
+
'';
+
});
inherit (lib) throwIfNot;
+4 -1
pkgs/top-level/release-cross.nix
···
, # Strip most of attributes when evaluating to spare memory usage
scrubJobs ? true
, # Attributes passed to nixpkgs. Don't build packages marked as unfree.
-
nixpkgsArgs ? { config = { allowUnfree = false; inHydra = true; }; }
+
nixpkgsArgs ? {
+
config = { allowUnfree = false; inHydra = true; };
+
__allowFileset = false;
+
}
}:
let
+2
pkgs/top-level/release-cuda.nix
···
"${variant}Support" = true;
inHydra = true;
};
+
+
__allowFileset = false;
},
...
}@args:
+4 -1
pkgs/top-level/release-lib.nix
···
, packageSet ? (import ../..)
, scrubJobs ? true
, # Attributes passed to nixpkgs. Don't build packages marked as unfree.
-
nixpkgsArgs ? { config = { allowUnfree = false; inHydra = true; }; }
+
nixpkgsArgs ? {
+
config = { allowUnfree = false; inHydra = true; };
+
__allowFileset = false;
+
}
}:
let
+2
pkgs/top-level/release-outpaths.nix
···
inHydra = true;
};
+
+
__allowFileset = false;
};
};
recurseIntoAttrs = attrs: attrs // { recurseForDerivations = true; };
+2
pkgs/top-level/release-python.nix
···
allowUnfree = false;
inHydra = true;
};
+
+
__allowFileset = false;
},
}:
+2
pkgs/top-level/release-small.nix
···
allowUnfree = false;
inHydra = true;
};
+
+
__allowFileset = false;
},
}:
+2
pkgs/top-level/release-unfree-redistributable.nix
···
cudaSupport = true;
inHydra = true;
};
+
+
__allowFileset = false;
},
# We only build the full package set on infrequently releasing channels.
full ? false,
+14 -10
pkgs/top-level/release.nix
···
# Strip most of attributes when evaluating to spare memory usage
, scrubJobs ? true
# Attributes passed to nixpkgs. Don't build packages marked as unfree.
-
, nixpkgsArgs ? { config = {
-
allowUnfree = false;
-
inHydra = true;
-
# Exceptional unsafe packages that we still build and distribute,
-
# so users choosing to allow don't have to rebuild them every time.
-
permittedInsecurePackages = [
-
"olm-3.2.16" # see PR #347899
-
"kanidm_1_3-1.3.3"
-
];
-
}; }
+
, nixpkgsArgs ? {
+
config = {
+
allowUnfree = false;
+
inHydra = true;
+
# Exceptional unsafe packages that we still build and distribute,
+
# so users choosing to allow don't have to rebuild them every time.
+
permittedInsecurePackages = [
+
"olm-3.2.16" # see PR #347899
+
"kanidm_1_3-1.3.3"
+
];
+
};
+
+
__allowFileset = false;
+
}
# This flag, if set to true, will inhibit the use of `mapTestOn`
# and `release-lib.packagePlatforms`. Generally, it causes the