diff --git a/pkgs/build-support/node/fetch-yarn-deps/index.js b/pkgs/build-support/node/fetch-yarn-deps/index.js index e60fdeb54330..400b64d2e920 100755 --- a/pkgs/build-support/node/fetch-yarn-deps/index.js +++ b/pkgs/build-support/node/fetch-yarn-deps/index.js @@ -39,7 +39,7 @@ const downloadFileHttps = (fileName, url, expectedHash, hashType = 'sha1') => { const h = hash.read() if (expectedHash === undefined){ console.log(`Warning: lockfile url ${url} doesn't end in "#" to validate against. Downloaded file had hash ${h}.`); - } else if (h != expectedHash) return reject(new Error(`hash mismatch, expected ${expectedHash}, got ${h}`)) + } else if (h != expectedHash) return reject(new Error(`hash mismatch, expected ${expectedHash}, got ${h} for ${url}`)) resolve() }) res.on('error', e => reject(e)) @@ -104,11 +104,14 @@ const downloadPkg = (pkg, verbose) => { const [ url, hash ] = pkg.resolved.split('#') if (verbose) console.log('downloading ' + url) const fileName = urlToName(url) + const s = url.split('/') if (url.startsWith('https://codeload.github.com/') && url.includes('/tar.gz/')) { - const s = url.split('/') return downloadGit(fileName, `https://github.com/${s[3]}/${s[4]}.git`, s[s.length-1]) - } else if (url.startsWith('https://github.com/') && url.endsWith('.tar.gz')) { - const s = url.split('/') + } else if (url.startsWith('https://github.com/') && url.endsWith('.tar.gz') && + ( + s.length <= 5 || // https://github.com/owner/repo.tgz#feedface... + s[5] == "archive" // https://github.com/owner/repo/archive/refs/tags/v0.220.1.tar.gz + )) { return downloadGit(fileName, `https://github.com/${s[3]}/${s[4]}.git`, s[s.length-1].replace(/.tar.gz$/, '')) } else if (isGitUrl(url)) { return downloadGit(fileName, url.replace(/^git\+/, ''), hash) diff --git a/pkgs/build-support/node/fetch-yarn-deps/tests/default.nix b/pkgs/build-support/node/fetch-yarn-deps/tests/default.nix index 8057d05ba72c..2d563dac87dc 100644 --- a/pkgs/build-support/node/fetch-yarn-deps/tests/default.nix +++ b/pkgs/build-support/node/fetch-yarn-deps/tests/default.nix @@ -17,6 +17,10 @@ yarnLock = ./github.lock; sha256 = "sha256-DIKrhDKoqm7tHZmcuh9eK9VTqp6BxeW0zqDUpY4F57A="; }; + githubReleaseDep = testers.invalidateFetcherByDrvHash fetchYarnDeps { + yarnLock = ./github-release.lock; + sha256 = "sha256-g+y/H6k8LZ+IjWvkkwV7JhKQH1ycfeqzsIonNv4fDq8="; + }; gitUrlDep = testers.invalidateFetcherByDrvHash fetchYarnDeps { yarnLock = ./giturl.lock; sha256 = "sha256-VPnyqN6lePQZGXwR7VhbFnP7/0/LB621RZwT1F+KzVQ="; diff --git a/pkgs/build-support/node/fetch-yarn-deps/tests/github-release.lock b/pkgs/build-support/node/fetch-yarn-deps/tests/github-release.lock new file mode 100644 index 000000000000..267a2510067d --- /dev/null +++ b/pkgs/build-support/node/fetch-yarn-deps/tests/github-release.lock @@ -0,0 +1,6 @@ +"libsession_util_nodejs@https://github.com/oxen-io/libsession-util-nodejs/releases/download/v0.3.19/libsession_util_nodejs-v0.3.19.tar.gz": + version "0.3.19" + resolved "https://github.com/oxen-io/libsession-util-nodejs/releases/download/v0.3.19/libsession_util_nodejs-v0.3.19.tar.gz#221c1fc34fcc18601aea4ce1b733ebfa55af66ea" + dependencies: + cmake-js "^7.2.1" + node-addon-api "^6.1.0"