From c71d8fad7207e7d51d4e1b9103bdfa3c1a91268a Mon Sep 17 00:00:00 2001 From: Ben Gotow Date: Wed, 2 Aug 2017 13:33:52 -0700 Subject: [PATCH] Remove benchmark mode, npm scripts related to cloud codebase --- .travis.yml | 2 +- appveyor.yml | 4 +- package.json | 26 +++---- packages/client-app/CONTRIBUTING.md | 8 ++- .../client-app/src/browser/application.es6 | 4 +- packages/client-app/src/browser/main.js | 9 +-- .../src/browser/nylas-window.coffee | 2 - .../src/browser/window-launcher.es6 | 3 +- .../client-app/src/browser/window-manager.es6 | 5 +- packages/client-app/src/nylas-env.es6 | 8 +-- scripts/unused/benchmark-initial-sync.sh | 50 ------------- scripts/unused/benchmark-new-commits.sh | 30 -------- scripts/unused/run-once-per-day.sh | 30 -------- scripts/unused/upload-benchmark-data.py | 70 ------------------- 14 files changed, 24 insertions(+), 227 deletions(-) delete mode 100644 scripts/unused/benchmark-initial-sync.sh delete mode 100644 scripts/unused/benchmark-new-commits.sh delete mode 100644 scripts/unused/run-once-per-day.sh delete mode 100644 scripts/unused/upload-benchmark-data.py diff --git a/.travis.yml b/.travis.yml index 1a9fa9260..be290cb21 100644 --- a/.travis.yml +++ b/.travis.yml @@ -51,7 +51,7 @@ install: - nvm use --delete-prefix $NODE_VERSION script: -- npm install && npm run build-client && npm run upload-client +- npm install && npm run build && npm run upload cache: directories: diff --git a/appveyor.yml b/appveyor.yml index eb5a6b4dc..a148e7ef0 100644 --- a/appveyor.yml +++ b/appveyor.yml @@ -26,9 +26,9 @@ build_script: deploy_script: - ps: | - npm run build-client + npm run build node packages/client-app/build/create-signed-windows-installer.js - npm run upload-client + npm run upload environment: matrix: diff --git a/package.json b/package.json index 1b21fd126..f258edb37 100644 --- a/package.json +++ b/package.json @@ -42,24 +42,14 @@ "underscore": "1.8.x" }, "scripts": { - "start": "npm run client", - "test": "npm run test-client && npm run test-cloud", - "client": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --dev", - "benchmark": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --dev --benchmark", - "test-client": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --test", - "test-client-window": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --test=window", - "test-client-junit": "", - "lint-client": "grunt lint --gruntfile=packages/client-app/build/Gruntfile.js --base=./", - "build-client": "grunt build-client --gruntfile=packages/client-app/build/Gruntfile.js --base=./", - "upload-client": "grunt upload-client --gruntfile=packages/client-app/build/Gruntfile.js --base=./", - "cloud": "pm2 stop all; pm2 delete all; pm2 start packages/cloud-core/pm2-dev.yml --no-daemon", - "cloud-debug": "pm2 stop all; pm2 delete all; pm2 start packages/cloud-core/pm2-debug-cloud-api.yml --no-daemon", - "test-cloud": "cd packages/cloud-api && npm test && cd ../cloud-core && npm test && cd ../cloud-workers && npm test", - "stop": "npm run stop-cloud", - "stop-cloud": "pm2 stop all; pm2 delete all;", - "build-cloud": "docker build .", - "postinstall": "node scripts/postinstall.js", - "daily": "node scripts/daily.js" + "start": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --dev", + "test": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --test", + "test-window": "packages/client-app/node_modules/.bin/electron packages/client-app --enable-logging --test=window", + "test-junit": "", + "lint": "grunt lint --gruntfile=packages/client-app/build/Gruntfile.js --base=./", + "build": "grunt build-client --gruntfile=packages/client-app/build/Gruntfile.js --base=./", + "upload": "grunt upload-client --gruntfile=packages/client-app/build/Gruntfile.js --base=./", + "postinstall": "node scripts/postinstall.js" }, "repository": { "type": "git", diff --git a/packages/client-app/CONTRIBUTING.md b/packages/client-app/CONTRIBUTING.md index ffa2a5603..778ce2c18 100644 --- a/packages/client-app/CONTRIBUTING.md +++ b/packages/client-app/CONTRIBUTING.md @@ -96,6 +96,10 @@ We do have a few heuristics: changes that happened. - Read "[How to Write a Git Commit Message](http://chris.beams.io/posts/git-commit/)" if you haven't already (but don't be too prescriptivist about it!) -# Running Against Open Source Sync Engine +# CoffeeScript -See [Configuration](https://github.com/nylas/nylas-mail/blob/master/CONFIGURATION.md) +Nylas Mail was originally written in CoffeeScript. You can learn more about why [here](https://github.com/nylas/nylas-mail/issues/9). +The codebase is slowly being converted to ES2016 JavaScript. To see progress +check out [this spreadsheet]( +https://docs.google.com/spreadsheets/d/1DsZhrNEzCTBlsrPo82UkUxSgqj_fkGRcgTQ-lurnq7c/edit?usp=sharing +) \ No newline at end of file diff --git a/packages/client-app/src/browser/application.es6 b/packages/client-app/src/browser/application.es6 index 030274cf9..80f7224d2 100644 --- a/packages/client-app/src/browser/application.es6 +++ b/packages/client-app/src/browser/application.es6 @@ -26,14 +26,13 @@ let clipboard = null; // export default class Application extends EventEmitter { async start(options) { - const {resourcePath, configDirPath, version, devMode, specMode, benchmarkMode, safeMode} = options; + const {resourcePath, configDirPath, version, devMode, specMode, safeMode} = options; // Normalize to make sure drive letter case is consistent on Windows this.resourcePath = resourcePath; this.configDirPath = configDirPath; this.version = version; this.devMode = devMode; - this.benchmarkMode = benchmarkMode; this.specMode = specMode; this.safeMode = safeMode; @@ -77,7 +76,6 @@ export default class Application extends EventEmitter { configDirPath: this.configDirPath, config: this.config, devMode: this.devMode, - benchmarkMode: this.benchmarkMode, specMode: this.specMode, safeMode: this.safeMode, initializeInBackground: initializeInBackground, diff --git a/packages/client-app/src/browser/main.js b/packages/client-app/src/browser/main.js index e059ca2bb..13392e09a 100644 --- a/packages/client-app/src/browser/main.js +++ b/packages/client-app/src/browser/main.js @@ -23,9 +23,6 @@ const setupConfigDir = (args) => { if (args.specMode) { defaultDirName = "nylas-spec"; } - if (args.benchmarkMode) { - defaultDirName = "nylas-bench"; - } const configDirPath = path.join(app.getPath('appData'), defaultDirName); mkdirp.sync(configDirPath); @@ -42,7 +39,6 @@ const setupErrorLogger = (args = {}) => { const errorLogger = new ErrorLogger({ inSpecMode: args.specMode, inDevMode: args.devMode, - inBenchmarkMode: args.benchmarkMode, resourcePath: args.resourcePath, }); process.on('uncaughtException', errorLogger.reportError); @@ -55,7 +51,6 @@ const declareOptions = (argv) => { const options = optimist(argv); options.usage("Nylas Mail v" + (app.getVersion()) + "\n\nUsage: nylas-mail [options]\n\nRun Nylas Mail: The open source extensible email client\n\n`nylas-mail --dev` to start the client in dev mode.\n\n`n1 --test` to run unit tests."); options.alias('d', 'dev').boolean('d').describe('d', 'Run in development mode.'); - options.alias('b', 'benchmark').boolean('b').describe('b', 'Run in benchmark mode.'); options.alias('t', 'test').boolean('t').describe('t', 'Run the specified specs and exit with error code on failures.'); options.boolean('safe').describe('safe', 'Do not load packages from ~/.nylas-mail/packages or ~/.nylas/dev/packages.'); options.alias('h', 'help').boolean('h').describe('h', 'Print this usage message.'); @@ -81,8 +76,7 @@ const parseCommandLine = (argv) => { process.stdout.write(version + "\n"); process.exit(0); } - const devMode = args['dev'] || args['test'] || args['benchmark']; - const benchmarkMode = args['benchmark']; + const devMode = args['dev'] || args['test']; const logFile = args['log-file']; const specMode = args['test']; const jUnitXmlPath = args['junit-xml']; @@ -130,7 +124,6 @@ const parseCommandLine = (argv) => { background, logFile, specMode, - benchmarkMode, jUnitXmlPath, safeMode, configDirPath, diff --git a/packages/client-app/src/browser/nylas-window.coffee b/packages/client-app/src/browser/nylas-window.coffee index 23be1f91b..c59fbf4f7 100644 --- a/packages/client-app/src/browser/nylas-window.coffee +++ b/packages/client-app/src/browser/nylas-window.coffee @@ -28,7 +28,6 @@ class NylasWindow pathToOpen, @isSpec, @devMode, - @benchmarkMode, @windowKey, @safeMode, @neverClose, @@ -84,7 +83,6 @@ class NylasWindow loadSettings.appVersion = app.getVersion() loadSettings.resourcePath = @resourcePath loadSettings.devMode ?= false - loadSettings.benchmarkMode ?= false loadSettings.safeMode ?= false loadSettings.mainWindow ?= @mainWindow loadSettings.windowType ?= "default" diff --git a/packages/client-app/src/browser/window-launcher.es6 b/packages/client-app/src/browser/window-launcher.es6 index cc540b696..cd62cec40 100644 --- a/packages/client-app/src/browser/window-launcher.es6 +++ b/packages/client-app/src/browser/window-launcher.es6 @@ -16,14 +16,13 @@ let winNum = 0; export default class WindowLauncher { static EMPTY_WINDOW = "emptyWindow" - constructor({devMode, benchmarkMode, safeMode, specMode, resourcePath, configDirPath, onCreatedHotWindow, config}) { + constructor({devMode, safeMode, specMode, resourcePath, configDirPath, onCreatedHotWindow, config}) { this.defaultWindowOpts = { frame: process.platform !== "darwin", hidden: false, toolbar: true, devMode, safeMode, - benchmarkMode, resizable: true, windowType: WindowLauncher.EMPTY_WINDOW, bootstrapScript: require.resolve("../secondary-window-bootstrap"), diff --git a/packages/client-app/src/browser/window-manager.es6 b/packages/client-app/src/browser/window-manager.es6 index 5b1259361..e4a0d4f23 100644 --- a/packages/client-app/src/browser/window-manager.es6 +++ b/packages/client-app/src/browser/window-manager.es6 @@ -9,7 +9,7 @@ const ONBOARDING_WINDOW = "onboarding" export default class WindowManager { - constructor({devMode, benchmarkMode, safeMode, specMode, resourcePath, configDirPath, initializeInBackground, config}) { + constructor({devMode, safeMode, specMode, resourcePath, configDirPath, initializeInBackground, config}) { this.initializeInBackground = initializeInBackground; this._windows = {}; @@ -17,7 +17,7 @@ export default class WindowManager { this._registerWindow(win); this._didCreateNewWindow(win); } - this.windowLauncher = new WindowLauncher({devMode, benchmarkMode, safeMode, specMode, resourcePath, configDirPath, config, onCreatedHotWindow}); + this.windowLauncher = new WindowLauncher({devMode, safeMode, specMode, resourcePath, configDirPath, config, onCreatedHotWindow}); } get(windowKey) { @@ -215,7 +215,6 @@ export default class WindowManager { hidden: true, isSpec: true, devMode: true, - benchmarkMode: false, toolbar: false, } diff --git a/packages/client-app/src/nylas-env.es6 b/packages/client-app/src/nylas-env.es6 index 4f5a2ebd3..698c2fc0d 100644 --- a/packages/client-app/src/nylas-env.es6 +++ b/packages/client-app/src/nylas-env.es6 @@ -172,7 +172,7 @@ export default class NylasEnvConstructor { const ActionBridge = require('./flux/action-bridge').default; const MailsyncBridge = require('./flux/mailsync-bridge').default; - const {devMode, benchmarkMode, safeMode, resourcePath, configDirPath, windowType} = this.getLoadSettings(); + const {devMode, safeMode, resourcePath, configDirPath, windowType} = this.getLoadSettings(); const specMode = this.inSpecMode(); document.body.classList.add(`platform-${process.platform}`); @@ -203,7 +203,7 @@ export default class NylasEnvConstructor { this.keymaps = new KeymapManager({configDirPath, resourcePath}); this.commands = new CommandRegistry(); - this.packages = new PackageManager({devMode, benchmarkMode, configDirPath, resourcePath, safeMode, specMode}); + this.packages = new PackageManager({devMode, configDirPath, resourcePath, safeMode, specMode}); this.styles = new StyleManager(); this.themes = new ThemeManager({packageManager: this.packages, configDirPath, resourcePath, safeMode}); this.spellchecker = require('./spellchecker').default; @@ -476,10 +476,6 @@ export default class NylasEnvConstructor { return this.getLoadSettings().devMode; } - inBenchmarkMode() { - return this.getLoadSettings().benchmarkMode; - } - // Public: Is the current window in safe mode? inSafeMode() { return this.getLoadSettings().safeMode; diff --git a/scripts/unused/benchmark-initial-sync.sh b/scripts/unused/benchmark-initial-sync.sh deleted file mode 100644 index d7f414ea8..000000000 --- a/scripts/unused/benchmark-initial-sync.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/bash - -set -e - -function print_help { - OUTPUT=$(cat <<- EOM - - A script to benchmark the initial sync performance of Nylas Mail. To use, - simply run the script after authing whatever accounts you wish to measure - in your development version of Nylas Mail. The benchmarking script will - clear all of the data except for your accounts and open and close Nylas - Mail several times, printing out the number of messages synced after each - iteration. - ) - echo "$OUTPUT" -} - -if [[ $1 == '-h' || $1 == '--help' ]] -then - print_help - exit 0 -fi - -CWD="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -NYLAS_DIR="$HOME/.nylas-bench" -EDGEHILL_DB="$NYLAS_DIR/edgehill.db" -TIME_LIMIT=120 -ITERS=5 - -for i in `seq 1 $ITERS` -do - bash $CWD/drop-data-except-accounts.sh > /dev/null - - (npm run benchmark &> /dev/null &) - - sleep $TIME_LIMIT - - ELECTRON_PID=`ps aux | grep "Electron packages/client-app" | grep -v grep | awk '{print $2}'` - kill -9 $ELECTRON_PID - - MESSAGE_COUNT=`sqlite3 $EDGEHILL_DB 'SELECT COUNT(*) FROM Message'` - echo "Synced Messages: $MESSAGE_COUNT" - - # Sometimes it takes a while to shutdown - while [[ $ELECTRON_PID != '' ]] - do - sleep 1 - ELECTRON_PID=`ps aux | grep "Electron packages/client-app" | grep -v grep | awk '{print $2}'` - done -done diff --git a/scripts/unused/benchmark-new-commits.sh b/scripts/unused/benchmark-new-commits.sh deleted file mode 100644 index 21cb98d12..000000000 --- a/scripts/unused/benchmark-new-commits.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -set -e - -function get_next_commit() { - local LAST_COMMIT=$1 - local NEXT_COMMIT=$(git log master ^$LAST_COMMIT --ancestry-path --pretty=oneline | cut -d" " -f1 | tail -n 1) - echo "$NEXT_COMMIT" -} - -BENCHMARK_RESULTS_DIR="$HOME/.benchmark_results" -mkdir -p $BENCHMARK_RESULTS_DIR - -CWD="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -cd $CWD/.. - -git checkout -q master -git pull -q --rebase - -LAST_COMMIT=$(cat $BENCHMARK_RESULTS_DIR/last_commit) -NEXT_COMMIT=$(get_next_commit $LAST_COMMIT) - -while [[ $NEXT_COMMIT != '' ]] -do - echo $NEXT_COMMIT - git checkout -q $NEXT_COMMIT - bash $CWD/benchmark-initial-sync.sh > "$BENCHMARK_RESULTS_DIR/$NEXT_COMMIT-results.txt" - echo "$NEXT_COMMIT" > "$BENCHMARK_RESULTS_DIR/last_commit" - NEXT_COMMIT=$(get_next_commit $NEXT_COMMIT) -done diff --git a/scripts/unused/run-once-per-day.sh b/scripts/unused/run-once-per-day.sh deleted file mode 100644 index 0fdfaccd2..000000000 --- a/scripts/unused/run-once-per-day.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/bash - -# This just checks the time every 60 seconds to see if it should run the benchmarks. -# This is a hack to work around cron's/automator's inability to start GUI apps -# using `npm start`. - -CWD="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )" -BENCHMARK_SCRIPT=$CWD/benchmark-new-commits.sh -UPLOAD_SCRIPT=$CWD/upload-benchmark-data.py -BENCHMARK_RESULTS_DIR=$HOME/.benchmark_results -TARGET_TIME="$1" - -if [[ $# != 1 ]] -then - echo "Usage: run-once-per-day.sh '23:00'" - exit 1 -fi - -while [[ true ]] -do - CURRENT_TIME=$(date +"%H:%M") - - if [[ $CURRENT_TIME = $TARGET_TIME ]] - then - /bin/bash $BENCHMARK_SCRIPT - python $UPLOAD_SCRIPT $BENCHMARK_RESULTS_DIR - fi - sleep 60 -done - diff --git a/scripts/unused/upload-benchmark-data.py b/scripts/unused/upload-benchmark-data.py deleted file mode 100644 index 3606acf15..000000000 --- a/scripts/unused/upload-benchmark-data.py +++ /dev/null @@ -1,70 +0,0 @@ -import os -import re -import sys -import subprocess - -from dateutil.parser import parse as parse_datestr -from glob import glob - -import gspread - -from oauth2client.service_account import ServiceAccountCredentials - -scope = ['https://spreadsheets.google.com/feeds'] - - -def usage(): - print "./scripts/upload-benchmark-data.py " - - -def anymean(filename): - output = subprocess.check_output(['./scripts/toolbox/any_mean.py', filename]) - if output == '': - return 0.0, 0.0 - - # e.g. 'Synced Messages: 77.00 +-0.00' - synced_messages, confidence_interval = re.match('^Synced Messages: ([0-9.]+) (\+-[0-9.]+)$', output).groups() - return synced_messages, confidence_interval - - -def update_spreadsheet(datadir): - credentials = ServiceAccountCredentials.from_json_keyfile_name('client_secret.json', scope) - gc = gspread.authorize(credentials) - worksheet = gc.open("Nylas Mail Benchmarks").sheet1 - - filenames = [] - for filename in glob('{datadir}/*-results.txt'.format(datadir=datadir)): - gitsha = re.match('^(.*)-results.txt$', os.path.basename(filename)).groups(0)[0] - formatted_datetime = subprocess.check_output(['git', 'show', '-s', '--format=%ci', gitsha]) - parsed_datetime = parse_datestr(formatted_datetime) - filenames.append((filename, gitsha, parsed_datetime)) - - new_data = [] - for filename, gitsha, parsed_datetime in sorted(filenames, key=lambda t: t[2]): - synced_messages, confidence_interval = anymean(filename) - row = (parsed_datetime.strftime("%Y-%m-%d %H:%M:%S"), gitsha, synced_messages, confidence_interval) - new_data.append(row) - print row - - # TODO: might want to use the batch upload api in order to not run into rate-limits - for i, new_row in enumerate(new_data): - row_num = i+2 - existing_row = worksheet.range('A{row_num}:D{row_num}'.format(row_num=row_num)) - for j, cell in enumerate(existing_row): - col_num = j+1 - cell.value = new_row[j] - print "updating cell {row_num}:{col_num} with {val}".format(row_num=row_num, col_num=col_num, val=cell.value) - worksheet.update_cells(existing_row) - - -def main(): - if len(sys.argv) != 2: - usage() - return 1 - - datadir = sys.argv[1] - update_spreadsheet(datadir) - return 0 - -if __name__ == '__main__': - sys.exit(main())