浏览代码

Update automation scripts

Konstantin Tarkus 9 年之前
父节点
当前提交
e36244dc58
共有 8 个文件被更改,包括 77 次插入60 次删除
  1. 6 5
      tools/build.js
  2. 14 12
      tools/bundle.js
  3. 3 3
      tools/clean.js
  4. 5 5
      tools/copy.js
  5. 3 2
      tools/deploy.js
  6. 18 0
      tools/lib/task.js
  7. 0 28
      tools/pages.js
  8. 28 5
      tools/render.js

+ 6 - 5
tools/build.js

@@ -4,10 +4,11 @@
  * Copyright (c) Konstantin Tarkus (@koistya) | MIT license
  */
 
-export default async () => {
+import task from './lib/task';
+
+export default task(async function build() {
   await require('./clean')();
   await require('./copy')();
-  const pages = await require('./pages')();
-  await require('./bundle')({ pages });
-  await require('./render')({ pages });
-};
+  await require('./bundle')();
+  await require('./render')();
+});

+ 14 - 12
tools/bundle.js

@@ -5,18 +5,20 @@
  */
 
 import webpack from 'webpack';
+import task from './lib/task';
 import config from './config';
 
-export default ({ pages }) => new Promise((resolve, reject) => {
-  console.log('bundle');
-  const bundler = webpack(config);
-  const bundle = (err, stats) => {
-    if (err) {
-      reject(err);
-    } else {
-      console.log(stats.toString(config[0].stats));
-      resolve();
-    }
-  };
-  bundler.run(bundle);
+export default task(function bundle() {
+  return new Promise((resolve, reject) => {
+    const bundler = webpack(config);
+    const run = (err, stats) => {
+      if (err) {
+        reject(err);
+      } else {
+        console.log(stats.toString(config[0].stats));
+        resolve();
+      }
+    };
+    bundler.run(run);
+  });
 });

+ 3 - 3
tools/clean.js

@@ -5,10 +5,10 @@
  */
 
 import del from 'del';
+import task from './lib/task';
 import fs from './lib/fs';
 
-export default async () => {
-  console.log('clean');
+export default task(async function clean() {
   await del(['build/*', '!build/.git'], { dot: true });
   await fs.mkdir('build');
-};
+});

+ 5 - 5
tools/copy.js

@@ -4,13 +4,13 @@
  * Copyright (c) Konstantin Tarkus (@koistya) | MIT license
  */
 
-import copy from './lib/copy';
+import task from './lib/task';
+import cp from './lib/copy';
 
 /**
  * Copies static files such as robots.txt, favicon.ico to the
  * output (build) folder.
  */
-export default async () => {
-  console.log('copy');
-  await copy('static', 'build');
-};
+export default task(async function copy() {
+  await cp('static', 'build');
+});

+ 3 - 2
tools/deploy.js

@@ -5,6 +5,7 @@
  */
 
 import GitRepo from 'git-repository';
+import task from './lib/task';
 
 // TODO: Update deployment URL
 const remote = {
@@ -16,7 +17,7 @@ const remote = {
 /**
  * Deploy the contents of the `/build` folder to GitHub Pages.
  */
-export default async () => {
+export default task(async function deploy() {
   // Initialize a new Git repository inside the `/build` folder
   // if it doesn't exist yet
   const repo = await GitRepo.open('build', { init: true });
@@ -38,4 +39,4 @@ export default async () => {
   await repo.add('--all .');
   await repo.commit('Update ' + new Date().toISOString());
   await repo.push(remote.name, 'master:' + remote.branch);
-};
+});

+ 18 - 0
tools/lib/task.js

@@ -0,0 +1,18 @@
+/**
+ * React Static Boilerplate
+ * https://github.com/koistya/react-static-boilerplate
+ * Copyright (c) Konstantin Tarkus (@koistya) | MIT license
+ */
+
+function format(time) {
+  return time.toTimeString().replace(/.*(\d{2}:\d{2}:\d{2}).*/, '$1');
+}
+
+export default (fn) => async () => {
+  const start = new Date();
+  console.log(`[${format(start)}] Starting '${fn.name}'...`);
+  await fn();
+  const end = new Date();
+  const time = end.getTime() - start.getTime();
+  console.log(`[${format(end)}] Finished '${fn.name}' after ${time}ms`);
+};

+ 0 - 28
tools/pages.js

@@ -1,28 +0,0 @@
-/**
- * React Static Boilerplate
- * https://github.com/koistya/react-static-boilerplate
- * Copyright (c) Konstantin Tarkus (@koistya) | MIT license
- */
-
-import glob from 'glob';
-import { join } from 'path';
-
-export default () => new Promise((resolve, reject) => {
-  console.log('pages');
-  glob('**/*.js', { cwd: join(__dirname, '../pages') }, (err, files) => {
-    if (err) {
-      reject(err);
-    } else {
-      const result = files.map(file => {
-        let path = '/' + file.substr(0, file.lastIndexOf('.'));
-        if (path === '/index') {
-          path = '/';
-        } else if (path.endsWith('/index')) {
-          path = path.substr(0, path.lastIndexOf('/index'));
-        }
-        return { path, file };
-      });
-      resolve(result);
-    }
-  });
-});

+ 28 - 5
tools/render.js

@@ -4,15 +4,38 @@
  * Copyright (c) Konstantin Tarkus (@koistya) | MIT license
  */
 
+import glob from 'glob';
 import { join, dirname } from 'path';
 import React from 'react';
 import ReactDOM from 'react-dom/server';
 import Html from '../components/Html';
+import task from './lib/task';
 import fs from './lib/fs';
 
 const DEBUG = !process.argv.includes('release');
 
-async function render(page, component) {
+function getPages() {
+  return new Promise((resolve, reject) => {
+    glob('**/*.js', { cwd: join(__dirname, '../pages') }, (err, files) => {
+      if (err) {
+        reject(err);
+      } else {
+        const result = files.map(file => {
+          let path = '/' + file.substr(0, file.lastIndexOf('.'));
+          if (path === '/index') {
+            path = '/';
+          } else if (path.endsWith('/index')) {
+            path = path.substr(0, path.lastIndexOf('/index'));
+          }
+          return { path, file };
+        });
+        resolve(result);
+      }
+    });
+  });
+}
+
+async function renderPage(page, component) {
   const data = {
     body: ReactDOM.renderToString(component),
   };
@@ -22,10 +45,10 @@ async function render(page, component) {
   await fs.writeFile(file, html);
 }
 
-export default async ({ pages }) => {
-  console.log('render');
+export default task(async function render() {
+  const pages = await getPages();
   const { route } = require('../build/app.node');
   for (const page of pages) {
-    await route(page.path, render.bind(undefined, page));
+    await route(page.path, renderPage.bind(undefined, page));
   }
-};
+});