Просмотр исходного кода

Merge pull request #400 from weseek/rc/3.1.0

Rc/3.1.0
Yuki Takei 8 лет назад
Родитель
Сommit
0b1a4700d3
6 измененных файлов с 127 добавлено и 129 удалено
  1. 10 0
      app.js
  2. 37 44
      lib/crowi/index.js
  3. 64 63
      package.json
  4. 0 15
      webpack.config.js
  5. 11 6
      wercker.yml
  6. 5 1
      yarn.lock

+ 10 - 0
app.js

@@ -8,6 +8,7 @@
 require('module-alias/register');
 
 const logger = require('@alias/logger')('growi');
+const helpers = require('./config/helpers');
 const growi = new (require('./lib/crowi'))(__dirname, process.env);
 
 
@@ -23,7 +24,16 @@ process.on('unhandledRejection', (reason, p) => {
 });
 
 growi.start()
+  .then(express => {
+    if (helpers.hasProcessFlag('ci')) {
+      logger.info('"--ci" flag is detected. Exit process.');
+      express.close(() => {
+        process.exit();
+      });
+    }
+  })
   .catch(err => {
     logger.error('An error occurred, unable to start the server');
     logger.error(err);
+    process.exit(1);
   });

+ 37 - 44
lib/crowi/index.js

@@ -9,16 +9,11 @@ var debug = require('debug')('growi:crowi')
 
   , mongoose    = require('mongoose')
 
