diff --git a/.travis.yml b/.travis.yml index a2db5d3c..056b3c46 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,23 +1,40 @@ -os: -- linux -- osx -dist: xenial -services: - - xvfb language: node_js -node_js: -- '10' +matrix: + include: + - os: osx + osx_image: xcode10.2 + language: node_js + node_js: "10" + services: + - xvfb + env: + - ELECTRON_CACHE=$HOME/.cache/electron + - ELECTRON_BUILDER_CACHE=$HOME/.cache/electron-builder + + - os: linux + services: + - docker + - xvfb + language: generic + +cache: + directories: + - node_modules + - $HOME/.cache/electron + - $HOME/.cache/electron-builder + +before_cache: + - rm -rf $HOME/.cache/electron-builder/wine sudo: required install: - npm ci script: "./test/travis-build.sh" -# after_success: -# - openssl aes-256-cbc -K $encrypted_36ee0d5a95ce_key -iv $encrypted_36ee0d5a95ce_iv -# -in tasks/advancedrestclient.pfx.enc -out tasks/advancedrestclient.pfx -d -# - openssl aes-256-cbc -K $encrypted_36ee0d5a95ce_key -iv $encrypted_36ee0d5a95ce_iv -# -in tasks/mac-app-distribution-cert.p12.enc -out tasks/mac-app-distribution-cert.p12 -d -# - ./tasks/install-build-deps.sh -# - node tasks/build-success.js +after_success: +- openssl aes-256-cbc -K $encrypted_36ee0d5a95ce_key -iv $encrypted_36ee0d5a95ce_iv + -in tasks/advancedrestclient.pfx.enc -out tasks/advancedrestclient.pfx -d +- openssl aes-256-cbc -K $encrypted_36ee0d5a95ce_key -iv $encrypted_36ee0d5a95ce_iv + -in tasks/mac-app-distribution-cert.p12.enc -out tasks/mac-app-distribution-cert.p12 -d +- node tasks/arc-publish.sh env: global: - secure: NQtwpDyG5qcPNDVJvHUn2LQKqAI3BYFektAQb7RyCD/eDlzA1b3Orv8nnOPmZ6H05YJBO00RRpvPDAc2944pm7XqY0HuDB0KBjUjb3kLAChiD9D7SKAnTJ4Lvjfyyf6eVXdDRBU5hTFKtsABfn/hIz+J/XVInDVaPOYIeTB70BsgMzkVlDj0hsyM2n7AvPzHupBsgpTL/hGNR0pm45oSV5c9mM72JGy84c6rAW01DLC7N6CgVkRNjAIQ4SYbZj57kO3WLXJ9Hryhqz5manq84R/j5Jg9XggR3+XCvloyFKXYO3n+ogw4zV3Ie81JDqbLJA4u2ayJ8h9wHaUWoSroW594xQchqsAVypnc/fgvHOxRrSozRDja3q9kKdJ/7nSOJ3k1jsy1gJEaDT0OO2py/OQ6F+1gfvMVmID30mL1m5UR9ARpwLyn+gezw4zvCt3JQv3WjzRZzsBhtCj5Mt75GRJK4bROsELO3tDLYzjewI/1tCw/xst097G5MCImVxepOrnlDguqij+0gpE10Pdwto/VUQBvlakLGXSF6CcatXiyIkwVpQEaKT9HGUHXXY51UoMwxS5CvzkvyAEzNam5/GRv6ifDJal0jHe4bLSUHJwC3CQDjZG3LVcIr+SpuEZ/Kq5/Kvr/1QoWAwoMBrCAkdoZmw7gyflm2d/pXsy9pBE= diff --git a/package-lock.json b/package-lock.json index 4cdd9de5..85000925 100644 --- a/package-lock.json +++ b/package-lock.json @@ -3967,6 +3967,12 @@ "resolved": "https://registry.npmjs.org/JSV/-/JSV-4.0.2.tgz", "integrity": "sha1-0Hf2glVx+CEy+d/67Vh7QCn+/1c=" }, + "abbrev": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/abbrev/-/abbrev-1.1.1.tgz", + "integrity": "sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q==", + "dev": true + }, "abstract-leveldown": { "version": "6.0.3", "resolved": "https://registry.npmjs.org/abstract-leveldown/-/abstract-leveldown-6.0.3.tgz", @@ -6130,6 +6136,145 @@ } } }, + "electron-rebuild": { + "version": "1.8.6", + "resolved": "https://registry.npmjs.org/electron-rebuild/-/electron-rebuild-1.8.6.tgz", + "integrity": "sha512-4BAPcNG0XP6stByqvFXggrjmf/C47P2L6HFFrWdR2ako1VLiTDIeZAOmU4WEBuWdaXYNqstleszVmcNHdRDojA==", + "dev": true, + "requires": { + "colors": "^1.3.3", + "debug": "^4.1.1", + "detect-libc": "^1.0.3", + "fs-extra": "^7.0.1", + "node-abi": "^2.9.0", + "node-gyp": "^5.0.1", + "ora": "^3.4.0", + "spawn-rx": "^3.0.0", + "yargs": "^13.2.4" + }, + "dependencies": { + "ansi-regex": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-4.1.0.tgz", + "integrity": "sha512-1apePfXM1UOSqw0o9IiFAovVz9M5S1Dg+4TrDwfMewQ6p/rmMueb7tWZjQ1rx4Loy1ArBggoqGpfqqdI4rondg==", + "dev": true + }, + "ansi-styles": { + "version": "3.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", + "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", + "dev": true, + "requires": { + "color-convert": "^1.9.0" + } + }, + "camelcase": { + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-5.3.1.tgz", + "integrity": "sha512-L28STB170nwWS63UjtlEOE3dldQApaJXZkOI1uMFfzf3rRuPegHaHesyee+YxQ+W6SvRDQV6UrdOdRiR153wJg==", + "dev": true + }, + "cliui": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-5.0.0.tgz", + "integrity": "sha512-PYeGSEmmHM6zvoef2w8TPzlrnNpXIjTipYK780YswmIP9vjxmd6Y2a3CB2Ks6/AU8NHjZugXvo8w3oWM2qnwXA==", + "dev": true, + "requires": { + "string-width": "^3.1.0", + "strip-ansi": "^5.2.0", + "wrap-ansi": "^5.1.0" + } + }, + "fs-extra": { + "version": "7.0.1", + "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-7.0.1.tgz", + "integrity": "sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==", + "dev": true, + "requires": { + "graceful-fs": "^4.1.2", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + } + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-2.0.0.tgz", + "integrity": "sha1-o7MKXE8ZkYMWeqq5O+764937ZU8=", + "dev": true + }, + "require-main-filename": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/require-main-filename/-/require-main-filename-2.0.0.tgz", + "integrity": "sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==", + "dev": true + }, + "string-width": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-3.1.0.tgz", + "integrity": "sha512-vafcv6KjVZKSgz06oM/H6GDBrAtz8vdhQakGjFIvNrHA6y3HCF1CInLy+QLq8dTJPQ1b+KDUqDFctkdRW44e1w==", + "dev": true, + "requires": { + "emoji-regex": "^7.0.1", + "is-fullwidth-code-point": "^2.0.0", + "strip-ansi": "^5.1.0" + } + }, + "strip-ansi": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-5.2.0.tgz", + "integrity": "sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA==", + "dev": true, + "requires": { + "ansi-regex": "^4.1.0" + } + }, + "wrap-ansi": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-5.1.0.tgz", + "integrity": "sha512-QC1/iN/2/RPVJ5jYK8BGttj5z83LmSKmvbvrXPNCLZSEb32KKVDJDl/MOt2N01qU2H/FkzEa9PKto1BqDjtd7Q==", + "dev": true, + "requires": { + "ansi-styles": "^3.2.0", + "string-width": "^3.0.0", + "strip-ansi": "^5.0.0" + } + }, + "yargs": { + "version": "13.3.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-13.3.0.tgz", + "integrity": "sha512-2eehun/8ALW8TLoIl7MVaRUrg+yCnenu8B4kBlRxj3GJGDKU1Og7sMXPNm1BYyM1DOJmTZ4YeN/Nwxv+8XJsUA==", + "dev": true, + "requires": { + "cliui": "^5.0.0", + "find-up": "^3.0.0", + "get-caller-file": "^2.0.1", + "require-directory": "^2.1.1", + "require-main-filename": "^2.0.0", + "set-blocking": "^2.0.0", + "string-width": "^3.0.0", + "which-module": "^2.0.0", + "y18n": "^4.0.0", + "yargs-parser": "^13.1.1" + } + }, + "yargs-parser": { + "version": "13.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-13.1.1.tgz", + "integrity": "sha512-oVAVsHz6uFrg3XQheFII8ESO2ssAf9luWuAd6Wexsu4F3OtIW0o8IribPXYrD4WC24LWtPrJlGy87y5udK+dxQ==", + "dev": true, + "requires": { + "camelcase": "^5.0.0", + "decamelize": "^1.2.0" + } + } + } + }, "electron-store": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/electron-store/-/electron-store-5.0.0.tgz", @@ -8283,6 +8428,12 @@ "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.15.tgz", "integrity": "sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A==" }, + "lodash.assign": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.assign/-/lodash.assign-4.2.0.tgz", + "integrity": "sha1-DZnzzNem0mHRm9rrkkUAXShYCOc=", + "dev": true + }, "lodash.isequal": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", @@ -8815,6 +8966,39 @@ "is-stream": "^1.0.1" } }, + "node-gyp": { + "version": "5.0.4", + "resolved": "https://registry.npmjs.org/node-gyp/-/node-gyp-5.0.4.tgz", + "integrity": "sha512-PMYap4ekQckQDZ2lxoORUF/nX13haU1JdCAlmLgvrykLyN0LFkhfwPbWhYjTxwTruCWbTkeOxFo043kjhmKHZA==", + "dev": true, + "requires": { + "env-paths": "^1.0.0", + "glob": "^7.0.3", + "graceful-fs": "^4.1.2", + "mkdirp": "^0.5.0", + "nopt": "2 || 3", + "npmlog": "0 || 1 || 2 || 3 || 4", + "request": "^2.87.0", + "rimraf": "2", + "semver": "~5.3.0", + "tar": "^4.4.12", + "which": "1" + }, + "dependencies": { + "env-paths": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-1.0.0.tgz", + "integrity": "sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA=", + "dev": true + }, + "semver": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.3.0.tgz", + "integrity": "sha1-myzl094C0XxgEq0yaqa00M9U+U8=", + "dev": true + } + } + }, "node-gyp-build": { "version": "3.8.0", "resolved": "https://registry.npmjs.org/node-gyp-build/-/node-gyp-build-3.8.0.tgz", @@ -8844,6 +9028,15 @@ "resolved": "https://registry.npmjs.org/noop-logger/-/noop-logger-0.1.1.tgz", "integrity": "sha1-lKKxYzxPExdVMAfYlm/Q6EG2pMI=" }, + "nopt": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/nopt/-/nopt-3.0.6.tgz", + "integrity": "sha1-xkZdvwirzU2zWTF/eaxopkayj/k=", + "dev": true, + "requires": { + "abbrev": "1" + } + }, "normalize-package-data": { "version": "2.5.0", "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", @@ -10533,6 +10726,34 @@ "integrity": "sha1-NyIifFTi+vJLHcbZM8wUTm9xv+8=", "dev": true }, + "spawn-rx": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/spawn-rx/-/spawn-rx-3.0.0.tgz", + "integrity": "sha512-dw4Ryg/KMNfkKa5ezAR5aZe9wNwPdKlnHEXtHOjVnyEDSPQyOpIPPRtcIiu7127SmtHhaCjw21yC43HliW0iIg==", + "dev": true, + "requires": { + "debug": "^2.5.1", + "lodash.assign": "^4.2.0", + "rxjs": "^6.3.1" + }, + "dependencies": { + "debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dev": true, + "requires": { + "ms": "2.0.0" + } + }, + "ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", + "dev": true + } + } + }, "spdx-correct": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.0.tgz", diff --git a/package.json b/package.json index ca886113..e2b5225e 100644 --- a/package.json +++ b/package.json @@ -13,7 +13,7 @@ }, "scripts": { "start": "electron . --inspect --debug --debug-level=\"silly\" --workspace-path=\"~/arc-dev/workspace\" --settings-file=\"~/arc-dev/dev-settings.json\" --themes-path=\"~/arc-dev/themes\"", - "postinstall": "electron-builder install-app-deps", + "postinstall": "electron-rebuild && electron-builder install-app-deps", "prepare": "pika-web && node tasks/prepare-app.js", "test": "npm run test-main && npm run test-renderer && npm run test-app", "test-main": "NODE_ENV=test ELECTRON_PATH=node_modules/.bin/electron electron-mocha test/**/*.main.spec.js scripts/packages/**/*.main.spec.js", @@ -38,12 +38,12 @@ "@advanced-rest-client/arc-definitions": "^3.0.0", "@advanced-rest-client/arc-icons": "^3.0.2", "@advanced-rest-client/arc-info-messages": "^3.0.0", + "@advanced-rest-client/arc-onboarding": "^3.0.1", "@advanced-rest-client/eslint-config": "^1.1.3", "@advanced-rest-client/exchange-search-panel": "^3.0.3", "@advanced-rest-client/host-rules-editor": "^3.0.0", - "@advanced-rest-client/themes-panel": "^3.0.0", - "@advanced-rest-client/arc-onboarding": "^3.0.1", "@advanced-rest-client/rest-apis-list-panel": "^3.0.0", + "@advanced-rest-client/themes-panel": "^3.0.0", "@api-components/api-candidates-dialog": "^3.0.0", "@api-components/api-documentation": "^3.0.1", "@api-components/api-navigation": "^3.1.1", @@ -57,6 +57,7 @@ "electron": "^6.0.10", "electron-builder": "^21.2.0", "electron-mocha": "^8.1.2", + "electron-rebuild": "^1.8.6", "eslint-config-google": "^0.14.0", "glob": "^7.1.4", "lit-element": "^2.2.1", @@ -102,11 +103,12 @@ "generateUpdatesFilesForAllChannels": true, "forceCodeSigning": true, "detectUpdateChannel": true, + "npmRebuild": true, + "buildDependenciesFromSource": true, "files": [ "app.html", "app.js", "main.js", - "task-manager.html", "package.json", "assets/", "web_modules/", diff --git a/publish.sh b/publish.sh index bb1ab7a2..fa207575 100755 --- a/publish.sh +++ b/publish.sh @@ -6,4 +6,4 @@ if [ -z "$GH_TOKEN" ]; then fi # This will build, package and upload the app to GitHub. -node_modules/.bin/build --win --mac --linux -p always +node_modules/.bin/electron-builder --win --mac --linux --publish always diff --git a/tasks/arc-publish.sh b/tasks/arc-publish.sh new file mode 100755 index 00000000..bad2901e --- /dev/null +++ b/tasks/arc-publish.sh @@ -0,0 +1,14 @@ +if [ $TRAVIS_BRANCH != 'develop' ]; then + exit 0 +fi +if [ "$TRAVIS_OS_NAME" == "linux" ]; then + docker run --rm \ + --env-file <(env | grep -iE 'DEBUG|NODE_|ELECTRON_|YARN_|NPM_|CI|CIRCLE|TRAVIS|APPVEYOR_|CSC_|_TOKEN|_KEY|AWS_|STRIP|BUILD_') \ + -v ${PWD}:/project \ + -v ~/.cache/electron:/root/.cache/electron \ + -v ~/.cache/electron-builder:/root/.cache/electron-builder \ + electronuserland/builder:wine \ + /bin/bash -c "./node_modules/.bin/electron-builder --linux --win" +else + /bin/bash -c "./node_modules/.bin/electron-builder --mac" +fi diff --git a/tasks/bower.js b/tasks/bower.js deleted file mode 100644 index ac575586..00000000 --- a/tasks/bower.js +++ /dev/null @@ -1,64 +0,0 @@ -const path = require('path'); -const {exec} = require('child_process'); -const {Glob} = require('glob'); -const fs = require('fs-extra'); - -const defaultPath = path.join('components', 'default'); -/** - * Installs bower components in given directory. - * The dicectory must contain `bower.js` file. - * - * @param {String} cwd Process working directory - * @return {Promise} Promise resolved when the process complete. - */ -function install(cwd) { - const opts = { - cwd: cwd, - windowsHide: true - }; - console.log('Installing bower components in', cwd); - return new Promise((resolve, reject) => { - exec('bower update', opts, (error, stdout/* , stderr*/) => { - if (error) { - console.error(`exec error: ${error}`); - reject(new Error(error)); - return; - } - console.log(stdout); - resolve(); - }); - }); -} - -function clearPattern(pattern) { - console.log('Removing files for pattern', pattern); - return new Promise((resolve, reject) => { - const promises = []; - const mg = new Glob(pattern); - mg.on('match', (file) => { - console.log('Removing', file); - promises.push(fs.remove(file)); - }); - mg.on('end', () => { - Promise.all(promises) - .then(() => resolve()) - .catch((cause) => reject(cause)); - }); - mg.on('error', (err) => { - console.error('Error cleaning data', err); - reject(new Error(err)); - }); - }); -} - -function clear() { - const root = 'components/default/bower_components/**/'; - return clearPattern(root + '{demo,test,docs}/*') - .then(() => clearPattern(root + '*.md')) - .then(() => clearPattern(root + '.travis/*')); -} - -install(defaultPath) -.then(() => clear()) -.then(() => console.log('Installation complete')) -.catch((cause) => console.error(cause));