pomy
Version:
Based on the concept of a project object model (POM), POMY can manage a project's build, reporting and documentation from a central piece of information.
199 lines (161 loc) • 6.68 kB
JavaScript
var
connect = require('connect'),
http = require('http'),
path = require('path'),
fs = require('fs'),
mkdir = require('../util/mkdir'),
methodOverride = require('method-override'),
logger = require('morgan'),
favicon = require('serve-favicon'),
compress = require('compression'),
bodyParser = require('body-parser'),
cookieParser = require('cookie-parser'),
cookieSession = require('cookie-session'),
express = require('express'),
serveStatic = require('serve-static'),
errorHandler = require('errorhandler'),
minimist = require('minimist'),
config = require('config-file'),
app = express();
global.settings = {
deploy: {
local: {},
test: {},
fat: {},
uat: {},
prod: {}
}
};
var cwd = process.cwd();
var rootPath = path.join(path.dirname(__filename), "../../../");
var pomyConfig = path.join(rootPath, "pomy.json");
if (fs.existsSync(pomyConfig)) {
global.settings = config(path.relative(cwd, pomyConfig));
} else {
rootPath = path.join(path.dirname(__filename), "../");
pomyConfig = path.join(rootPath, "pomy.json");
global.settings = config(path.relative(cwd, pomyConfig));
}
global.settings.paths = {
cwd: cwd,
root: rootPath
};
var argvs = minimist(process.argv.slice(2));
var name = global.settings.name;
var target = argvs.target || global.settings.target || 'local';
var debug = !!(argvs.debug || global.settings.debug);
var dSite = global.settings.deploy[target];
var ips = dSite.ips;
var ip = argvs.ip || (ips.length > 0 ? ips[0] : null) || '127.0.0.1';
var domain = argvs.domain || dSite.domain || ip || "localhost";
var sitePort = argvs.sitePort || dSite.sitePort || 8421;
var configs = require('../package.json');
var version = configs.version;
var author = configs.author;
var keywords = configs.keywords;
var googleWebmasterMeta = configs.googleWebmasterMeta;
var title = configs.title;
var description = configs.description;
app.set('domain', ip)
app.set('port', sitePort)
app.set('views', [path.join(__dirname, './views'),
path.join(__dirname, './plugins/markdown/views'),
path.join(__dirname, './plugins/docs/views'),
path.join(__dirname, './plugins/changelog/views')
])
app.set('view engine', 'ejs')
// May not need to use favicon if using nginx for serving
// static assets. Just comment it out below.
app.use(favicon(path.join(__dirname, './public/favicon.ico')))
if (debug) {
app.use(logger('dev'))
} else {
app.use(logger('short'))
}
app.use(compress())
app.use(bodyParser.urlencoded({
extended: false
}))
app.use(bodyParser.json())
app.use(methodOverride())
app.use(cookieParser('your secret here'))
app.use(cookieSession({
name: 'surface-session',
keys: ['open', 'source']
}))
// May not need to use serveStatic if using nginx for serving
// static assets. Just comment it out below.
app.use(serveStatic(path.join(__dirname, './public')))
app.use(serveStatic(path.join(__dirname, './plugins/markdown/public')))
app.use(serveStatic(path.join(__dirname, './plugins/docs/public')))
app.use(serveStatic(path.join(__dirname, './plugins/changelog/public')))
// Setup local variables to be available in the views.
app.locals.title = title;
app.locals.description = description;
app.locals.googleWebmasterMeta = googleWebmasterMeta;
app.locals.keywords = keywords;
app.locals.author = author;
app.locals.node_version = process.version.replace('v', '')
app.locals.app_version = version
app.locals.env = target
// At startup time so sync is ok.
app.locals.readme = fs.readFileSync(path.resolve(__dirname, './README.md'), 'utf-8')
if (debug) {
app.use(errorHandler())
}
global.settings.target = target;
global.settings.debug = debug;
global.settings.deploy[target].ips[0] = ip;
global.settings.deploy[target].sitePort = sitePort;
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/api");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/docs");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/backlogs");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/site");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/sprints");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/test reports");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/ui");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/deployments");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/changelogs");
mkdir(process.env.HOME, "var/" + domain + "/documents/" + name + "/" + target + "/other");
var
routes = require('./routes'),
markdownRoutes = require('./plugins/markdown/routes'),
docsRoutes = require('./plugins/docs/routes'),
changelogRoutes = require('./plugins/changelog/routes'),
core = require('./plugins/markdown/plugins/core/server.js'),
dropbox = require('./plugins/markdown/plugins/dropbox/server.js'),
github = require('./plugins/markdown/plugins/github/server.js'),
googledrive = require('./plugins/markdown/plugins/googledrive/server.js'),
onedrive = require('./plugins/markdown/plugins/onedrive/server.js');
app.get('/', routes.index)
app.get('/not-implemented', routes.not_implemented)
app.post('/deploy', routes.deploy)
app.get('/deployments', routes.getDeployments)
app.get('/authors', routes.getAuthors)
app.get('/cl', changelogRoutes.index)
app.get('/changelogs', changelogRoutes.getChangelogs)
app.get('/markdown', markdownRoutes.index)
app.get('/markdown/documents', markdownRoutes.getDocuments)
app.get('/markdown/documents/:id', markdownRoutes.getDocument)
app.post('/markdown/documents/:id', markdownRoutes.updateDocument)
app.put('/markdown/documents', markdownRoutes.saveDocument)
app.post('/markdown/documents/:id/del', markdownRoutes.delDocument)
app.delete('/markdown/documents/:id', markdownRoutes.delDocument)
app.put('/markdown/documents/:id/rename', markdownRoutes.renameDocument)
app.get('/api', docsRoutes.index)
app.use(core)
app.use(dropbox)
app.use(github)
app.use(googledrive)
app.use(onedrive)
app.use(function(req, res, next) {
res.header('Access-Control-Allow-Origin', '*');
res.header('Access-Control-Allow-Methods', 'GET,PUT,POST,DELETE,OPTIONS');
res.header('Access-Control-Allow-Headers', 'X-Requested-With, X-HTTP-Method-Override, Content-Type, Accept');
next();
});
http.createServer(app).listen(app.get('port'), function createServerCb() {
console.log('Express server listening on port ' + app.get('port'));
console.log('\nhttp://' + app.get('domain') + ':' + app.get('port') + '\n');
})
;