-  , eazyLogger = require('eazy-logger')
   , models = require('../models')
   ;
 
 function Crowi(rootdir, env) {
   var self = this;
-  this.logger = eazyLogger.Logger({
-    prefix: '[{green:GROWI}] ',
-    useLevelPrefixes: false,
-  });
 
   this.version = pkg.version;
   this.runtimeVersions = undefined;   // initialized by scanRuntimeVersions()
@@ -144,13 +139,7 @@ Crowi.prototype.setupDatabase = function() {
 
   const mongoUri = getMongoUrl(this.env);
 
-  return mongoose.connect(mongoUri).then(
-    () => {},
-    err => {
-      logger.error('DB Connect Error: ', err);
-      logger.error('DB Connect Error: ', mongoUri);
-    }
-  );
+  return mongoose.connect(mongoUri);
 };
 
 Crowi.prototype.setupSessionConfig = function() {
@@ -346,7 +335,6 @@ Crowi.prototype.getTokens = function() {
 
 Crowi.prototype.start = function() {
   var self = this
-    , http = require('http')
     , server
     , io;
 
@@ -364,40 +352,45 @@ Crowi.prototype.start = function() {
     .then(function() {
       return self.buildServer();
     })
-    .then(function(app) {
-      server = http.createServer(app).listen(self.port, function() {
-        logger.info(`[${self.node_env}] Express server listening on port ${self.port}`);
-
-        self.logger.info('{bold:Server URLs:}');
-        self.logger.unprefixed('info', '{grey:=======================================}');
-        self.logger.unprefixed('info', `         APP: {magenta:http://localhost:${self.port}}`);
-        self.logger.unprefixed('info', '{grey:=======================================}');
-
-        // setup for dev
-        if (self.node_env === 'development') {
-          self.crowiDev.setup(server, app);
-        }
-      });
-
-      io = require('socket.io')(server);
-      io.sockets.on('connection', function(socket) {
+    .then(function(express) {
+      return new Promise((resolve) => {
+        server = express.listen(self.port, function() {
+          logger.info(`[${self.node_env}] Express server listening on port ${self.port}`);
+
+          // setup for dev
+          if (self.node_env === 'development') {
+            const eazyLogger = require('eazy-logger').Logger({
+              prefix: '[{green:GROWI}] ',
+              useLevelPrefixes: false,
+            });
+
+            eazyLogger.info('{bold:Server URLs:}');
+            eazyLogger.unprefixed('info', '{grey:=======================================}');
+            eazyLogger.unprefixed('info', `         APP: {magenta:http://localhost:${self.port}}`);
+            eazyLogger.unprefixed('info', '{grey:=======================================}');
+
+            self.crowiDev.setup(server, express);
+          }
+          resolve(server);
+        });
+
+        io = require('socket.io')(server);
+        io.sockets.on('connection', function(socket) {
+        });
+        self.io = io;
+
+        // setup Express Routes
+        self.setupRoutesAtLast(express);
       });
-      self.io = io;
-
-      // setup Express Routes
-      self.setupRoutesAtLast(app);
-
-      return app;
     });
 };
 
 Crowi.prototype.buildServer = function() {
-  var express  = require('express')
-    , app = express()
+  var express = require('express')()
     , env = this.node_env
     ;
 
-  require('./express-init')(this, app);
+  require('./express-init')(this, express);
 
   // import plugins
   var Config = this.model('Config');
@@ -405,11 +398,11 @@ Crowi.prototype.buildServer = function() {
   if (isEnabledPlugins) {
     debug('Plugins are enabled');
     var PluginService = require('../plugins/plugin.service');
-    var pluginService = new PluginService(this, app);
+    var pluginService = new PluginService(this, express);
     pluginService.autoDetectAndLoadPlugins();
 
     if (env == 'development') {
-      this.crowiDev.loadPlugins(app);
+      this.crowiDev.loadPlugins(express);
     }
   }
 
@@ -417,7 +410,7 @@ Crowi.prototype.buildServer = function() {
   if (env == 'production') {
     const expressBunyanLogger = require('express-bunyan-logger');
     const logger = require('@alias/logger')('express');
-    app.use(expressBunyanLogger({
+    express.use(expressBunyanLogger({
       logger,
       excludes: ['*'],
     }));
@@ -425,10 +418,10 @@ Crowi.prototype.buildServer = function() {
   // use morgan
   else {
     const morgan = require('morgan');
-    app.use(morgan('dev'));
+    express.use(morgan('dev'));
   }
 
-  return Promise.resolve(app);
+  return Promise.resolve(express);
 };
 
 /**

+ 64 - 63
package.json

@@ -1,6 +1,6 @@
 {
   "name": "growi",
-  "version": "3.0.14-RC",
+  "version": "3.1.0-RC",
   "description": "Team collaboration software using markdown",
   "tags": [
     "wiki",
@@ -41,6 +41,7 @@
     "postserver:prod:container": "echo ---------------------------------------- && echo [WARNING] && echo   'server:prod:container' is deprecated. && echo   Please use 'sever:prod' && echo ----------------------------------------",
     "server:dev": "env-cmd config/env.dev.js node-dev --respawn app.js",
     "server:prod:container": "npm run server:prod",
+    "server:prod:ci": "npm run server:prod -- --ci",
     "server:prod": "env-cmd config/env.prod.js node app.js",
     "server": "npm run server:dev",
     "start": "npm run server:prod",
@@ -49,38 +50,20 @@
     "webpack": "webpack"
   },
   "dependencies": {
-    "assets-webpack-plugin": "~3.5.1",
     "async": "^2.3.0",
-    "autoprefixer": "^8.2.0",
     "aws-sdk": "^2.88.0",
     "axios": "^0.18.0",
-    "babel-core": "^6.25.0",
-    "babel-loader": "^7.1.1",
-    "babel-plugin-lodash": "^3.3.2",
-    "babel-preset-env": "^1.6.0",
-    "babel-preset-react": "^6.24.1",
     "basic-auth-connect": "~1.0.0",
     "body-parser": "^1.18.2",
-    "bootstrap-sass": "~3.3.6",
-    "bootstrap-select": "^1.12.4",
-    "browser-bunyan": "^1.3.0",
     "bunyan": "^1.8.12",
-    "bunyan-debug": "^2.0.0",
     "bunyan-format": "^0.2.1",
     "check-node-version": "^3.1.1",
-    "codemirror": "^5.37.0",
     "connect-flash": "~0.1.1",
     "connect-mongo": "^2.0.1",
     "connect-redis": "^3.3.0",
     "cookie-parser": "^1.4.3",
     "cross-env": "^5.0.5",
     "csrf": "~3.0.3",
-    "css-loader": "^0.28.0",
-    "csv-to-markdown-table": "^0.4.0",
-    "date-fns": "^1.29.0",
-    "diff": "^3.3.0",
-    "diff2html": "^2.3.3",
-    "eazy-logger": "^3.0.2",
     "elasticsearch": "^14.0.0",
     "entities": "^1.1.1",
     "env-cmd": "^8.0.1",
@@ -91,8 +74,6 @@
     "express-sanitizer": "^1.0.4",
     "express-session": "~1.15.0",
     "express-webpack-assets": "^0.1.0",
-    "extract-text-webpack-plugin": "^3.0.2",
-    "file-loader": "^1.1.0",
     "googleapis": "^29.0.0",
     "graceful-fs": "^4.1.11",
     "growi-pluginkit": "^1.1.0",
@@ -100,81 +81,101 @@
     "i18next-express-middleware": "^1.1.1",
     "i18next-node-fs-backend": "^1.0.0",
     "i18next-sprintf-postprocessor": "^0.2.2",
-    "jquery-slimscroll": "^1.3.8",
-    "jquery-ui": "^1.12.1",
-    "jquery.cookie": "~1.4.1",
-    "load-css-file": "^1.0.0",
-    "markdown-it": "^8.4.0",
-    "markdown-it-emoji": "^1.4.0",
-    "markdown-it-footnote": "^3.0.1",
-    "markdown-it-mathjax": "^2.0.0",
-    "markdown-it-named-headers": "^0.0.4",
-    "markdown-it-plantuml": "^1.0.0",
-    "markdown-it-task-lists": "^2.1.0",
-    "markdown-it-toc-and-anchor-with-slugid": "^1.1.3",
-    "markdown-table": "^1.1.1",
     "md5": "^2.2.1",
     "method-override": "^2.3.10",
-    "metismenu": "^2.7.4",
     "mkdirp": "~0.5.1",
     "module-alias": "^2.0.6",
     "mongoose": "^5.0.0",
     "mongoose-paginate": "^5.0.0",
     "mongoose-unique-validator": "^2.0.0",
     "multer": "~1.3.0",
-    "node-sass": "^4.5.0",
     "nodemailer": "^4.0.1",
     "nodemailer-ses-transport": "~1.5.0",
-    "normalize-path": "^3.0.0",
     "npm-run-all": "^4.1.2",
-    "optimize-js-plugin": "0.0.4",
     "passport": "^0.4.0",
     "passport-ldapauth": "^2.0.0",
     "passport-local": "^1.0.0",
-    "plantuml-encoder": "^1.2.5",
-    "postcss-loader": "^2.1.3",
-    "react": "^16.2.0",
-    "react-bootstrap": "^0.32.1",
-    "react-bootstrap-typeahead": "^3.0.3",
-    "react-clipboard.js": "^1.1.3",
-    "react-codemirror2": "^5.0.0",
-    "react-dom": "^16.2.0",
-    "react-dropzone": "^4.2.7",
-    "reveal.js": "^3.5.0",
     "rimraf": "^2.6.1",
-    "sass-loader": "^7.0.1",
-    "simple-load-script": "^1.0.2",
     "slack-node": "^0.1.8",
     "socket.io": "^2.0.3",
-    "socket.io-client": "^2.0.3",
     "string-width": "^2.1.1",
-    "style-loader": "^0.21.0",
     "swig-templates": "^2.0.2",
-    "throttle-debounce": "^1.0.1",
-    "toastr": "^2.1.2",
     "uglifycss": "^0.0.29",
-    "url-join": "^4.0.0",
-    "webpack": "3.11.0",
-    "webpack-bundle-analyzer": "^2.9.0",
-    "webpack-merge": "~4.1.0",
     "xss": "^0.3.5"
   },
   "devDependencies": {
+    "assets-webpack-plugin": "~3.5.1",
+    "autoprefixer": "^8.2.0",
+    "babel-core": "^6.25.0",
+    "babel-loader": "^7.1.1",
+    "babel-plugin-lodash": "^3.3.2",
+    "babel-preset-env": "^1.6.0",
+    "babel-preset-react": "^6.24.1",
+    "bootstrap-sass": "~3.3.6",
+    "bootstrap-select": "^1.12.4",
+    "browser-bunyan": "^1.3.0",
     "browser-sync": "^2.23.6",
+    "bunyan-debug": "^2.0.0",
     "chai": "^4.1.0",
     "cli": "~1.0.1",
-    "colors": "^1.1.2",
+    "codemirror": "^5.37.0",
+    "colors": "^1.2.5",
     "commander": "^2.11.0",
     "connect-browser-sync": "^2.1.0",
+    "css-loader": "^0.28.0",
+    "csv-to-markdown-table": "^0.4.0",
+    "date-fns": "^1.29.0",
+    "diff": "^3.3.0",
+    "diff2html": "^2.3.3",
+    "eazy-logger": "^3.0.2",
     "eslint": "^4.19.1",
     "eslint-plugin-react": "^7.7.0",
+    "extract-text-webpack-plugin": "^3.0.2",
+    "file-loader": "^1.1.0",
+    "jquery-slimscroll": "^1.3.8",
+    "jquery-ui": "^1.12.1",
+    "jquery.cookie": "~1.4.1",
+    "load-css-file": "^1.0.0",
+    "markdown-it": "^8.4.0",
+    "markdown-it-emoji": "^1.4.0",
+    "markdown-it-footnote": "^3.0.1",
+    "markdown-it-mathjax": "^2.0.0",
+    "markdown-it-named-headers": "^0.0.4",
+    "markdown-it-plantuml": "^1.0.0",
+    "markdown-it-task-lists": "^2.1.0",
+    "markdown-it-toc-and-anchor-with-slugid": "^1.1.3",
+    "markdown-table": "^1.1.1",
+    "metismenu": "^2.7.4",
     "mocha": "^5.0.0",
     "morgan": "^1.9.0",
     "node-dev": "^3.1.3",
+    "node-sass": "^4.5.0",
+    "normalize-path": "^3.0.0",
     "on-headers": "^1.0.1",
+    "optimize-js-plugin": "0.0.4",
+    "plantuml-encoder": "^1.2.5",
+    "postcss-loader": "^2.1.3",
+    "react": "^16.2.0",
+    "react-bootstrap": "^0.32.1",
+    "react-bootstrap-typeahead": "^3.0.3",
+    "react-clipboard.js": "^1.1.3",
+    "react-codemirror2": "^5.0.0",
+    "react-dom": "^16.2.0",
+    "react-dropzone": "^4.2.7",
+    "reveal.js": "^3.5.0",
+    "sass-loader": "^7.0.1",
+    "simple-load-script": "^1.0.2",
     "sinon": "^5.0.2",
     "sinon-chai": "^3.0.0",
-    "webpack-dll-bundles-plugin": "^1.0.0-beta.5"
+    "socket.io-client": "^2.0.3",
+    "style-loader": "^0.21.0",
+    "throttle-debounce": "^1.0.1",
+    "toastr": "^2.1.2",
+    "url-join": "^4.0.0",
+    "webpack": "3.11.0",
+    "webpack-bundle-analyzer": "^2.9.0",
+    "webpack-dll-bundles-plugin": "^1.0.0-beta.5",
+    "webpack-merge": "~4.1.0"
   },
   "_moduleAliases": {
     "@root": ".",
@@ -182,9 +183,9 @@
     "debug": "lib/service/logger/alias-for-debug"
   },
   "engines": {
-    "node": ">=6.11 <9",
-    "npm": ">=4",
-    "yarn": "^1.3.1"
+    "node": ">=8.11.1 <9",
+    "npm": ">=5.6.0 <6",
+    "yarn": "^1.5.1"
   },
   "config": {
     "blanket": {

+ 0 - 15
webpack.config.js

@@ -1,15 +0,0 @@
-// Look in ./config folder for webpack.dev.js
-switch (process.env.NODE_ENV) {
-  case 'prod':
-  case 'production':
-    module.exports = require('./config/webpack.prod')({env: 'production'});
-    break;
-  case 'test':
-  case 'testing':
-    module.exports = require('./config/webpack.test')({env: 'test'});
-    break;
-  case 'dev':
-  case 'development':
-  default:
-    module.exports = require('./config/webpack.dev')({env: 'development'});
-}

+ 11 - 6
wercker.yml

@@ -43,13 +43,12 @@ build-prod:
     - script:
       name: install dependencies
       code: |
-        yarn install --production
+        yarn
 
     - script:
       name: install plugins
       code: |
-        yarn add growi-plugin-lsx
-        yarn add growi-plugin-pukiwiki-like-linker
+        yarn add growi-plugin-lsx growi-plugin-pukiwiki-like-linker
 
     - script:
       name: print dependencies
@@ -60,6 +59,13 @@ build-prod:
       code: |
         npm run build:prod:analyze
 
+    - script:
+      name: npm run server:prod:ci
+      code: |
+        export MONGO_URI=mongodb://$MONGO_PORT_27017_TCP_ADDR/growi
+        echo "export MONGO_URI=$MONGO_URI"
+        npm run server:prod:ci
+
   after-steps:
     - script:
       name: copy report to artifacts
@@ -82,13 +88,12 @@ build-dev:
     - script:
       name: install dependencies
       code: |
-        yarn install
+        yarn
 
     - script:
       name: install plugins
       code: |
-        yarn add growi-plugin-lsx
-        yarn add growi-plugin-pukiwiki-like-linker
+        yarn add growi-plugin-lsx growi-plugin-pukiwiki-like-linker
 
     - script:
       name: print dependencies

+ 5 - 1
yarn.lock

@@ -1688,7 +1688,11 @@ colors@1.0.3:
   version "1.0.3"
   resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b"
 
-colors@^1.1.2, colors@~1.1.2:
+colors@^1.2.5:
+  version "1.2.5"
+  resolved "https://registry.yarnpkg.com/colors/-/colors-1.2.5.tgz#89c7ad9a374bc030df8013241f68136ed8835afc"
+
+colors@~1.1.2:
   version "1.1.2"
   resolved "https://registry.yarnpkg.com/colors/-/colors-1.1.2.tgz#168a4701756b6a7f51a12ce0c97bfa28c084ed63"