UNPKG

nodegit

Version:

Node.js libgit2 asynchronous native bindings

185 lines (165 loc) 5.91 kB
const cheerio = require("cheerio"); const fse = require("fs-extra"); const path = require("path"); const R = require("ramda"); const request = require("request-promise-native"); const windowsCommonConditions = [ R.test(/^\s*os=Windows$/gm), R.test(/^\s*shared=False$/gm) ]; const macCommonConditions = [ R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*os=Macos$/gm), R.test(/^\s*compiler=apple-clang$/gm), R.test(/^\s*shared=False$/gm) ]; const debugPairs = R.toPairs({ "win32-vs12-static-debug": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86$/gm), R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.runtime=MTd$/gm), R.test(/^\s*compiler\.version=12$/gm) ]), "win32-vs14-static-debug": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86$/gm), R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.runtime=MTd$/gm), R.test(/^\s*compiler\.version=14$/gm) ]), "win32-vs15-static-debug": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86$/gm), R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.runtime=MTd$/gm), R.test(/^\s*compiler\.version=15$/gm) ]), "win64-vs12-static-debug": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.runtime=MTd$/gm), R.test(/^\s*compiler\.version=12$/gm) ]), "win64-vs14-static-debug": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.runtime=MTd$/gm), R.test(/^\s*compiler\.version=14$/gm) ]), "win64-vs15-static-debug": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.runtime=MTd$/gm), R.test(/^\s*compiler\.version=15$/gm) ]), "macOS-clang-9-static-debug": R.allPass([ ...macCommonConditions, R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.version=9.0$/gm) ]), "macOS-clang-8.1-static-debug": R.allPass([ ...macCommonConditions, R.test(/^\s*build_type=Debug$/gm), R.test(/^\s*compiler\.version=8\.1$/gm) ]) }); const releasePairs = R.toPairs({ "win32-vs12-static-release": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86$/gm), R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.runtime=MT$/gm), R.test(/^\s*compiler\.version=12$/gm) ]), "win32-vs14-static-release": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86$/gm), R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.runtime=MT$/gm), R.test(/^\s*compiler\.version=14$/gm) ]), "win32-vs15-static-release": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86$/gm), R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.runtime=MT$/gm), R.test(/^\s*compiler\.version=15$/gm) ]), "win64-vs12-static-release": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.runtime=MT$/gm), R.test(/^\s*compiler\.version=12$/gm) ]), "win64-vs14-static-release": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.runtime=MT$/gm), R.test(/^\s*compiler\.version=14$/gm) ]), "win64-vs15-static-release": R.allPass([ ...windowsCommonConditions, R.test(/^\s*arch=x86_64$/gm), R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.runtime=MT$/gm), R.test(/^\s*compiler\.version=15$/gm) ]), "macOS-clang-9-static-release": R.allPass([ ...macCommonConditions, R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.version=9.0$/gm) ]), "macOS-clang-8.1-static-release": R.allPass([ ...macCommonConditions, R.test(/^\s*build_type=Release$/gm), R.test(/^\s*compiler\.version=8\.1$/gm) ]) }); const distributionPairs = [...debugPairs, ...releasePairs]; const getDistributionConfigURLFromHash = itemHash => `https://dl.bintray.com/conan-community/conan/conan/OpenSSL/1.1.0i/stable/package/${itemHash}/conaninfo.txt`; const getDistributionDownloadURLFromHash = itemHash => `https://dl.bintray.com/conan-community/conan/conan/OpenSSL/1.1.0i/stable/package/${itemHash}/conan_package.tgz`; const getDistributionsRootURL = () => "https://dl.bintray.com/conan-community/conan/conan/OpenSSL/1.1.0i/stable/package/"; const detectDistributionPairFromConfig = (itemHash, body) => R.pipe( R.find(([_, predicate]) => predicate(body)), (distributionPair) => distributionPair ? [distributionPair[0], getDistributionDownloadURLFromHash(itemHash)] : undefined )(distributionPairs); const getDistributionConfig = (itemHash) => request.get(getDistributionConfigURLFromHash(itemHash)) .then((body) => detectDistributionPairFromConfig(itemHash, body)); const discoverDistributions = (treeHtml) => { const releaseHashes = []; const $ = cheerio.load(treeHtml); $("a").each((_, link) => { const linkText = link.children[0].data; if (!linkText) { return; } // Trim off the trailing '/' const releaseHash = linkText.substring(0, linkText.length - 1); releaseHashes.push(releaseHash); }); return Promise.all( R.map(releaseHash => getDistributionConfig(releaseHash), releaseHashes) ); } const writeFile = (distributions) => fse.ensureDir(path.dirname(outputPath)) .then(fse.writeFile(outputPath, JSON.stringify(distributions, null, 2))); const outputPath = path.resolve(__dirname, "..", "vendor", "static_config", "openssl_distributions.json"); request(getDistributionsRootURL()) .then(discoverDistributions) .then(R.filter(R.identity)) .then(R.sortBy(R.prop(0))) .then(R.fromPairs) .then(writeFile);