138 lines
3.7 KiB
Nix
138 lines
3.7 KiB
Nix
|
{ lib, stdenvNoCC, rustPlatform, Security, testers, fetchurl, prefetch-npm-deps, fetchNpmDeps }:
|
||
|
|
||
|
{
|
||
|
prefetch-npm-deps = rustPlatform.buildRustPackage {
|
||
|
pname = "prefetch-npm-deps";
|
||
|
version = (lib.importTOML ./Cargo.toml).package.version;
|
||
|
|
||
|
src = lib.cleanSourceWith {
|
||
|
src = ./.;
|
||
|
filter = name: type:
|
||
|
let
|
||
|
name' = builtins.baseNameOf name;
|
||
|
in
|
||
|
name' != "default.nix" && name' != "target";
|
||
|
};
|
||
|
|
||
|
cargoLock.lockFile = ./Cargo.lock;
|
||
|
|
||
|
buildInputs = lib.optional stdenvNoCC.isDarwin Security;
|
||
|
|
||
|
passthru.tests =
|
||
|
let
|
||
|
makeTestSrc = { name, src }: stdenvNoCC.mkDerivation {
|
||
|
name = "${name}-src";
|
||
|
|
||
|
inherit src;
|
||
|
|
||
|
buildCommand = ''
|
||
|
mkdir -p $out
|
||
|
cp $src $out/package-lock.json
|
||
|
'';
|
||
|
};
|
||
|
|
||
|
makeTest = { name, src, hash }: testers.invalidateFetcherByDrvHash fetchNpmDeps {
|
||
|
inherit name hash;
|
||
|
|
||
|
src = makeTestSrc { inherit name src; };
|
||
|
};
|
||
|
in
|
||
|
{
|
||
|
lockfileV1 = makeTest {
|
||
|
name = "lockfile-v1";
|
||
|
|
||
|
src = fetchurl {
|
||
|
url = "https://raw.githubusercontent.com/jellyfin/jellyfin-web/v10.8.4/package-lock.json";
|
||
|
hash = "sha256-uQmc+S+V1co1Rfc4d82PpeXjmd1UqdsG492ADQFcZGA=";
|
||
|
};
|
||
|
|
||
|
hash = "sha256-fk7L9vn8EHJsGJNMAjYZg9h0PT6dAwiahdiEeXVrMB8=";
|
||
|
};
|
||
|
|
||
|
lockfileV2 = makeTest {
|
||
|
name = "lockfile-v2";
|
||
|
|
||
|
src = fetchurl {
|
||
|
url = "https://raw.githubusercontent.com/jesec/flood/v4.7.0/package-lock.json";
|
||
|
hash = "sha256-qS29tq5QPnGxV+PU40VgMAtdwVLtLyyhG2z9GMeYtC4=";
|
||
|
};
|
||
|
|
||
|
hash = "sha256-s8SpZY/1tKZVd3vt7sA9vsqHvEaNORQBMrSyhWpj048=";
|
||
|
};
|
||
|
|
||
|
hashPrecedence = makeTest {
|
||
|
name = "hash-precedence";
|
||
|
|
||
|
src = fetchurl {
|
||
|
url = "https://raw.githubusercontent.com/matrix-org/matrix-appservice-irc/0.34.0/package-lock.json";
|
||
|
hash = "sha256-1+0AQw9EmbHiMPA/H8OP8XenhrkhLRYBRhmd1cNPFjk=";
|
||
|
};
|
||
|
|
||
|
hash = "sha256-KRxwrEij3bpZ5hbQhX67KYpnY2cRS7u2EVZIWO1FBPM=";
|
||
|
};
|
||
|
|
||
|
hostedGitDeps = makeTest {
|
||
|
name = "hosted-git-deps";
|
||
|
|
||
|
src = fetchurl {
|
||
|
url = "https://cyberchaos.dev/yuka/trainsearch/-/raw/e3cba6427e8ecfd843d0f697251ddaf5e53c2327/package-lock.json";
|
||
|
hash = "sha256-X9mCwPqV5yP0S2GonNvpYnLSLJMd/SUIked+hMRxDpA=";
|
||
|
};
|
||
|
|
||
|
hash = "sha256-oIM05TGHstX1D4k2K4TJ+SHB7H/tNKzxzssqf0GJwvY=";
|
||
|
};
|
||
|
};
|
||
|
|
||
|
meta = with lib; {
|
||
|
description = "Prefetch dependencies from npm (for use with `fetchNpmDeps`)";
|
||
|
maintainers = with maintainers; [ winter ];
|
||
|
license = licenses.mit;
|
||
|
};
|
||
|
};
|
||
|
|
||
|
fetchNpmDeps =
|
||
|
{ name ? "npm-deps"
|
||
|
, hash ? ""
|
||
|
, ...
|
||
|
} @ args:
|
||
|
let
|
||
|
hash_ =
|
||
|
if hash != "" then {
|
||
|
outputHash = hash;
|
||
|
} else {
|
||
|
outputHash = "";
|
||
|
outputHashAlgo = "sha256";
|
||
|
};
|
||
|
in
|
||
|
stdenvNoCC.mkDerivation (args // {
|
||
|
inherit name;
|
||
|
|
||
|
nativeBuildInputs = [ prefetch-npm-deps ];
|
||
|
|
||
|
buildPhase = ''
|
||
|
runHook preBuild
|
||
|
|
||
|
if [[ ! -f package-lock.json ]]; then
|
||
|
echo
|
||
|
echo "ERROR: The package-lock.json file does not exist!"
|
||
|
echo
|
||
|
echo "package-lock.json is required to make sure that npmDepsHash doesn't change"
|
||
|
echo "when packages are updated on npm."
|
||
|
echo
|
||
|
echo "Hint: You can use the patches attribute to add a package-lock.json manually to the build."
|
||
|
echo
|
||
|
|
||
|
exit 1
|
||
|
fi
|
||
|
|
||
|
prefetch-npm-deps package-lock.json $out
|
||
|
|
||
|
runHook postBuild
|
||
|
'';
|
||
|
|
||
|
dontInstall = true;
|
||
|
|
||
|
outputHashMode = "recursive";
|
||
|
} // hash_);
|
||
|
}
|