From 1d569c43739a7d46bd493835495f1bab272614c9 Mon Sep 17 00:00:00 2001 From: Shubham Naik Date: Sat, 23 Sep 2017 02:22:37 -0700 Subject: [PATCH 1/3] feature(renew) New updater tool for Tomoe --- Tomoe/build/core/config.js | 16 +++++++++++----- Tomoe/build/templates/tomoe.template.js | 8 ++++---- Tomoe/package.json | 1 + Tomoe/readme.md | 10 +++++++++- 4 files changed, 25 insertions(+), 10 deletions(-) diff --git a/Tomoe/build/core/config.js b/Tomoe/build/core/config.js index 4c83953..3a3bb2c 100644 --- a/Tomoe/build/core/config.js +++ b/Tomoe/build/core/config.js @@ -6,7 +6,7 @@ import { Definitions } from '../templates'; const TOMOE_CONFIG_PATH = `./${Definitions.configName}` -export class Config{ +export class Config { constructor(params = {}){ this.hackathon = params.hackathon || ''; this.beta = params.beta || false; @@ -17,10 +17,10 @@ export class Config{ this.server = params.server || this.database; this.apiVersion = params.apiVersion || Definitions.apiVersion; this.userTypes = params.userTypes || Definitions.userTypes; - this.hackerStatuses = params.hackerStatuses || Definitions.defaultHackerStatuses; - this.volunteerStatuses = params.hackerStatuses || Definitions.defaultVolunteerStatuses; + this.hackerStatuses = params.hackerStatuses || Definitions.hackerStatuses; + this.volunteerStatuses = params.hackerStatuses || Definitions.volunteerStatuses; this.build = params.build || ((fs.existsSync('../.hackmerced')) ? Definitions.build.default : Definitions.build.import) - this.adminPermissions = params.adminPermissions || Definitions.defaultAdminPermissions; + this.adminPermissions = params.adminPermissions || Definitions.adminPermissions; } get(){ @@ -36,7 +36,8 @@ export class Config{ userTypes: this.userTypes, hackerStatuses: this.hackerStatuses, volunteerStatuses: this.volunteerStatuses, - adminPermissions: this.adminPermissions + adminPermissions: this.adminPermissions, + build: this.build, } } @@ -55,6 +56,11 @@ export class Config{ }) } + + static current(){ + return require(`../.${TOMOE_CONFIG_PATH}`).Tomoe; + } + delete(){ fs.unlink(TOMOE_CONFIG_PATH); } diff --git a/Tomoe/build/templates/tomoe.template.js b/Tomoe/build/templates/tomoe.template.js index 10d42c6..af05375 100644 --- a/Tomoe/build/templates/tomoe.template.js +++ b/Tomoe/build/templates/tomoe.template.js @@ -15,7 +15,7 @@ const standardDBCollections = [ 'hacker', // hacker users 'volunteer', // volunteer users 'oauth', // oauth keys information - 'meta' // meta Tomoe information + 'meta', // meta Tomoe information ] const dbCollections = { @@ -32,7 +32,7 @@ export const Definitions = { server: serverNames[process.env.NODE_ENV], userTypes:['admin', 'hacker', 'volunteer'], apiVersion: '2.0', - defaultHackerStatuses:[ + hackerStatuses:[ 'registered', 'applied', 'accepted', @@ -41,12 +41,12 @@ export const Definitions = { 'attending', 'inactive' ], - defaultVolunteerStatuses: [ + volunteerStatuses: [ "applied", "denied", "approved", ], - defaultAdminPermissions: [ + adminPermissions: [ 'read', 'read+write', // read + write 'admin' // super admin (controls group settings) diff --git a/Tomoe/package.json b/Tomoe/package.json index c7026e8..0a8f8a4 100755 --- a/Tomoe/package.json +++ b/Tomoe/package.json @@ -8,6 +8,7 @@ "compile": "node ./src/app/build/scripts/compile", "setup": "npm run generate", "generate": "node ./build/core", + "renew": "node ./build/update", "build": "npm run clean && cross-env NODE_ENV=production npm run compile", "start": "node ./build/imports && cross-env NODE_ENV=development node ./src/app/build/scripts/start", "api": "node ./src/server/index.js", diff --git a/Tomoe/readme.md b/Tomoe/readme.md index b274595..f5badc6 100755 --- a/Tomoe/readme.md +++ b/Tomoe/readme.md @@ -51,7 +51,7 @@ Access the server and gui locally at: http://localhost:4925 ``` -### Local environmnet variables in development +### Local environment variables in development If you do not want to setup environmental variables globally, Tomoe allows you to locally set environmental variables by creating file called `.env` in the root directory of Tomoe ```terminal @@ -68,6 +68,14 @@ NODE_ENV={Either DEVELOPMENT or PRODUCTIOn} [⬆ back to top](#table-of-contents) +### Updating +In the case of updating to a newer version of Tomoe, please run the following commands after pulling a new repo: + +``` +yarn # installs all new pacakges +yarn renew # updates your tomoe.config.js and databases +``` + # Documentation ## Shortcuts [**Hacker Object**](#the-hacker-object)
From eb534389ef83653f6171b403dd62b79d5eddaacc Mon Sep 17 00:00:00 2001 From: Shubham Naik Date: Sat, 23 Sep 2017 02:36:31 -0700 Subject: [PATCH 2/3] feature(tomoe/update) Add updater and version check --- Tomoe/build/core/config.js | 4 ++- Tomoe/build/core/generator.js | 2 +- Tomoe/build/update/index.js | 11 +++++++ Tomoe/build/update/updater.js | 48 +++++++++++++++++++++++++++++++ Tomoe/build/util/check-version.js | 13 +++++++++ Tomoe/package.json | 2 +- Tomoe/src/server/index.js | 10 ++++--- 7 files changed, 83 insertions(+), 7 deletions(-) create mode 100644 Tomoe/build/update/index.js create mode 100644 Tomoe/build/update/updater.js create mode 100644 Tomoe/build/util/check-version.js diff --git a/Tomoe/build/core/config.js b/Tomoe/build/core/config.js index 3a3bb2c..d90b9de 100644 --- a/Tomoe/build/core/config.js +++ b/Tomoe/build/core/config.js @@ -1,6 +1,6 @@ import crypto from 'crypto'; import fs from 'fs'; - +import packageDetail from '../../package.json'; import { Definitions } from '../templates'; @@ -21,6 +21,7 @@ export class Config { this.volunteerStatuses = params.hackerStatuses || Definitions.volunteerStatuses; this.build = params.build || ((fs.existsSync('../.hackmerced')) ? Definitions.build.default : Definitions.build.import) this.adminPermissions = params.adminPermissions || Definitions.adminPermissions; + this.version = packageDetail.version; } get(){ @@ -38,6 +39,7 @@ export class Config { volunteerStatuses: this.volunteerStatuses, adminPermissions: this.adminPermissions, build: this.build, + version: this.version, } } diff --git a/Tomoe/build/core/generator.js b/Tomoe/build/core/generator.js index 58b7537..f313201 100644 --- a/Tomoe/build/core/generator.js +++ b/Tomoe/build/core/generator.js @@ -89,7 +89,7 @@ const stage = { term('\nLearn how to create local ENV files at: https://github.com/HackMerced/HackMerced/tree/master/Tomoe#local-environmnet-variables-in-development'.red); term('\n'); - process.exit(); + process.exit(1); } stage.next(); diff --git a/Tomoe/build/update/index.js b/Tomoe/build/update/index.js new file mode 100644 index 0000000..d930b6f --- /dev/null +++ b/Tomoe/build/update/index.js @@ -0,0 +1,11 @@ +const fs = require('fs'), + ENV_PATH = '.env'; + +// support for local .env files + +if(fs.existsSync(ENV_PATH)){ + require('dotenv').config({path: ENV_PATH}) +} + +require('babel-core/register'); +require('./updater.js') diff --git a/Tomoe/build/update/updater.js b/Tomoe/build/update/updater.js new file mode 100644 index 0000000..2a56ca1 --- /dev/null +++ b/Tomoe/build/update/updater.js @@ -0,0 +1,48 @@ +/* + This code will upgrade the Tomoe.config.js and Arangodb without destroying the database/your updates +*/ +import packageDetail from '../../package.json'; +import { Config } from '../core/config'; +import { Definitions } from '../templates/tomoe.template'; +import { Database } from 'arangojs'; +import { createCollections } from '../util' + + +const term = console.log; // easier to type + +export function updateConfig() { + term(`Updating tomoe.config.js`); + + let config = new Config(Config.current()); + + for(let option in Definitions) { + if(!config[option]) { + config[option] = Definitions[option]; + } + } + + config.save(); +} + +export function updateCollections() { + global.db = new Database({ + url: process.env.DB_URI, + }); + + db.useDatabase(Definitions.server); + + createCollections().then(() => { + + }).catch(err => { + term(err); + }) +} + +export function TomoeUpdate() { + term(`Upgrading Tomoe to version ${packageDetail.version}`); + + updateConfig(); + updateCollections(); +} + +TomoeUpdate(); diff --git a/Tomoe/build/util/check-version.js b/Tomoe/build/util/check-version.js new file mode 100644 index 0000000..81f8639 --- /dev/null +++ b/Tomoe/build/util/check-version.js @@ -0,0 +1,13 @@ +const packageDetail = require('../../package.json'); +const colors = require('colors'); + +function checkVersion(resolve) { + if( TOMOE_CONFIG.version === packageDetail.version) { + return resolve(); + } + + console.log(colors.red('\n\Version mismatch in Tomoe instances, please run:\n'),colors.green(' yarn renew')) + process.exit(1); +} + +module.exports = checkVersion; diff --git a/Tomoe/package.json b/Tomoe/package.json index 0a8f8a4..c73440f 100755 --- a/Tomoe/package.json +++ b/Tomoe/package.json @@ -1,6 +1,6 @@ { "name": "Tomoe", - "version": "2.0.0", + "version": "2.0.2", "description": "Centralized API user platform for Hackathons", "main": "production.js", "scripts": { diff --git a/Tomoe/src/server/index.js b/Tomoe/src/server/index.js index 96cd5f0..1f6b5fd 100644 --- a/Tomoe/src/server/index.js +++ b/Tomoe/src/server/index.js @@ -1,6 +1,7 @@ const fs = require('fs'), ENV_PATH = './.env'; const colors = require('colors'); +const checkVersion = require('../../build/util/check-version.js'); // support for local .env files if(!fs.existsSync(ENV_PATH)){ @@ -11,10 +12,11 @@ if(!fs.existsSync(ENV_PATH)){ if(fs.existsSync('./tomoe.config.js')){ global.TOMOE_CONFIG = require('../../tomoe.config.js').Tomoe; - require( 'babel-core/register' ); - require('./src/database.js') - require('./src/server.js'); - + checkVersion(function(){ + require( 'babel-core/register' ); + require('./src/database.js') + require('./src/server.js'); + }) } else { console.log(colors.red('\n\nWe cannot find your tomoe.config.js file!')); console.log(colors.grey('Please install Tomoe before turning on the server by entering the following command:')); From 8afa3014b5d24e5b3efc9134f2555ef9849a6b03 Mon Sep 17 00:00:00 2001 From: Shubham Naik Date: Wed, 27 Sep 2017 14:18:38 -0700 Subject: [PATCH 3/3] fix(check-version) Add alert for deprecated versions --- Tomoe/build/util/check-version.js | 16 +++++++++++----- 1 file changed, 11 insertions(+), 5 deletions(-) diff --git a/Tomoe/build/util/check-version.js b/Tomoe/build/util/check-version.js index 81f8639..dfc304a 100644 --- a/Tomoe/build/util/check-version.js +++ b/Tomoe/build/util/check-version.js @@ -1,13 +1,19 @@ const packageDetail = require('../../package.json'); const colors = require('colors'); +const LATEST_MAJOR_RELEASE = 20.2; function checkVersion(resolve) { - if( TOMOE_CONFIG.version === packageDetail.version) { - return resolve(); - } - - console.log(colors.red('\n\Version mismatch in Tomoe instances, please run:\n'),colors.green(' yarn renew')) + if(parseFloat(packageDetail.version.replace('.', '')) < LATEST_MAJOR_RELEASE) { + console.log(colors.red('\n\You are running a deprecated version of Tomoe!\nPlease delete your "tomoe.config.js" file and run the following:\n\n'),colors.green(' yarn setup')) process.exit(1); + } + + if(TOMOE_CONFIG.version === packageDetail.version) { + return resolve(); + } + + console.log(colors.red('\n\Version mismatch in Tomoe instances, please run:\n'),colors.green(' yarn renew')) + process.exit(1); } module.exports = checkVersion;