From cd44cc3f2d93392825648884a57483d0692f0142 Mon Sep 17 00:00:00 2001 From: Sean Yesmunt Date: Mon, 23 Jul 2018 16:32:25 -0400 Subject: [PATCH] Don't download the daemon if it is already downloaded --- .travis.yml | 2 +- build/checkDaemonPlatform.js | 29 --------- build/daemon.ver | 1 + build/downloadDaemon.js | 115 ++++++++++++++++++++++------------- electron-builder.json | 3 +- package.json | 2 +- static/daemon/.gitkeep | 0 7 files changed, 76 insertions(+), 76 deletions(-) delete mode 100644 build/checkDaemonPlatform.js create mode 100644 build/daemon.ver delete mode 100644 static/daemon/.gitkeep diff --git a/.travis.yml b/.travis.yml index b200a1689..da95738cf 100644 --- a/.travis.yml +++ b/.travis.yml @@ -33,7 +33,7 @@ script: - | if [ "$TARGET" == "windows" ]; then docker run --rm \ - --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|GH_|GITHUB_|BT_|AWS_|STRIP|BUILD_') \ + --env-file <(env | grep -iE 'DEBUG|TARGET|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|GH_|GITHUB_|BT_|AWS_|STRIP|BUILD_') \ -v ${PWD}:/project \ electronuserland/builder:wine \ /bin/bash -c "yarn --link-duplicates --pure-lockfile && yarn build --win --publish onTag"; diff --git a/build/checkDaemonPlatform.js b/build/checkDaemonPlatform.js deleted file mode 100644 index 4ae40a7c4..000000000 --- a/build/checkDaemonPlatform.js +++ /dev/null @@ -1,29 +0,0 @@ -/* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */ - -/** - * This script is necessary for checking that the daemon that has been downloaded during the - * yarn installing process is the one for the building target. For example, on Travis the - * Windows package is built on Linux, thus yarn will download the daemon for Linux instead of - * Windows. The script will test that and then download the right daemon for the targeted platform. - */ -const os = require('os'); -const downloadDaemon = require('./downloadDaemon'); - -module.exports = context => { - - let currentPlatform = os.platform(); - if (currentPlatform === 'darwin') currentPlatform = 'macoss'; - if (currentPlatform === 'win32') currentPlatform = 'windows'; - - let buildingPlatformTarget = context.platform.toString(); - if (buildingPlatformTarget === 'mac') buildingPlatformTarget = 'macos'; - - if (buildingPlatformTarget !== currentPlatform) { - console.log( - "\x1b[34minfo\x1b[0m Daemon platform doesn't match target platform. Redownloading the daemon." - ); - - return downloadDaemon(buildingPlatformTarget); - } - return Promise.resolve(); -}; diff --git a/build/daemon.ver b/build/daemon.ver new file mode 100644 index 000000000..a4e543eba --- /dev/null +++ b/build/daemon.ver @@ -0,0 +1 @@ +0.20.4 \ No newline at end of file diff --git a/build/downloadDaemon.js b/build/downloadDaemon.js index 11b0b5ba2..b4e30e047 100644 --- a/build/downloadDaemon.js +++ b/build/downloadDaemon.js @@ -1,6 +1,6 @@ /* eslint-disable no-console,import/no-extraneous-dependencies,import/no-commonjs */ const path = require('path'); -const fs = require('fs-path'); +const fs = require('fs'); const packageJSON = require('../package.json'); const axios = require('axios'); const decompress = require('decompress'); @@ -11,56 +11,85 @@ const downloadDaemon = targetPlatform => new Promise((resolve, reject) => { const daemonURLTemplate = packageJSON.lbrySettings.lbrynetDaemonUrlTemplate; const daemonVersion = packageJSON.lbrySettings.lbrynetDaemonVersion; - const daemonDir = packageJSON.lbrySettings.lbrynetDaemonDir; - const daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName; + const daemonDir = path.join(__dirname,'..',packageJSON.lbrySettings.lbrynetDaemonDir); + let daemonFileName = packageJSON.lbrySettings.lbrynetDaemonFileName; let currentPlatform = os.platform(); - if (currentPlatform === 'darwin') currentPlatform = 'macos'; - if (currentPlatform === 'win32') currentPlatform = 'windows'; - - const daemonPlatform = targetPlatform || currentPlatform; + var daemonPlatform = process.env.TARGET || targetPlatform || currentPlatform; + if (daemonPlatform === 'mac' || daemonPlatform === 'darwin') daemonPlatform = 'macos'; + if (daemonPlatform === 'win32' || daemonPlatform === 'windows') { + daemonPlatform = 'windows'; + daemonFileName = daemonFileName + '.exe'; + } + const daemonFilePath = path.join(daemonDir, daemonFileName); + const daemonVersionPath = path.join(__dirname, 'daemon.ver'); + const tmpZipPath = path.join(__dirname, '..', 'dist', 'daemon.zip'); const daemonURL = daemonURLTemplate .replace(/DAEMONVER/g, daemonVersion) .replace(/OSNAME/g, daemonPlatform); - const tmpZipPath = 'dist/daemon.zip'; + console.log(daemonURL); - console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); - axios - .request({ - responseType: 'arraybuffer', - url: daemonURL, - method: 'get', - headers: { - 'Content-Type': 'application/zip', - }, - }) - .then( - result => - new Promise((newResolve, newReject) => { - fs.writeFile(tmpZipPath, result.data, error => { - if (error) return newReject(error); - return newResolve(); - }); - }) - ) - .then(() => del(`${daemonDir}/${daemonFileName}*`)) - .then(() => - decompress(tmpZipPath, daemonDir, { - filter: file => - path.basename(file.path).replace(path.extname(file.path), '') === daemonFileName, + // If a daemon and daemon.ver exists, check to see if it matches the current daemon version + const hasDaemonDownloaded = fs.existsSync(daemonFilePath); + const hasDaemonVersion = fs.existsSync(daemonVersionPath); + let downloadedDaemonVersion; + if (hasDaemonVersion) { + downloadedDaemonVersion = fs.readFileSync(daemonVersionPath, "utf8"); + } + + if (hasDaemonDownloaded && hasDaemonVersion && downloadedDaemonVersion === daemonVersion) { + console.log('\x1b[34minfo\x1b[0m Daemon already downloaded'); + resolve('Done'); + return; + } else { + console.log('\x1b[34minfo\x1b[0m Downloading daemon...'); + axios + .request({ + responseType: 'arraybuffer', + url: daemonURL, + method: 'get', + headers: { + 'Content-Type': 'application/zip', + }, }) - ) - .then(() => { - console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); - resolve(true); - }) - .catch(error => { - console.error( - `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m` - ); - reject(error); - }); + .then( + result => + new Promise((newResolve, newReject) => { + const distPath = path.join(__dirname, '..', 'dist'); + const hasDistFolder = fs.existsSync(distPath); + + if (!hasDistFolder) { + fs.mkdirSync(distPath); + } + + fs.writeFile(tmpZipPath, result.data, error => { + if (error) return newReject(error); + return newResolve(); + }); + }) + ) + .then(() => del(`${daemonFilePath}*`)) + .then(() => decompress(tmpZipPath, daemonDir, { + filter: file => + path.basename(file.path) === daemonFileName, + })) + .then(() => { + console.log('\x1b[32msuccess\x1b[0m Daemon downloaded!'); + if (hasDaemonVersion) { + del(daemonVersionPath); + } + + fs.writeFileSync(daemonVersionPath, daemonVersion, "utf8") + resolve('Done'); + }) + .catch(error => { + console.error( + `\x1b[31merror\x1b[0m Daemon download failed due to: \x1b[35m${error}\x1b[0m` + ); + reject(error); + }) + }; }); module.exports = downloadDaemon; diff --git a/electron-builder.json b/electron-builder.json index 6b13458f3..abdd40022 100644 --- a/electron-builder.json +++ b/electron-builder.json @@ -73,6 +73,5 @@ } ] }, - "artifactName": "${productName}_${version}.${ext}", - "beforeBuild": "./build/checkDaemonPlatform.js" + "artifactName": "${productName}_${version}.${ext}" } diff --git a/package.json b/package.json index 786ebab43..dc196c87f 100644 --- a/package.json +++ b/package.json @@ -31,7 +31,7 @@ "release": "yarn compile && electron-builder build", "precommit": "lint-staged", "preinstall": "yarn cache clean lbry-redux", - "postinstall": "electron-builder install-app-deps & node build/downloadDaemon.js" + "postinstall": "electron-builder install-app-deps && node build/downloadDaemon.js" }, "dependencies": { "bluebird": "^3.5.1", diff --git a/static/daemon/.gitkeep b/static/daemon/.gitkeep deleted file mode 100644 index e69de29bb..000000000