UNPKG

tooltwist

Version:
404 lines (347 loc) 14.4 kB
/* * Run the Tooltwist server. * This prepares all the config files, then uses Gradle to do the actual build and run. */ var Git = require('git-wrapper'); var Log = require('./log'), Config = require('./config'), Templates = require("./templates"), fs = require('fs'), mkdirp = require('mkdirp'), gradle = require('./gradle'), Controller = require('./controller'); /* * Run the server. * If 'launchpad' is provided it will be used as a controller to generate and install. */ exports.phase1 = function(project) { var wdproj = project; if (Config.IS_CONTROLLER) { Log.log('***************************************************************************') Log.log('*** ***') Log.log("*** PHASE 1 - Prepare and run the Designer ***") Log.log('*** ***') Log.log('***************************************************************************') } Log.info(); Log.info("Build the server for " + wdproj + '.') /* * Clone the webdesign project from git */ /* * Parse the project file in the webdesign project, to find out other project dependencies */ var projectFile = Config.WEBDESIGN_DIR + "/" + wdproj + "/project.json"; var projects; try { projects = JSON.parse(fs.readFileSync(projectFile, 'utf8')); } catch (err) { Log.error('Error parsing ' + projectFile + ': ' + err) process.exit(1) } var newProjects = [ ]; for (var n in projects) { var v = projects[n] if (typeof(v) == "string") { // See if it is a gradle definition, e.g. "com.tooltwist:tooltwist:8.2-SNAPSHOT" var parts = v.split(':'); if (parts.length == 3) { newProjects.push({ project_name: n, type: 'extension', location: 'repo', group: parts[0], name: parts[1], version: parts[2], // use by templates "extension_project?": true }); } else { Log.error("Cannot interpret definition for '" + n + "': " + v); } } else if (typeof(v) == "object") { // Check the name is set v.project_name = n; if ( !v.name) { v.name = n; } v['extension_project?'] = true; newProjects.push(v); } else { Log.error("Not sure of type: " + n) } } // Override the version numbers of the Tooltwist jars for (var i = 0; i < newProjects.length; i++) { var project = newProjects[i]; if ( project.type === 'extension' && project.group === 'com.tooltwist' && ( project.name === 'tooltwist' || project.name === 'ttWbd' || project.name === 'ttStd' ) ) { project.version = Config.TOOLTWIST_VERSION Log.info(' Override ' + project.group + ':' + project.name + ' to version ' + project.version); } } // Display the projects Log.info(); Log.info("Including the following extension projects:"); for (var i = 0; i < newProjects.length; i++) { var p = newProjects[i] Log.info(' ' + p.name) } // Create directories Log.info(); Log.info("Creating directories and config files."); mkdirp.sync(Config.HIDDEN_DIR + '/PHASE1'); mkdirp.sync(Config.HIDDEN_DIR + '/do_generate'); mkdirp.sync(Config.HIDDEN_DIR + '/PHASE2'); mkdirp.sync(Config.HIDDEN_DIR + '/do_install'); // mkdirp.sync(Config.HIDDEN_DIR + '/scripts'); mkdirp.sync(Config.TOOLTWIST_HOME + '/conf'); mkdirp.sync(Config.TOOLTWIST_HOME + '/bin'); mkdirp.sync(Config.WEBDESIGN_DIR + '/config/wbd'); mkdirp.sync(Config.EXTENSIONS_DIR + '/webdesign/config/wbd'); mkdirp.sync(Config.BUILD_DIR + '/src/main/webapp/WEB-INF'); mkdirp.sync(Config.BUILD_DIR + '/src/main/webapp/thumbnails'); mkdirp.sync(Config.BUILD_DIR + '/build/classes/main'); /* * Choose credentials for the gradle repo. * If a value is defined with the prefix 'property.', then we will * interpret it as the name of a Gradle property to be used in * build.gradle. If not then we'll make it a string. */ var RESOLVE_CONTEXTURL = 'http://repo.tooltwist.com/artifactory/'; var RESOLVE_REPO = 'tooltwist-all-in-one'; var REPO_USER = '""'; var REPO_PASSWORD = '""'; var config = Config.getConfig(); var prefix = 'property.'; if (config['designer']) { var resolve_contextUrl = config['designer'].resolve_contextUrl; if (resolve_contextUrl) { if (resolve_contextUrl.indexOf(prefix) == 0) { RESOLVE_CONTEXTURL = resolve_contextUrl.substring(prefix.length); } else { RESOLVE_CONTEXTURL = '"' + resolve_contextUrl + '"'; } } var resolve_repo = config['designer'].resolve_repo; if (resolve_repo) { if (resolve_repo.indexOf(prefix) == 0) { RESOLVE_REPO = resolve_repo.substring(prefix.length); } else { RESOLVE_REPO = '"' + resolve_repo + '"'; } } var repository_user = config['designer'].repository_user; if (repository_user) { if (repository_user.indexOf(prefix) == 0) { REPO_USER = repository_user.substring(prefix.length); } else { REPO_USER = '"' + repository_user + '"'; } } var repository_password = config['designer'].repository_password; if (repository_password) { if (repository_password.indexOf(prefix) == 0) { REPO_PASSWORD = repository_password.substring(prefix.length); } else { REPO_PASSWORD = '"' + repository_password + '"'; } } Log.info(); Log.info(" RESOLVE_CONTEXTURL=" + RESOLVE_CONTEXTURL) Log.info(" RESOLVE_REPO=" + RESOLVE_REPO) Log.info(" REPO_USER=" + REPO_USER) } else { // Cannot proceed without this section Log.fatal('Missing config.designer in tooltwist.js') } /* * Overlay standard variables onto the config object, * so they can be used by Mustache. */ var config = Config.getConfig(); // Standard variables config.PROJECT_NAME = Config.PROJECT_NAME; config.PROJECT_ROOT = Config.PROJECT_ROOT; config.HIDDEN_DIR = Config.HIDDEN_DIR; config.TOOLTWIST_HOME = Config.TOOLTWIST_HOME; config.WEBDESIGN_DIR = Config.WEBDESIGN_DIR; config.EXTENSIONS_DIR = Config.EXTENSIONS_DIR; config.TEMPLATE_OVERRIDE_DIR = Config.TEMPLATE_OVERRIDE_DIR; config.BUILD_DIR = Config.BUILD_DIR; config.IS_CONTROLLER = Config.IS_CONTROLLER; config.DEPLOY_FROM_LAUNCHPAD = (Config.getConfig().mode === 'controller'); config.TOOLTWIST_VERSION = Config.TOOLTWIST_VERSION; // Other variables config.WORK_DIR = Config.PROJECT_ROOT; config.DESIGNER_DIR = Config.HIDDEN_DIR; config.cmd_directory = Config.RESOURCES_DIR; config.cmd_file = __filename; config.projects = newProjects; config.webdesign_project = wdproj; // config.TTC_DEPLOY = process.env.TTC_DEPLOY; // config.TTC_CONFIG = process.env.TTC_CONFIG; config.LAUNCHPAD = Controller.LAUNCHPAD_NAME; // config.launchpad = Controller.LAUNCHPAD_NAME; config.IMAGEMAGICK_HOME = Config.IMAGEMAGICK_HOME; config.HTTP_PORT = Config.HTTP_PORT; config.STOP_PORT = Config.STOP_PORT; config.AJP_PORT = Config.AJP_PORT; config.RESOLVE_CONTEXTURL = RESOLVE_CONTEXTURL; config.RESOLVE_REPO = RESOLVE_REPO; config.REPO_USER = REPO_USER; config.REPO_PASSWORD = REPO_PASSWORD; config.FIP_SOURCE_UUID = Config.FIP_SOURCE_UUID; config.FIP_DESTINATION_UUID = Config.FIP_DESTINATION_UUID; config.FIP_DESTINATION_PASSPHRASE = Config.FIP_DESTINATION_PASSPHRASE; // Some of these are from environment variables used by v8.1 scripts // "GENERATOR_DESCRIPTION" = Controller.GENERATOR_DESCRIPTION; // "GENERATOR_HTTP_PORT" = Controller.GENERATOR_HTTP_PORT; // "GENERATOR_HTTPS_PORT" = Controller.GENERATOR_HTTPS_PORT; // "GENERATOR_SERVER_PORT" = Controller.GENERATOR_SERVER_PORT; // "GENERATOR_AJP_PORT" = Controller.GENERATOR_AJP_PORT; // "GENERATOR_DISABLE" = Controller.GENERATOR_DISABLE; // "GENERATOR_INSTALL_TOMCAT" = Controller.GENERATOR_INSTALL_TOMCAT; // "GENERATOR_IMAGEMAGICK_HOME" = Controller.GENERATOR_IMAGEMAGICK_HOME; // "PRODUCTION_DESCRIPTION" = Controller.PRODUCTION_DESCRIPTION; // "PRODUCTION_IS_GROUP" = Controller.PRODUCTION_IS_GROUP; // "PRODUCTION_SERVER_HOME" = Controller.PRODUCTION_SERVER_HOME; // "PRODUCTION_WEBAPP_NAME" = Controller.PRODUCTION_WEBAPP_NAME; // "PRODUCTION_HTTP_PORT" = Controller.PRODUCTION_HTTP_PORT; // "PRODUCTION_HTTPS_PORT" = Controller.PRODUCTION_HTTPS_PORT; // "PRODUCTION_SERVER_PORT" = Controller.PRODUCTION_SERVER_PORT; // "PRODUCTION_AJP_PORT" = Controller.PRODUCTION_AJP_PORT; // "PRODUCTION_WEBAPPS_DIR" = Controller.PRODUCTION_WEBAPPS_DIR; // "PRODUCTION_TOMCAT_HOME" = Controller.PRODUCTION_TOMCAT_HOME; // "PRODUCTION_INSTALL_CMD" = Controller.PRODUCTION_INSTALL_CMD; // "PRODUCTION_INSTALL_METHOD" = Controller.PRODUCTION_INSTALL_METHOD; // "PRODUCTION_SERVER" = Controller.PRODUCTION_SERVER; // "PRODUCTION_USERNAME" = Controller.PRODUCTION_USERNAME; // "PRODUCTION_PASSWORD" = Controller.PRODUCTION_PASSWORD; // "PRODUCTION_INSTALL_TOMCAT" = Controller.PRODUCTION_INSTALL_TOMCAT; // "PRODUCTION_IMAGEMAGICK_HOME" = Controller.PRODUCTION_IMAGEMAGICK_HOME; // "PRODUCTION_SSH_PORT" = Controller.PRODUCTION_SSH_PORT; // "PRODUCTION_FIP_PORT" = Controller.PRODUCTION_FIP_PORT; // "WEBDESIGN_PAYLOAD" = WEBDESIGN_PAYLOAD; // "WEBDESIGN_VERSION" = WEBDESIGN_VERSION; // "WEBDESIGN_REMOTEURL = WEBDESIGN_REMOTEURL; // Pass debug, info and quiet parameters on to the generator if (Log.getLevel() == Log.DEBUG){ config.GENERATE_OPTIONS = " -d"; } else if (Log.getLevel() == Log.INFO){ config.GENERATE_OPTIONS = " -i"; } else if (Log.getLevel() == Log.QUIET){ config.GENERATE_OPTIONS = " -q"; } Log.log(); Log.log('Creating build and config files.') // var defaultTemplateDir = Config.RESOURCES_DIR + '/templates'; Templates.copyTemplate(defaultTemplateDir, 'template.build.gradle', 'PHASE1/ttsvr/build.gradle', config) Templates.copyTemplate(defaultTemplateDir, 'template.web.xml', 'PHASE1/ttsvr/src/main/webapp/WEB-INF/web.xml', config) // Config files Templates.copyTemplate(defaultTemplateDir, 'template.filemap.xml', 'site-conf/conf/filemap.xml', config) Templates.copyTemplate(defaultTemplateDir, 'template.logback.xml', 'site-conf/conf/logback.xml', config) Templates.copyTemplate(defaultTemplateDir, 'template.tooltwist.xml', 'site-conf/conf/tooltwist.xml', config) Templates.copyTemplate(defaultTemplateDir, 'template.wbd.conf', 'site-conf/conf/wbd.conf', config) /* // Files used by Grunt Templates.copyTemplate(defaultTemplateDir, 'PHASE2/'+Config.MODE+'-package.json', 'PHASE2/package.json', config) Templates.copyTemplate(defaultTemplateDir, 'PHASE2/'+Config.MODE+'-Gruntfile.js', 'PHASE2/Gruntfile.js', config) // InstallerUtil // Save the configuration as JSON into the install directory, for use by InstallerUtil. Templates.copyTemplate(defaultTemplateDir, 'install/template.build.gradle', 'do_install/build.gradle', config) Templates.copyTemplate(defaultTemplateDir, 'install/template.rules', 'do_install/rules', config) var configJson = JSON.stringify(Config.getConfig(), null, 2); fs.writeFileSync(Config.HIDDEN_DIR + '/do_install/tooltwistJsAsJson.json', configJson) */ // Ruby files (ARE THESE USED?) ZZZZZ /* Templates.copyTemplate(defaultTemplateDir, 'scripts/generate.sh', 'scripts/generate.sh', config) Templates.copyTemplate(defaultTemplateDir, 'scripts/generate.rb', 'scripts/generate.rb', config) Templates.copyTemplate(defaultTemplateDir, 'scripts/lib_trollop.rb', 'scripts/lib_trollop.rb', config) Templates.copyTemplate(defaultTemplateDir, 'scripts/controller_mail.rb', 'scripts/controller_mail.rb', config) Templates.copyTemplate(defaultTemplateDir, 'scripts/controller_misc.rb', 'scripts/controller_misc.rb', config) Templates.copyTemplate(defaultTemplateDir, 'scripts/controller_phase.rb', 'scripts/controller_phase.rb', config) Templates.copyTemplate(defaultTemplateDir, 'scripts/controller_launchpad.rb', 'scripts/controller_launchpad.rb', config) */ // @Deprecated //copyTemplate(defaultTemplateDir, 'template.wbd.conf', 'extension-projects/webdesign/config/wbd/wbd.conf', config) // Controller-specific files if (Config.getConfig().mode === 'controller' || Config.getConfig().mode === 'deploy') { mkdirp.sync(Config.HIDDEN_DIR + '/do_generate/work'); mkdirp.sync(Config.HIDDEN_DIR + '/do_generate/logs'); mkdirp.sync(Controller.IMAGE_DIR); mkdirp.sync(Controller.IMAGE_DIR + '/webdesign-projects/config'); fs.writeFileSync(Controller.IMAGE_DIR + '/webdesign-projects/config/_empty', '') // Templates.copyTemplate(defaultTemplateDir, 'image/template.fip-source', Controller.IMAGE_DIR + '/.fip-source', config) } // Let the plugin do something Config.plugin.beforePhase2(); // Start gradle // Within this function it will call functions in the plugin for this mode. gradle.runGradle( /* function(status){ / * * We get here once the Tomcat server has been started. * / // Display a nice message for Designer users. if ( !Config.IS_CONTROLLER){ //Log.log(); Log.log(' (Server can be stopped with Control-C)'); Log.log(); Log.log(); Log.log(); Log.log('\t\t THE SERVER IS NOW RUNNING.') Log.log(); Log.log('\t\t http://localhost:' + Config.HTTP_PORT + '/ttsvr/login'); Log.log(); Log.log(); Log.log(); } Log.log(' Default log file is ' + Config.HIDDEN_DIR + '/tooltwist.log') }, function(status) { /* * Gradle Finished callback. * / Log.debug("GRADLE FINISHED (" + status + ")") // Check that the Gradle operations completed. if (status !== 0) { // Display a message and bomb out. Log.fatalError("Gradle finished with exit status " + status); } else { // Clean exit console.log(' ') console.log(' ### # # ') console.log(' # # # # ') console.log(' # # # # ') console.log(' # # ### ') console.log(' # # # # ') console.log(' # # # # ') console.log(' ### # # ') console.log(' ') } //return finishedCallback(status); if (Config.IS_CONTROLLER) { // We're in Controller mode. // - Run Grunt to copy files to the image/tomcat/webapps/ttsvr // - Run InstallerUtil to copy files to the remote server // Controller.runGrunt(function() { // Controller.transfer(function() { // Log.info('Transfer complete') process.exit(0) // }); // }) } }*/ ); };