gulpfile.js 37 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968
  1. var gulp = require('gulp'),
  2. gutil = require('gulp-util'),
  3. del = require('del'),
  4. fs = require("fs"),
  5. minimist = require('minimist'),
  6. targz = require('targz'),
  7. slog = require('single-line-log').stdout,
  8. dateFormat = require('dateformat'),
  9. progress = require('progress-stream'),
  10. request = require("request"),
  11. //uglify = require('gulp-tm-uglify'),
  12. uglify = require('gulp-uglify-es').default,
  13. rename = require('gulp-rename'),
  14. changed = require('gulp-changed'),
  15. gulpif = require('gulp-if'),
  16. http = require('http');
  17. concat = require('gulp-concat');
  18. var fg = require('fast-glob');
  19. var logger = require('gulp-logger');
  20. var assetRev = require('gulp-tm-asset-rev');
  21. const os = require('os');
  22. var through2 = require('through2');
  23. var path = require('path');
  24. var sourceMap = require('gulp-sourcemaps');
  25. var git = require('gulp-git');
  26. //var downloadHost = "download.o2oa.net";
  27. // var downloadHost = "release.o2oa.net";
  28. // var protocol = "http";
  29. // var commonUrl = "/build/commons.tar.gz";
  30. // var jvmUrls = {
  31. // "all": "/build/jvm.tar.gz",
  32. // "linux": "/build/linux.tar.gz",
  33. // "aix": "/build/aix.tar.gz",
  34. // "arm": "/build/arm.tar.gz",
  35. // "macos": "/build/macos.tar.gz",
  36. // "risc": "/build/risc.tar.gz",
  37. // "raspberrypi": "/build/raspberrypi.tar.gz",
  38. // "windows": "/build/windows.tar.gz"
  39. // };
  40. var downloadHost = "git.o2oa.net";
  41. var protocol = "https";
  42. var commonUrl = "/o2oa/evn-o2server-commons/-/archive/master/evn-o2server-commons-master.tar.gz?path=commons";
  43. var jvmUrls = {
  44. "all": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm",
  45. "linux": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/linux",
  46. "aix": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/aix",
  47. "arm": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/arm",
  48. "macos": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/macos",
  49. "risc": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/risc",
  50. "raspi": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/raspi",
  51. "windows": "/o2oa/evn-o2server-jvm/-/archive/master/evn-o2server-jvm-master.tar.gz?path=jvm/windows"
  52. };
  53. var scripts = {
  54. "all": ["o2server/*.sh", "o2server/*.jar", "o2server/*.html", "o2server/*.bat", "o2server/version.o2"],
  55. "linux": ["o2server/*linux*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"],
  56. "aix": ["o2server/*aix*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"],
  57. "arm": ["o2server/*arm*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"],
  58. "macos": ["o2server/*macos*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"],
  59. "risc": ["o2server/*risc*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"],
  60. "raspi": ["o2server/*raspi*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"],
  61. "windows": ["o2server/*windows*", "o2server/*.jar", "o2server/*.html", "o2server/version.o2"]
  62. };
  63. var o_options = minimist(process.argv.slice(2), {//upload: local ftp or sftp
  64. string: ["e", "lp"]
  65. });
  66. var options = {};
  67. options.ev = o_options.e || "all";
  68. options.lp = o_options.lp || "zh-cn";
  69. var jvmUrl = jvmUrls[options.ev];
  70. var scriptSource = scripts[options.ev];
  71. function ProgressBar(description, bar_length){
  72. this.description = description || 'Progress';
  73. this.length = bar_length || 50;
  74. this.render = function (opts){
  75. var percent = (opts.completed / opts.total).toFixed(4);
  76. var cell_num = Math.floor(percent * this.length);
  77. var speed = "";
  78. if (opts.time){
  79. speed = (opts.completed/1024/1024)/(opts.time/1000);
  80. speed = speed.toFixed(2);
  81. speed = speed+"M/S";
  82. }
  83. var count = "";
  84. if (opts.count){
  85. count = "["+opts.count+"/"+opts.total+"]"
  86. }
  87. var cell = '';
  88. for (var i=0;i<cell_num;i++) { cell += '>'; }
  89. var empty = '';
  90. for (var i=0;i<this.length-cell_num;i++) { empty += '='; }
  91. if (opts.completed <= opts.total){
  92. var d = new Date();
  93. var cmdText = "["+dateFormat(d, "HH:MM:ss")+"]"+" "+this.description + ': ' + cell + empty + ' ' + (100*percent).toFixed(2) + '% '+speed+count;
  94. slog(cmdText);
  95. }
  96. };
  97. }
  98. function downloadFile_progress(path, filename, headcb, progresscb, cb){
  99. var dest = `o2server/${filename}`;
  100. // fs.exists(dest, function(exists) {
  101. // if (exists){
  102. // headcb(1);
  103. // progresscb({transferred:1});
  104. // cb();
  105. // }else{
  106. let stream = fs.createWriteStream(dest);
  107. var options = { url:protocol+"://"+downloadHost+path };
  108. var fileHost = downloadHost;
  109. var filePath = path;
  110. stream.on('finish', () => {
  111. //gutil.log("download", ":", gutil.colors.green(filename), " completed!");
  112. cb();
  113. });
  114. stream.on('error', (err) => {
  115. gutil.log(gutil.colors.red("download error"), ":", gutil.colors.red(filename), err);
  116. });
  117. var req = http.request({
  118. host:fileHost,
  119. path:filePath,
  120. method:'HEAD'
  121. },function (res){
  122. if (res.statusCode == 200) {
  123. res.setEncoding(null);
  124. var time = 0;
  125. var l = res.headers['content-length'];
  126. var str = progress({
  127. length: l,
  128. time: 100 /* ms */
  129. });
  130. headcb(l);
  131. str.on('progress', function(progress) {
  132. if (pb){
  133. progresscb(progress);
  134. pb.render({ completed: currentLength, total: totalLength, time: time+=100 });
  135. }
  136. });
  137. request.get(options).pipe(str).pipe(stream);
  138. } else {
  139. gutil.log(gutil.colors.red("download error"), ":", gutil.colors.red(filename), "statusCode:"+res.statusCode);
  140. }
  141. })
  142. req.on('error', (e) => {
  143. gutil.log(gutil.colors.red("download error"), ":", gutil.colors.red(filename), e);
  144. });
  145. req.end();
  146. // }
  147. //});
  148. }
  149. function downloadFile(path, filename, headcb, progresscb, cb){
  150. var dest = `o2server/${filename}`;
  151. // fs.exists(dest, function(exists) {
  152. // if (exists){
  153. // headcb(1);
  154. // progresscb({transferred:1});
  155. // cb();
  156. // }else{
  157. let stream = fs.createWriteStream(dest);
  158. var options = { url:protocol+"://"+downloadHost+path };
  159. var fileHost = downloadHost;
  160. var filePath = path;
  161. stream.on('finish', () => {
  162. //gutil.log("download", ":", gutil.colors.green(filename), " completed!");
  163. cb();
  164. });
  165. stream.on('error', (err) => {
  166. gutil.log(gutil.colors.red("download error"), ":", gutil.colors.red(filename), err);
  167. });
  168. // var req = http.request({
  169. // host:fileHost,
  170. // path:filePath,
  171. // method:'HEAD'
  172. // },function (res){
  173. // if (res.statusCode == 200) {
  174. // res.setEncoding(null);
  175. // var time = 0;
  176. // var l = res.headers['content-length'];
  177. // var str = progress({
  178. // length: l,
  179. // time: 100 /* ms */
  180. // });
  181. // headcb(l);
  182. //
  183. // str.on('progress', function(progress) {
  184. // if (pb){
  185. // progresscb(progress);
  186. // pb.render({ completed: currentLength, total: totalLength, time: time+=100 });
  187. // }
  188. //
  189. // });
  190. request.get(options).pipe(stream);
  191. // } else {
  192. // gutil.log(gutil.colors.red("download error"), ":", gutil.colors.red(filename), "statusCode:"+res.statusCode);
  193. // }
  194. // })
  195. // req.on('error', (e) => {
  196. // gutil.log(gutil.colors.red("download error"), ":", gutil.colors.red(filename), e);
  197. // });
  198. // req.end();
  199. // }
  200. //});
  201. }
  202. var commonsLength = 0;
  203. var jvmLenght = 0;
  204. var totalLength = 0;
  205. var currentLength = 0;
  206. var commonsCurrentLength = 0;
  207. var jvmCurrentLength = 0;
  208. var pb = null;
  209. function initProgress(){
  210. if (commonsLength && jvmLenght){
  211. totalLength = +commonsLength + jvmLenght;
  212. var t = (totalLength/1024/1024).toFixed(2);
  213. pb = new ProgressBar('total: '+t+"M", 50);
  214. }
  215. }
  216. function download_commons_and_jvm(cb){
  217. gutil.log(gutil.colors.green("begin download commons and jvm"));
  218. console.log(`---------------------------------------------------------------------
  219. . Start to download the dependencies needed for compilation ...
  220. ---------------------------------------------------------------------`);
  221. var downloader = new Promise((resolve, reject) => {
  222. var commonLoaded = false;
  223. var jvmLoaded = false;
  224. downloadFile(commonUrl, "commons_git.tar.gz", (length)=>{
  225. commonsLength = +length;
  226. initProgress();
  227. }, (progress)=>{
  228. commonsCurrentLength = progress.transferred;
  229. currentLength = +commonsCurrentLength+jvmCurrentLength;
  230. }, ()=>{
  231. commonLoaded = true;
  232. if (jvmLoaded && commonLoaded) resolve();
  233. });
  234. // var jvmName = jvmUrl.substr(jvmUrl.lastIndexOf("/"+1, jvmUrl.length));
  235. // console.log(jvmName);
  236. // console.log(jvmUrl);
  237. downloadFile(jvmUrl, "jvm_git.tar.gz", (length)=>{
  238. jvmLenght = +length;
  239. initProgress();
  240. }, (progress)=>{
  241. jvmCurrentLength = progress.transferred;
  242. currentLength = +commonsCurrentLength+jvmCurrentLength;
  243. }, ()=>{
  244. jvmLoaded = true;
  245. if (jvmLoaded && commonLoaded) resolve();
  246. });
  247. });
  248. downloader.then(()=>{
  249. //console.log();
  250. gutil.log(gutil.colors.green("download commons and jvm completed"));
  251. cb();
  252. });
  253. }
  254. function decompress_commons_and_jvm(cb){
  255. console.log(`---------------------------------------------------------------------
  256. . Start to decompress the dependencies needed for compilation ...
  257. ---------------------------------------------------------------------`);
  258. gutil.log(gutil.colors.green("begin decompress commons and jvm"));
  259. var count =0;
  260. var decompressor = new Promise((resolve, reject) => {
  261. var commonUnziped = false;
  262. var jvmUnziped = false;
  263. targz.decompress({
  264. src: 'o2server/commons_git.tar.gz',
  265. dest: 'o2server',
  266. tar: {map: function(header){
  267. count++;
  268. var d = new Date();
  269. slog("["+dateFormat(d, "HH:MM:ss")+"] " + count +" "+ header.name+" ...");
  270. //gutil.log(gutil.colors.cyan(header.name), gutil.colors.yellow("..."));
  271. }}
  272. }, function(err){
  273. if(err) {
  274. gutil.log(gutil.colors.red("decompress error"), ":", gutil.colors.red("common.tar.gz "), err);
  275. } else {
  276. commonUnziped = true;
  277. if (jvmUnziped && commonUnziped) resolve();
  278. }
  279. });
  280. targz.decompress({
  281. src: 'o2server/jvm_git.tar.gz',
  282. dest: 'o2server',
  283. tar: {map: function(header){
  284. count++;
  285. var d = new Date();
  286. slog("["+dateFormat(d, "HH:MM:ss")+"] " + count +" "+ header.name+" ...");
  287. //slog(count +" "+ header.name+" ...");
  288. //gutil.log(gutil.colors.cyan(header.name), gutil.colors.yellow("..."));
  289. }}
  290. }, function(err){
  291. if(err) {
  292. gutil.log(gutil.colors.red("decompress error"), ":", gutil.colors.red("jvm.tar.gz "), err);
  293. } else {
  294. jvmUnziped = true;
  295. if (jvmUnziped && commonUnziped) resolve();
  296. }
  297. });
  298. });
  299. decompressor.then(()=>{
  300. gutil.log(gutil.colors.green("decompress commons and jvm completed. " + count+" files"));
  301. cb();
  302. });
  303. }
  304. function move_commons(){
  305. console.log(`---------------------------------------------------------------------
  306. . move commons files to o2server/commons ...
  307. ---------------------------------------------------------------------`);
  308. return gulp.src("o2server/evn-o2server-commons-master-commons/commons/**/*")
  309. .pipe(gulp.dest("o2server/commons/"));
  310. }
  311. function move_jvm(){
  312. console.log(`---------------------------------------------------------------------
  313. . move jvm files to o2server/jvm ...
  314. ---------------------------------------------------------------------`);
  315. var path;
  316. if (options.ev=="all"){
  317. path = "o2server/evn-o2server-jvm-master-jvm/jvm/**/*"
  318. }else{
  319. path = "o2server/evn-o2server-jvm-master-jvm-"+options.ev+"/jvm/**/*"
  320. }
  321. return gulp.src(path)
  322. .pipe(gulp.dest("o2server/jvm/"));
  323. }
  324. function clear_commons_git(cb){
  325. var dest = ['o2server/evn-o2server-commons-master-commons/', 'o2server/commons_git.tar.gz'];
  326. del(dest, { force: true });
  327. cb();
  328. }
  329. function clear_jvm_git(cb){
  330. var path;
  331. if (options.ev=="all"){
  332. path = "o2server/evn-o2server-jvm-master-jvm/"
  333. }else{
  334. path = "o2server/evn-o2server-jvm-master-jvm-"+options.ev+"/"
  335. }
  336. del([path, 'o2server/jvm_git.tar.gz'], { force: true });
  337. cb();
  338. }
  339. function build_web_minimize(cb) {
  340. console.log(`---------------------------------------------------------------------
  341. . Start compiling the web ...
  342. ---------------------------------------------------------------------`);
  343. var dest = 'target/o2server/servers/webServer/';
  344. var src_min = ['o2web/source/**/*.js', '!o2web/source/o2_core/o2.js', '!**/*.spec.js', '!**/test/**', '!o2web/source/o2_lib/**/*'];
  345. var entries = fg.sync(src_min, { dot: false});
  346. var size = entries.length;
  347. var pb = new ProgressBar('', 50);
  348. var doCount = 0;
  349. var stream = gulp.src(src_min);
  350. stream.on("end", ()=>{console.log();});
  351. return stream.pipe(uglify())
  352. .pipe(rename({ extname: '.min.js' }))
  353. .pipe(gulp.dest(dest))
  354. .pipe(logger(function(){
  355. doCount++;
  356. if (doCount <= size){pb.render({ completed: doCount, total: size, count: doCount})};
  357. }))
  358. .pipe(gutil.noop());
  359. }
  360. function build_web_move() {
  361. var dest = 'target/o2server/servers/webServer/';
  362. var src_move = ['o2web/source/**/*', '!o2web/source/o2_core/o2.js', '!**/*.spec.js', '!**/test/**'];
  363. var entries = fg.sync(src_move, { dot: false});
  364. var size = entries.length;
  365. var pb = new ProgressBar('', 50);
  366. var doCount = 0;
  367. var stream = gulp.src(src_move);
  368. stream.on("end", ()=>{console.log();});
  369. return stream.pipe(gulp.dest(dest))
  370. .pipe(logger(function(){
  371. doCount++;
  372. if (doCount <= size) {pb.render({ completed: doCount, total: size, count: doCount})};
  373. }))
  374. .pipe(gutil.noop());
  375. }
  376. exports.build_web_move = build_web_move;
  377. function build_concat_o2(){
  378. var src = [
  379. 'o2web/source/o2_lib/mootools/mootools-1.6.0_all.js',
  380. 'o2web/source/o2_lib/mootools/plugin/mBox.js',
  381. 'o2web/source/o2_core/o2.js'
  382. ];
  383. var dest = 'target/o2server/servers/webServer/o2_core/';
  384. return gulp.src(src)
  385. .pipe(sourceMap.init())
  386. .pipe(concat('o2.js'))
  387. .pipe(gulp.dest(dest))
  388. .pipe(concat('o2.min.js'))
  389. .pipe(uglify())
  390. //.pipe(rename({ extname: '.min.js' }))
  391. .pipe(sourceMap.write(""))
  392. .pipe(gulp.dest(dest))
  393. }
  394. function build_concat_base(){
  395. var src = [
  396. 'o2web/source/x_desktop/js/base.js',
  397. 'o2web/source/x_desktop/js/base_loader.js'
  398. ];
  399. var dest = 'target/o2server/servers/webServer/x_desktop/js/';
  400. return gulp.src(src)
  401. .pipe(sourceMap.init())
  402. //.pipe(concat('o2.js'))
  403. .pipe(gulp.dest(dest))
  404. .pipe(concat('base.min.js'))
  405. .pipe(uglify())
  406. //.pipe(rename({ extname: '.min.js' }))
  407. .pipe(sourceMap.write(""))
  408. .pipe(gulp.dest(dest));
  409. }
  410. function build_concat_desktop(){
  411. let path = "o2_core";
  412. var src = [
  413. 'o2web/source/'+path+'/o2/widget/Common.js',
  414. 'o2web/source/'+path+'/o2/widget/Dialog.js',
  415. 'o2web/source/'+path+'/o2/widget/UUID.js',
  416. 'o2web/source/'+path+'/o2/xDesktop/Common.js',
  417. 'o2web/source/'+path+'/o2/xDesktop/Actions/RestActions.js',
  418. 'o2web/source/'+path+'/o2/xAction/RestActions.js',
  419. 'o2web/source/'+path+'/o2/xDesktop/Access.js',
  420. 'o2web/source/'+path+'/o2/xDesktop/Dialog.js',
  421. 'o2web/source/'+path+'/o2/xDesktop/Menu.js',
  422. 'o2web/source/'+path+'/o2/xDesktop/UserData.js',
  423. 'o2web/source/x_component_Template/MPopupForm.js',
  424. 'o2web/source/'+path+'/o2/xDesktop/Authentication.js',
  425. 'o2web/source/'+path+'/o2/xDesktop/Dialog.js',
  426. 'o2web/source/'+path+'/o2/xDesktop/Window.js',
  427. 'o2web/source/x_component_Common/Main.js'
  428. ];
  429. var dest = 'target/o2server/servers/webServer/o2_core/o2/xDesktop/';
  430. return gulp.src(src)
  431. .pipe(sourceMap.init())
  432. .pipe(concat('$all.js'))
  433. .pipe(gulp.dest(dest))
  434. .pipe(concat('$all.min.js'))
  435. .pipe(uglify())
  436. //.pipe(rename({ extname: '.min.js' }))
  437. .pipe(sourceMap.write(""))
  438. .pipe(gulp.dest(dest))
  439. }
  440. function build_concat_xform(){
  441. let path = "x_component_process_Xform";
  442. var src = [
  443. 'o2web/source/o2_core/o2/widget/AttachmentController.js',
  444. 'o2web/source/o2_core/o2/xScript/Macro.js',
  445. 'o2web/source/o2_core/o2/widget/Tab.js',
  446. 'o2web/source/o2_core/o2/widget/O2Identity.js',
  447. 'o2web/source/' + path + '/Form.js',
  448. 'o2web/source/' + path + '/$Module.js',
  449. 'o2web/source/' + path + '/$Input.js',
  450. 'o2web/source/' + path + '/Div.js',
  451. 'o2web/source/' + path + '/Combox.js',
  452. 'o2web/source/' + path + '/DatagridMobile.js',
  453. 'o2web/source/' + path + '/DatagridPC.js',
  454. 'o2web/source/' + path + '/Textfield.js',
  455. 'o2web/source/' + path + '/Personfield.js',
  456. 'o2web/source/' + path + '/Button.js',
  457. 'o2web/source/' + path + '/ViewSelector.js',
  458. 'o2web/source/' + path + '/*.js',
  459. 'o2web/source/x_component_process_Work/Processor.js',
  460. '!o2web/source/' + path + '/Office.js'
  461. ];
  462. var dest = 'target/o2server/servers/webServer/'+path+'/';
  463. return gulp.src(src)
  464. .pipe(sourceMap.init())
  465. .pipe(concat('$all.js'))
  466. .pipe(gulp.dest(dest))
  467. .pipe(concat('$all.min.js'))
  468. .pipe(uglify())
  469. //.pipe(rename({ extname: '.min.js' }))
  470. .pipe(sourceMap.write(""))
  471. .pipe(gulp.dest(dest))
  472. }
  473. function build_bundle(){
  474. let path = "o2_core";
  475. var src = [
  476. 'o2web/source/o2_lib/mootools/mootools-1.6.0_all.js',
  477. 'o2web/source/o2_lib/mootools/plugin/mBox.js',
  478. 'o2web/source/o2_core/o2.js',
  479. 'o2web/source/x_desktop/js/base.js',
  480. 'o2web/source/x_desktop/js/base_loader.js',
  481. "o2web/source/o2_core/o2/framework.js"
  482. ];
  483. var dest = 'target/o2server/servers/webServer/'+path+'/';
  484. return gulp.src(src)
  485. .pipe(sourceMap.init())
  486. .pipe(concat('bundle.js'))
  487. .pipe(gulp.dest(dest))
  488. .pipe(concat('bundle.min.js'))
  489. .pipe(uglify())
  490. //.pipe(rename({ extname: '.min.js' }))
  491. .pipe(sourceMap.write(""))
  492. .pipe(gulp.dest(dest))
  493. }
  494. function concat_Actions(){
  495. return through2.obj(function (file, enc, cb) {
  496. if (file.isNull()) {
  497. this.push(file);
  498. return cb();
  499. }
  500. if (file.isStream()) {
  501. this.emit('error', new gutil.PluginError(PLUGIN_NAME, 'Streaming not supported'));
  502. return cb();
  503. }
  504. var content = file.contents.toString();
  505. var o = path.parse(file.path);
  506. var name = o.name;
  507. content = "var actionJson = "+content;
  508. content = content+"\nif (!o2.xAction.RestActions.Action[\""+name+"\"]) o2.xAction.RestActions.Action[\""+name+"\"] = new Class({Extends: o2.xAction.RestActions.Action});";
  509. content = content+"\no2.Actions.actions[\""+name+"\"] = new o2.xAction.RestActions.Action[\""+name+"\"](\""+name+"\", actionJson);";
  510. file.contents = new Buffer.from(content);
  511. this.push(file);
  512. cb();
  513. });
  514. }
  515. function concat_Style(){
  516. return through2.obj(function (file, enc, cb) {
  517. if (file.isNull()) {
  518. this.push(file);
  519. return cb();
  520. }
  521. if (file.isStream()) {
  522. this.emit('error', new gutil.PluginError(PLUGIN_NAME, 'Streaming not supported'));
  523. return cb();
  524. }
  525. var content = file.contents.toString();
  526. var name = file.path.replace(process.cwd(), "").replace(/\\/g, "/")
  527. name = ".."+name.substring(name.indexOf("/source")+7);
  528. content = "var csskey = encodeURIComponent(\""+name+"\");\no2.widget.css[csskey]="+content;
  529. file.contents = new Buffer.from(content);
  530. this.push(file);
  531. cb();
  532. });
  533. }
  534. function build_concat_basework_style(){
  535. return gulp.src([
  536. "o2web/source/x_component_process_Work/$Main/default/css.wcss",
  537. "o2web/source/x_component_process_Xform/$Form/default/css.wcss",
  538. "o2web/source/o2_core/o2/widget/$Tab/mobileForm/css.wcss",
  539. "o2web/source/o2_core/o2/widget/$Menu/tab/css.wcss",
  540. "o2web/source/o2_core/o2/widget/$Tab/form/css.wcss",
  541. "o2web/source/x_component_process_Xform/$Form/default/doc.wcss",
  542. "o2web/source/o2_core/o2/widget/$Toolbar/documentEdit/css.wcss",
  543. "o2web/source/o2_core/o2/widget/$Toolbar/documentEdit_side/css.wcss",
  544. "o2web/source/x_component_process_Xform/$Form/default/css.wcss"
  545. ])
  546. .pipe(concat_Style())
  547. .pipe(concat('js/base_work_style_temp.js'))
  548. .pipe(gulp.dest('o2web/source/x_desktop/'));
  549. }
  550. function build_concat_basework_action(){
  551. return gulp.src([
  552. "o2web/source/o2_core/o2/xAction/services/x_organization_assemble_authentication.json",
  553. "o2web/source/o2_core/o2/xAction/services/x_processplatform_assemble_surface.json",
  554. "o2web/source/o2_core/o2/xAction/services/x_organization_assemble_control.json",
  555. "o2web/source/o2_core/o2/xAction/services/x_query_assemble_surface.json",
  556. "o2web/source/o2_core/o2/xAction/services/x_cms_assemble_control.json",
  557. "o2web/source/o2_core/o2/xAction/services/x_program_center.json",
  558. "o2web/source/o2_core/o2/xAction/services/x_organization_assemble_personal.json"
  559. ])
  560. .pipe(concat_Actions())
  561. .pipe(concat('js/base_work_actions_temp.js'))
  562. .pipe(gulp.dest('o2web/source/x_desktop/'));
  563. }
  564. function build_concat_basework_clean(cb) {
  565. var dest = [
  566. 'o2web/source/x_desktop/js/base_work_actions_temp.js',
  567. 'o2web/source/x_desktop/js/base_work_style_temp.js'
  568. ];
  569. return del(dest, cb);
  570. }
  571. function build_concat_basework_body() {
  572. var src = [
  573. 'o2web/source/x_desktop/js/base_concat_head.js',
  574. 'o2web/source/o2_core/o2/lp/'+(options.lp || 'zh-cn')+'.js',
  575. 'o2web/source/x_desktop/js/base_work_style_temp.js',
  576. 'o2web/source/o2_core/o2/widget/Common.js',
  577. 'o2web/source/o2_core/o2/widget/Dialog.js',
  578. 'o2web/source/o2_core/o2/widget/UUID.js',
  579. 'o2web/source/o2_core/o2/widget/Menu.js',
  580. 'o2web/source/o2_core/o2/widget/Toolbar.js',
  581. 'o2web/source/o2_core/o2/xDesktop/Common.js',
  582. 'o2web/source/o2_core/o2/xDesktop/Actions/RestActions.js',
  583. 'o2web/source/o2_core/o2/xAction/RestActions.js',
  584. 'o2web/source/o2_core/o2/xDesktop/Access.js',
  585. 'o2web/source/o2_core/o2/xDesktop/Dialog.js',
  586. 'o2web/source/o2_core/o2/xDesktop/Menu.js',
  587. 'o2web/source/o2_core/o2/xDesktop/UserData.js',
  588. 'o2web/source/x_component_Template/MPopupForm.js',
  589. 'o2web/source/o2_core/o2/xDesktop/Authentication.js',
  590. 'o2web/source/o2_core/o2/xDesktop/Dialog.js',
  591. 'o2web/source/o2_core/o2/xDesktop/Window.js',
  592. 'o2web/source/x_component_Common/Main.js',
  593. 'o2web/source/o2_core/o2/lp/'+(options.lp || 'zh-cn')+'.js',
  594. 'o2web/source/x_component_process_Work/lp/'+(options.lp || 'zh-cn')+'.js',
  595. 'o2web/source/x_component_process_Xform/lp/'+(options.lp || 'zh-cn')+'.js',
  596. 'o2web/source/x_component_Selector/lp/'+(options.lp || 'zh-cn')+'.js',
  597. 'o2web/source/x_component_process_Work/Main.js',
  598. 'o2web/source/x_component_Selector/package.js',
  599. 'o2web/source/x_component_Selector/Person.js',
  600. 'o2web/source/x_component_Selector/Identity.js',
  601. 'o2web/source/x_component_Selector/Unit.js',
  602. 'o2web/source/x_component_Selector/IdentityWidthDuty.js',
  603. 'o2web/source/x_component_Selector/IdentityWidthDutyCategoryByUnit.js',
  604. 'o2web/source/x_component_Selector/UnitWithType.js',
  605. 'o2web/source/o2_core/o2/xScript/Actions/UnitActions.js',
  606. 'o2web/source/o2_core/o2/xScript/Actions/ScriptActions.js',
  607. 'o2web/source/o2_core/o2/xScript/Actions/CMSScriptActions.js',
  608. 'o2web/source/o2_core/o2/xScript/Actions/PortalScriptActions.js',
  609. 'o2web/source/o2_core/o2/xScript/Environment.js',
  610. 'o2web/source/x_component_Template/MTooltips.js',
  611. 'o2web/source/x_component_Template/MSelector.js',
  612. 'o2web/source/o2_core/o2/xAction/services/x_organization_assemble_authentication.js',
  613. 'o2web/source/o2_core/o2/xAction/services/x_processplatform_assemble_surface.js',
  614. 'o2web/source/o2_core/o2/xAction/services/x_cms_assemble_control.js',
  615. 'o2web/source/o2_core/o2/xAction/services/x_organization_assemble_control.js',
  616. 'o2web/source/o2_core/o2/xAction/services/x_query_assemble_surface.js',
  617. 'o2web/source/o2_core/o2/xAction/services/x_organization_assemble_personal.js',
  618. 'o2web/source/x_desktop/js/base_work_actions_temp.js',
  619. 'o2web/source/x_desktop/js/base.js',
  620. 'o2web/source/x_desktop/js/base_loader.js'
  621. ];
  622. var dest = 'target/o2server/servers/webServer/x_desktop/js/';
  623. return gulp.src(src)
  624. .pipe(sourceMap.init())
  625. .pipe(concat('base_work.js'))
  626. .pipe(gulp.dest(dest))
  627. .pipe(concat('base_work.min.js'))
  628. .pipe(uglify())
  629. //.pipe(rename({ extname: '.min.js' }))
  630. .pipe(sourceMap.write(""))
  631. .pipe(gulp.dest(dest));
  632. }
  633. function build_concat_baseportal_style(){
  634. return gulp.src([
  635. "o2web/source/x_component_process_Work/$Main/default/css.wcss",
  636. "o2web/source/x_component_portal_Portal/$Main/default/css.wcss",
  637. "o2web/source/x_component_process_Xform/$Form/default/css.wcss",
  638. "o2web/source/o2_core/o2/widget/$Tab/mobileForm/css.wcss",
  639. "o2web/source/o2_core/o2/widget/$Menu/tab/css.wcss",
  640. ])
  641. .pipe(concat_Style())
  642. .pipe(concat('js/base_portal_style_temp.js'))
  643. .pipe(gulp.dest('o2web/source/x_desktop/'));
  644. }
  645. function build_concat_baseportal_action(){
  646. return gulp.src([
  647. "o2web/source/o2_core/o2/xAction/services/x_organization_assemble_authentication.json",
  648. "o2web/source/o2_core/o2/xAction/services/x_portal_assemble_surface.json",
  649. "o2web/source/o2_core/o2/xAction/services/x_organization_assemble_control.json",
  650. "o2web/source/o2_core/o2/xAction/services/x_query_assemble_surface.json",
  651. "o2web/source/o2_core/o2/xAction/services/x_cms_assemble_control.json",
  652. "o2web/source/o2_core/o2/xAction/services/x_program_center.json",
  653. "o2web/source/o2_core/o2/xAction/services/x_organization_assemble_personal.json"
  654. ])
  655. .pipe(concat_Actions())
  656. .pipe(concat('js/base_portal_actions_temp.js'))
  657. .pipe(gulp.dest('o2web/source/x_desktop/'));
  658. }
  659. function build_concat_baseportal_clean(cb) {
  660. var dest = [
  661. 'o2web/source/x_desktop/js/base_portal_actions_temp.js',
  662. 'o2web/source/x_desktop/js/base_portal_style_temp.js'
  663. ];
  664. return del(dest, cb);
  665. }
  666. function build_concat_baseportal_body() {
  667. var src = [
  668. 'o2web/source/x_desktop/js/base_concat_head.js',
  669. 'o2web/source/o2_core/o2/lp/'+(options.lp || 'zh-cn')+'.js',
  670. 'o2web/source/x_desktop/js/base_portal_style_temp.js',
  671. 'o2web/source/o2_core/o2/widget/Common.js',
  672. 'o2web/source/o2_core/o2/widget/Dialog.js',
  673. 'o2web/source/o2_core/o2/widget/UUID.js',
  674. 'o2web/source/o2_core/o2/widget/Menu.js',
  675. 'o2web/source/o2_core/o2/widget/Toolbar.js',
  676. 'o2web/source/o2_core/o2/xDesktop/Common.js',
  677. 'o2web/source/o2_core/o2/xDesktop/Actions/RestActions.js',
  678. 'o2web/source/o2_core/o2/xAction/RestActions.js',
  679. 'o2web/source/o2_core/o2/xDesktop/Access.js',
  680. 'o2web/source/o2_core/o2/xDesktop/Dialog.js',
  681. 'o2web/source/o2_core/o2/xDesktop/Menu.js',
  682. 'o2web/source/o2_core/o2/xDesktop/UserData.js',
  683. 'o2web/source/x_component_Template/MPopupForm.js',
  684. 'o2web/source/o2_core/o2/xDesktop/Authentication.js',
  685. 'o2web/source/o2_core/o2/xDesktop/Window.js',
  686. 'o2web/source/x_component_Common/Main.js',
  687. 'o2web/source/x_component_process_Work/lp/'+(options.lp || 'zh-cn')+'.js',
  688. 'o2web/source/x_component_portal_Portal/lp/'+(options.lp || 'zh-cn')+'.js',
  689. 'o2web/source/x_component_process_Xform/lp/'+(options.lp || 'zh-cn')+'.js',
  690. 'o2web/source/x_component_Selector/lp/'+(options.lp || 'zh-cn')+'.js',
  691. 'o2web/source/x_component_portal_Portal/Main.js',
  692. 'o2web/source/x_component_Selector/package.js',
  693. 'o2web/source/x_component_Selector/Person.js',
  694. 'o2web/source/x_component_Selector/Identity.js',
  695. 'o2web/source/x_component_Selector/Unit.js',
  696. 'o2web/source/x_component_Selector/IdentityWidthDuty.js',
  697. 'o2web/source/x_component_Selector/IdentityWidthDutyCategoryByUnit.js',
  698. 'o2web/source/x_component_Selector/UnitWithType.js',
  699. 'o2web/source/o2_core/o2/xScript/Actions/UnitActions.js',
  700. 'o2web/source/o2_core/o2/xScript/Actions/ScriptActions.js',
  701. 'o2web/source/o2_core/o2/xScript/Actions/CMSScriptActions.js',
  702. 'o2web/source/o2_core/o2/xScript/Actions/PortalScriptActions.js',
  703. 'o2web/source/o2_core/o2/xScript/PageEnvironment.js',
  704. 'o2web/source/o2_core/o2/xAction/services/x_organization_assemble_authentication.js',
  705. 'o2web/source/o2_core/o2/xAction/services/x_cms_assemble_control.js',
  706. 'o2web/source/o2_core/o2/xAction/services/x_organization_assemble_control.js',
  707. 'o2web/source/o2_core/o2/xAction/services/x_query_assemble_surface.js',
  708. 'o2web/source/o2_core/o2/xAction/services/x_organization_assemble_personal.js',
  709. 'o2web/source/x_desktop/js/base_portal_actions_temp.js',
  710. 'o2web/source/x_desktop/js/base.js',
  711. 'o2web/source/x_desktop/js/base_loader.js'
  712. ];
  713. var dest = 'target/o2server/servers/webServer/x_desktop/js/';
  714. return gulp.src(src)
  715. .pipe(sourceMap.init())
  716. .pipe(concat('base_portal.js'))
  717. .pipe(gulp.dest(dest))
  718. .pipe(concat('base_portal.min.js'))
  719. .pipe(uglify())
  720. //.pipe(rename({ extname: '.min.js' }))
  721. .pipe(sourceMap.write(""))
  722. .pipe(gulp.dest(dest));
  723. }
  724. exports.build_concat = gulp.parallel(
  725. build_concat_o2,
  726. build_concat_base,
  727. build_concat_desktop,
  728. build_concat_xform,
  729. build_bundle,
  730. gulp.series(build_concat_basework_style, build_concat_basework_action, build_concat_basework_body,build_concat_basework_clean),
  731. gulp.series(build_concat_baseportal_style, build_concat_baseportal_action, build_concat_baseportal_body,build_concat_baseportal_clean)
  732. );
  733. function getGitV(){
  734. var tagPromise = new Promise(function(s, f){
  735. git.exec({args : 'describe --tag'}, function (err, stdout) {
  736. if (err){
  737. f(err);
  738. }
  739. var v = stdout.substring(0, stdout.indexOf("-"));
  740. s(v);
  741. });
  742. });
  743. var revPromise = new Promise(function(s, f){
  744. git.exec({args : 'rev-parse --short HEAD'}, function (err, hash) {
  745. if (err){
  746. f(err);
  747. }
  748. s(hash.trim());
  749. });
  750. });
  751. return Promise.all([tagPromise,revPromise])
  752. }
  753. function build_web_v_html() {
  754. var src = 'o2web/source/x_desktop/*.html';
  755. var dest = 'target/o2server/servers/webServer/x_desktop/';
  756. return getGitV().then(function(arr){
  757. return gulp.src(src)
  758. .pipe(assetRev({"verConnecter": arr[0], "md5": arr[1]}))
  759. .pipe(gulp.dest(dest))
  760. .pipe(gutil.noop());
  761. }, function(){
  762. return gulp.src(src)
  763. .pipe(assetRev())
  764. .pipe(gulp.dest(dest))
  765. .pipe(gutil.noop());
  766. });
  767. }
  768. function build_web_api() {
  769. var src = 'o2web/api/**/*';
  770. var dest = 'target/o2server/servers/webServer/api/';
  771. return gulp.src(src)
  772. .pipe(gulp.dest(dest))
  773. }
  774. function build_doc(){
  775. return getGitV().then(function(arr){
  776. return (shell.task('jsdoc -c o2web/jsdoc.conf.json -q version='+arr[0]+'-'+arr[1]+''))();
  777. }, function(){
  778. return (shell.task('jsdoc -c o2web/jsdoc.conf.json -q version='))();
  779. });
  780. }
  781. exports.build_api = gulp.series(build_doc, build_web_api);
  782. function build_web_v_o2() {
  783. var src = [
  784. 'target/o2server/servers/webServer/o2_core/o2.js',
  785. 'target/o2server/servers/webServer/o2_core/o2.min.js'
  786. ];
  787. var dest = 'target/o2server/servers/webServer/o2_core/';
  788. return getGitV().then(function(arr){
  789. return gulp.src(src)
  790. .pipe(assetRev({"verConnecter": arr[0], "md5": arr[1], "replace": true}))
  791. //.pipe(gulp.dest(dest))
  792. // .pipe(uglify())
  793. // .pipe(rename({ extname: '.min.js' }))
  794. // .pipe(gulp.dest(dest))
  795. .pipe(gutil.noop());
  796. }, function(){
  797. return gulp.src(src)
  798. .pipe(assetRev())
  799. .pipe(gutil.noop());
  800. });
  801. }
  802. function clear_build(cb){
  803. console.log(`---------------------------------------------------------------------
  804. . clear old build ...
  805. ---------------------------------------------------------------------`);
  806. var dest = 'target';
  807. del(dest, { force: true });
  808. cb();
  809. }
  810. function clear_deploy(cb){
  811. console.log(`---------------------------------------------------------------------
  812. . clear old deploy ...
  813. ---------------------------------------------------------------------`);
  814. var dest = ["target/o2server/store/", "target/o2server/commons/", "target/o2server/jvm/", "target/o2server/configSample/", "target/o2server/localSample/", "target/o2server/servers/"];
  815. dest = dest.concat(["target/o2server/*.sh", "target/o2server/*.jar", "target/o2server/*.html", "target/o2server/*.bat", "target/o2server/version.o2"]);
  816. del(dest, { force: true });
  817. cb();
  818. }
  819. exports.clear_build = clear_build;
  820. exports.clear_deploy = clear_deploy;
  821. function deploy_server(){
  822. console.log(`---------------------------------------------------------------------
  823. . deploy to target ...
  824. ---------------------------------------------------------------------`);
  825. var source = ["o2server/*store/**/*", "o2server/*commons/**/*", "o2server/*jvm/**/*", "o2server/*configSample/**/*", "o2server/*localSample/**/*"];
  826. source = source.concat(scriptSource);
  827. console.log(source)
  828. var dest = "target/o2server/"
  829. var entries = fg.sync(source, { dot: false});
  830. var size = entries.length;
  831. var pb = new ProgressBar('', 50);
  832. var doCount = 0;
  833. var stream = gulp.src(source);
  834. stream.on("end", ()=>{console.log();});
  835. return stream.pipe(gulp.dest(dest))
  836. .pipe(logger(function(){
  837. doCount++;
  838. if (doCount <= size) {pb.render({ completed: doCount, total: size, count: doCount})};
  839. }));
  840. }
  841. exports.preperation = gulp.series(download_commons_and_jvm, decompress_commons_and_jvm, move_commons, move_jvm, clear_commons_git, clear_jvm_git);
  842. var shell = require('gulp-shell')
  843. exports.build_server = function(){
  844. console.log(`---------------------------------------------------------------------
  845. . Start compiling the server ...
  846. ---------------------------------------------------------------------`);
  847. return (shell.task('npm run build_server_script'))();
  848. };
  849. function chmod_jvm(){
  850. return (shell.task('chmod 777 -R target/o2server/jvm'))();
  851. }
  852. function chmod_commons(){
  853. return (shell.task('chmod 777 -R target/o2server/commons'))();
  854. }
  855. function chmod_sh(){
  856. return (shell.task('chmod 777 target/o2server/*.sh'))();
  857. }
  858. function chmod_servers(){
  859. return (shell.task('chmod 777 -R target/o2server/servers'))();
  860. }
  861. exports.build_web = gulp.series(
  862. build_web_minimize,
  863. build_web_move,
  864. gulp.parallel(
  865. build_concat_o2,
  866. build_concat_base,
  867. build_concat_desktop,
  868. build_concat_xform,
  869. gulp.series(build_concat_basework_style, build_concat_basework_action, build_concat_basework_body,build_concat_basework_clean),
  870. gulp.series(build_concat_baseportal_style, build_concat_baseportal_action, build_concat_baseportal_body,build_concat_baseportal_clean),
  871. build_bundle
  872. ),
  873. build_web_v_html,
  874. build_web_v_o2,
  875. gulp.series(build_doc, build_web_api));
  876. if (os.platform().indexOf("win")==-1){
  877. exports.deploy = gulp.series(deploy_server, chmod_jvm, chmod_commons, chmod_sh, chmod_servers);
  878. }else{
  879. exports.deploy = gulp.series(deploy_server);
  880. }