This is an automated email from the ASF dual-hosted git repository. sushuang pushed a commit to branch release in repository https://gitbox.apache.org/repos/asf/incubator-echarts-doc.git
The following commit(s) were added to refs/heads/release by this push: new e5737cb enable build target both echartsjs and asf e5737cb is described below commit e5737cbc01b0a5e0c995d718b5d3f4e8ce67358b Author: 100pah <sushuang0...@gmail.com> AuthorDate: Wed Jan 1 04:07:26 2020 +0800 enable build target both echartsjs and asf --- build.js | 222 ++++++++++++++++++++++++++++++++---------------- config/env.asf.js | 7 +- config/env.dev.js | 7 +- config/env.echartsjs.js | 7 +- config/env.github.js | 10 --- package.json | 1 + release.sh | 29 +------ 7 files changed, 172 insertions(+), 111 deletions(-) diff --git a/build.js b/build.js index 7f836b4..84440c0 100644 --- a/build.js +++ b/build.js @@ -17,8 +17,13 @@ const fs = require('fs'); const fse = require('fs-extra'); const marked = require('marked'); const copydir = require('copy-dir'); +const chalk = require('chalk'); // const MarkDownTOCRenderer = require('./tool/MarkDownTOCRenderer'); const argv = require('yargs').argv; +const path = require('path'); +const assert = require('assert'); + +const projectDir = __dirname; function initEnv() { let envType = argv.env; @@ -35,7 +40,13 @@ function initEnv() { throw new Error('--env MUST be specified'); } - return require('./config/env.' + envType); + let config = require('./config/env.' + envType); + + assert(path.isAbsolute(config.releaseDestDir) && path.isAbsolute(config.ecWWWGeneratedDir)); + + config.envType = envType; + + return config; } const config = initEnv(); @@ -49,68 +60,59 @@ for (let key in config) { } } -function run() { - languages.forEach(function (language) { - fse.ensureDirSync(`public/${language}/documents`); - md2json( - { - path: language + '/option/**/*.md', - sectionsAnyOf: ['visualMap', 'dataZoom', 'series', 'graphic.elements'], - entry: 'option', - tplEnv: config, - imageRoot: config.imagePath - }, - function (schema) { - // Always print single option.html file for some third part usage (e.g., dataV). - writeSingleSchema(schema, language, 'option', false); - writeSingleSchemaPartioned(schema, language, 'option', false); - } - ); - md2json( - { - path: language + '/tutorial/**/*.md', - entry: 'tutorial', - tplEnv: config, - maxDepth: 1, - imageRoot: config.imagePath - }, - function (schema) { - writeSingleSchema(schema, language, 'tutorial'); - writeSingleSchemaPartioned(schema, language, 'tutorial', false); - } - ); - md2json( - { - path: language + '/api/**/*.md', - entry: 'api', - tplEnv: config, - imageRoot: config.imagePath - }, - function (schema) { - writeSingleSchema(schema, language, 'api'); - writeSingleSchemaPartioned(schema, language, 'api', false); - } - ); +async function md2jsonAsync(opt) { + return await new Promise((resolve, reject) => { + md2json(opt, schema => { + resolve(schema); + }); + }); +} - md2json( - { - path: language + '/option-gl/**/*.md', - sectionsAnyOf: ['series'], - entry: 'option-gl', - tplEnv: config.gl, - imageRoot: config.gl.imagePath - }, - function (schema) { - writeSingleSchema(schema, language, 'option-gl'); - writeSingleSchemaPartioned(schema, language, 'option-gl', false); - } - ); +async function run() { + + for (let language of languages) { + let schema; + + schema = await md2jsonAsync({ + path: language + '/option/**/*.md', + sectionsAnyOf: ['visualMap', 'dataZoom', 'series', 'graphic.elements'], + entry: 'option', + tplEnv: config, + imageRoot: config.imagePath + }); + // Always print single option.html file for some third part usage (e.g., dataV). + writeSingleSchema(schema, language, 'option', false); + writeSingleSchemaPartioned(schema, language, 'option', false); + + schema = await md2jsonAsync({ + path: language + '/tutorial/**/*.md', + entry: 'tutorial', + tplEnv: config, + maxDepth: 1, + imageRoot: config.imagePath + }); + writeSingleSchema(schema, language, 'tutorial'); + writeSingleSchemaPartioned(schema, language, 'tutorial', false); + + schema = await md2jsonAsync({ + path: language + '/api/**/*.md', + entry: 'api', + tplEnv: config, + imageRoot: config.imagePath + }); + writeSingleSchema(schema, language, 'api'); + writeSingleSchemaPartioned(schema, language, 'api', false); + + schema = await md2jsonAsync({ + path: language + '/option-gl/**/*.md', + sectionsAnyOf: ['series'], + entry: 'option-gl', + tplEnv: config.gl, + imageRoot: config.gl.imagePath + }); + writeSingleSchema(schema, language, 'option-gl'); + writeSingleSchemaPartioned(schema, language, 'option-gl', false); - fse.outputFileSync( - 'public/' + language + '/documents/' + '/changelog.html', - marked(fs.readFileSync(language + '/changelog.md', 'utf-8')), - 'utf-8' - ); // let plainMarkDownTpl = fs.readFileSync('tool/plain-md.tpl', 'utf-8'); @@ -124,49 +126,123 @@ function run() { // .replace('{{content}}', codingStandardContent), // 'utf-8' // ); - }); + } + + console.log('Build doc done.'); + + buildChangelog(); + + buildCodeStandard(); + + copyAsset(); + + copySite(); - console.log('Please visit:'); - console.log('echarts-doc/public/zh/'); - console.log('echarts-doc/public/en/'); + // copyBlog(); + console.log('All done.'); +} + +function buildChangelog() { + for (let lang of languages) { + const srcPath = path.resolve(projectDir, `${lang}/changelog.md`); + const destPath = path.resolve(config.ecWWWGeneratedDir, `${lang}/documents/changelog-content.html`); + fse.outputFileSync( + destPath, + marked(fs.readFileSync(srcPath, 'utf-8')), + 'utf-8' + ); + console.log(chalk.green('generated: ' + destPath)); + } + console.log('Build changelog done.'); +} + +function buildCodeStandard() { + const codeStandardDestPath = path.resolve(config.ecWWWGeneratedDir, 'coding-standard-content.html'); + fse.ensureDirSync(path.dirname(codeStandardDestPath)); fse.outputFileSync( - 'public/en/documents/coding-standard.html', + codeStandardDestPath, marked(fs.readFileSync('en/coding-standard.md', 'utf-8')), 'utf-8' ); + console.log(chalk.green('generated: ' + codeStandardDestPath)); + + console.log('Build code standard done.'); +} + +function copyAsset() { + for (let lang of languages) { + const assetSrcDir = path.resolve(projectDir, 'asset'); + const assetDestDir = path.resolve(config.releaseDestDir, `${lang}/documents/asset`); + copydir.sync(assetSrcDir, assetDestDir); + } + console.log('Copy asset done.'); +} + +function copySite() { + // `npm run build:site` have generated the boundle files to `public/` + if (config.envType === 'dev') { + return; + } + + // Copy js and css of doc site. + for (let lang of languages) { + const jsSrcPath = path.resolve(projectDir, 'public/js/doc-bundle.js') + const jsDestPath = path.resolve(config.releaseDestDir, `${lang}/js/doc-bundle.js`); + fse.copySync(jsSrcPath, jsDestPath); + console.log(chalk.green(`js copied to: ${jsDestPath}`)); + + const cssSrcDir = path.resolve(projectDir, 'public/css'); + const cssDestDir = path.resolve(config.releaseDestDir, `${lang}/css`); + fse.copySync(cssSrcDir, cssDestDir); + console.log(chalk.green(`css copied to: ${cssDestDir}`)); + } + + console.log('Copy site done.'); +} - copydir.sync('./asset', './public/en/documents/asset'); - copydir.sync('./asset', './public/zh/documents/asset'); +function copyBlog() { + const blogSrcDir = path.resolve(projectDir, 'blog'); + const blogDestDir = path.resolve(config.releaseDestDir, 'blog'); + fse.copySync(blogSrcDir, blogDestDir); + console.log(chalk.green(`blog copied to: ${blogDestDir}`)); + console.log('Copy blog done.'); } function writeSingleSchema(schema, language, docName, format) { - let path = `public/${language}/documents/${docName}.json`; - console.log('output: ' + path); + const destPath = path.resolve(config.releaseDestDir, `${language}/documents/${docName}.json`); + fse.ensureDirSync(path.dirname(destPath)); fse.outputFileSync( - path, + destPath, format ? JSON.stringify(schema, null, 2) : JSON.stringify(schema), 'utf-8' ); + console.log(chalk.green('generated: ' + destPath)); } function writeSingleSchemaPartioned(schema, language, docName, format) { const {outline, descriptions} = extractDesc(schema, docName); + const outlineDestPath = path.resolve(config.releaseDestDir, `${language}/documents/${docName}-parts/${docName}-outline.json`); + fse.ensureDirSync(path.dirname(outlineDestPath)); fse.outputFile( - `public/${language}/documents/${docName}-parts/${docName}-outline.json`, + outlineDestPath, format ? JSON.stringify(outline, null, 2) : JSON.stringify(outline), 'utf-8' ); + console.log(chalk.green('generated: ' + outlineDestPath)); for (let partKey in descriptions) { let partDescriptions = descriptions[partKey]; + let descDestPath = path.resolve(config.releaseDestDir, `${language}/documents/${docName}-parts/${partKey}.json`); + fse.ensureDirSync(path.dirname(descDestPath)); fse.outputFile( - `public/${language}/documents/${docName}-parts/${partKey}.json`, + descDestPath, // format ? JSON.stringify(partDescriptions, null, 2) : JSON.stringify(partDescriptions), JSON.stringify(partDescriptions, null, 2), 'utf-8' ); + console.log(chalk.green('generated: ' + descDestPath)); } }; diff --git a/config/env.asf.js b/config/env.asf.js index eb771bc..a324c7d 100644 --- a/config/env.asf.js +++ b/config/env.asf.js @@ -1,3 +1,5 @@ +const path = require('path'); + module.exports = { galleryViewPath: 'https://echarts.apache.org/examples/zh/view.html?c=', galleryEditorPath: 'https://echarts.apache.org/examples/zh/editor.html?c=', @@ -6,5 +8,8 @@ module.exports = { imagePath: 'asset/img/', gl: { imagePath: 'asset/gl/img/', - } + }, + + releaseDestDir: path.resolve(__dirname, '../../incubator-echarts-website'), + ecWWWGeneratedDir: path.resolve(__dirname, '../../echarts-www/_generated') }; diff --git a/config/env.dev.js b/config/env.dev.js index 26f9ffd..74bc11d 100644 --- a/config/env.dev.js +++ b/config/env.dev.js @@ -1,3 +1,5 @@ +const path = require('path'); + module.exports = { galleryViewPath: 'https://www.echartsjs.com/examples/zh/view.html?c=', galleryEditorPath: 'https://www.echartsjs.com/examples/zh/editor.html?c=', @@ -6,5 +8,8 @@ module.exports = { imagePath: 'asset/img/', gl: { imagePath: 'asset/gl/img/' - } + }, + + releaseDestDir: path.resolve(__dirname, '../public'), + ecWWWGeneratedDir: path.resolve(__dirname, '../../echarts-www/_generated') }; \ No newline at end of file diff --git a/config/env.echartsjs.js b/config/env.echartsjs.js index e379b04..0da1425 100644 --- a/config/env.echartsjs.js +++ b/config/env.echartsjs.js @@ -1,3 +1,5 @@ +const path = require('path'); + module.exports = { galleryViewPath: 'https://www.echartsjs.com/examples/en/view.html?c=', galleryEditorPath: 'https://www.echartsjs.com/examples/en/editor.html?c=', @@ -6,5 +8,8 @@ module.exports = { imagePath: 'asset/img/', gl: { imagePath: 'asset/gl/img/', - } + }, + + releaseDestDir: path.resolve(__dirname, '../../echarts-www/release'), + ecWWWGeneratedDir: path.resolve(__dirname, '../../echarts-www/_generated') }; diff --git a/config/env.github.js b/config/env.github.js deleted file mode 100644 index 77b65aa..0000000 --- a/config/env.github.js +++ /dev/null @@ -1,10 +0,0 @@ -module.exports = { - galleryViewPath: 'https://ecomfe.github.io/echarts-examples/public/view.html?c=', - galleryEditorPath: 'https://ecomfe.github.io/echarts-examples/public/editor.html?c=', - websitePath: 'https://ecomfe.github.io', - - imagePath: 'asset/img/', - gl: { - imagePath: 'asset/gl/img/' - } -}; \ No newline at end of file diff --git a/package.json b/package.json index 0684de7..b6d88df 100644 --- a/package.json +++ b/package.json @@ -21,6 +21,7 @@ "@babel/preset-env": "^7.7.1", "babel-loader": "^8.0.6", "babel-plugin-component": "^1.1.1", + "chalk": "^3.0.0", "concurrently": "^5.0.2", "copy-dir": "^0.3.0", "css-loader": "^3.2.0", diff --git a/release.sh b/release.sh index 05d300f..64e5c27 100644 --- a/release.sh +++ b/release.sh @@ -24,34 +24,13 @@ basepath=$(cd `dirname $0`; pwd) currPath=$(pwd) -# Build zh doc for www.echartsjs.com. cd ${basepath} -node ./build.js --env ${envType} + # Build doc site npm run build:site -cd ${currPath} -# Do not rm, keep option3.json. -mkdir -p ${basepath}/../echarts-www/release/ \ - ${basepath}/../echarts-www/release/zh \ - ${basepath}/../echarts-www/release/zh/js \ - ${basepath}/../echarts-www/release/zh/css \ - ${basepath}/../echarts-www/release/en \ - ${basepath}/../echarts-www/release/en/js \ - ${basepath}/../echarts-www/release/en/css - -cp -R ${basepath}/public/zh/documents/ ${basepath}/../echarts-www/release/zh/documents/ -cp -R ${basepath}/public/en/documents/ ${basepath}/../echarts-www/release/en/documents/ -cp ${basepath}/public/js/doc-bundle.js ${basepath}/../echarts-www/release/zh/js/doc-bundle.js -cp ${basepath}/public/js/doc-bundle.js ${basepath}/../echarts-www/release/en/js/doc-bundle.js - -cp -R ${basepath}/public/css/ ${basepath}/../echarts-www/release/zh/css/ -cp -R ${basepath}/public/css/ ${basepath}/../echarts-www/release/en/css/ - -cp ${basepath}/public/en/documents/changelog.html ${basepath}/../echarts-www/release/en/documents/ -cp ${basepath}/public/zh/documents/changelog.html ${basepath}/../echarts-www/release/zh/documents/ +node ./build.js --env ${envType} +cd ${currPath} +# Do not rm, keep option3.json. -# Copy blog. -rm -r ${basepath}/../echarts-www/blog -cp -R ${basepath}/blog ${basepath}/../echarts-www/ --------------------------------------------------------------------- To unsubscribe, e-mail: commits-unsubscr...@echarts.apache.org For additional commands, e-mail: commits-h...@echarts.apache.org