index.js 6.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219
  1. let prompt = require('prompt');
  2. let shelljs = require('shelljs');
  3. let fs = require('fs-extra');
  4. let basePath = '../../dist/preview release';
  5. // This can be changed when we have a new major release.
  6. let minimumDependency = '>=3.2.0-alpha';
  7. let packages = [
  8. {
  9. name: 'core',
  10. path: '../../'
  11. },
  12. {
  13. name: 'gui',
  14. path: basePath + '/gui/'
  15. },
  16. {
  17. name: 'materials',
  18. path: basePath + '/materialsLibrary/'
  19. },
  20. {
  21. name: 'postProcess',
  22. path: basePath + '/postProcessesLibrary/'
  23. },
  24. {
  25. name: 'gltf2interface',
  26. path: basePath + '/gltf2interface/'
  27. },
  28. {
  29. name: 'loaders',
  30. path: basePath + '/loaders/'
  31. },
  32. {
  33. name: 'serializers',
  34. path: basePath + '/serializers/'
  35. },
  36. {
  37. name: 'proceduralTextures',
  38. path: basePath + '/proceduralTexturesLibrary/'
  39. },
  40. {
  41. name: 'inspector',
  42. path: basePath + '/inspector/'
  43. },
  44. {
  45. name: 'viewer',
  46. path: basePath + '/viewer/'
  47. }
  48. ];
  49. function updateEngineVersion(newVersion) {
  50. console.log("updating version in babylon.engine.ts");
  51. let engineContent = fs.readFileSync("../../src/Engine/babylon.engine.ts").toString();
  52. let replaced = engineContent.replace(/(public static get Version\(\): string {\s*return ")(.*)(";\s*})/g, "$1" + newVersion + "$3");
  53. fs.writeFileSync("../../src/Engine/babylon.engine.ts", replaced);
  54. }
  55. function runGulp() {
  56. // run gulp typescript-all
  57. console.log("Running gulp compilation");
  58. let exec = shelljs.exec("gulp typescript-all --gulpfile ../Gulp/gulpfile.js");
  59. if (exec.code) {
  60. console.log("error during compilation, aborting");
  61. process.exit(1);
  62. }
  63. }
  64. function processPackages(version) {
  65. packages.forEach((package) => {
  66. if (package.name === "core") {
  67. processCore(package, version);
  68. } else {
  69. let packageJson = require(package.path + 'package.json');
  70. packageJson.version = version;
  71. if (packageJson.dependencies) {
  72. Object.keys(packageJson.dependencies).forEach(key => {
  73. if (key.indexOf("babylonjs") !== -1) {
  74. packageJson.dependencies[key] = version;
  75. }
  76. });
  77. }
  78. if (packageJson.peerDependencies) packageJson.peerDependencies.babylonjs = minimumDependency;
  79. fs.writeFileSync(package.path + 'package.json', JSON.stringify(packageJson, null, 4));
  80. console.log('Publishing ' + package.name + " from " + package.path);
  81. let tagDef = "";
  82. // check for alpha or beta
  83. if (version.indexOf('alpha') !== -1 || version.indexOf('beta') !== -1) {
  84. tagDef = '--tag preview';
  85. }
  86. //publish the respected package
  87. shelljs.exec('npm publish \"' + package.path + "\"" + ' ' + tagDef);
  88. }
  89. });
  90. }
  91. //check if logged in
  92. console.log("Using npm user:");
  93. let loginCheck = shelljs.exec('npm whoami');
  94. if (loginCheck.code === 0) {
  95. prompt.start();
  96. prompt.get(['version'], function (err, result) {
  97. let version = result.version;
  98. updateEngineVersion(version);
  99. if (process.argv.indexOf('--no-build') === -1) {
  100. runGulp();
  101. }
  102. processPackages(version);
  103. console.log("done, please tag git with " + version);
  104. });
  105. } else {
  106. console.log('not logged in.');
  107. }
  108. function processCore(package, version) {
  109. let packageJson = require(package.path + 'package.json');
  110. // make a temporary directory
  111. fs.ensureDirSync(basePath + '/package/');
  112. let files = [
  113. {
  114. path: basePath + "/babylon.d.ts",
  115. objectName: "babylon.d.ts"
  116. },
  117. {
  118. path: basePath + "/es6.js",
  119. objectName: "es6.js"
  120. },
  121. {
  122. path: basePath + "/babylon.js",
  123. objectName: "babylon.js"
  124. },
  125. {
  126. path: basePath + "/babylon.max.js",
  127. objectName: "babylon.max.js"
  128. },
  129. {
  130. path: basePath + "/babylon.worker.js",
  131. objectName: "babylon.worker.js"
  132. },
  133. {
  134. path: basePath + "/Oimo.js",
  135. objectName: "Oimo.js"
  136. },
  137. {
  138. path: package.path + "readme.md",
  139. objectName: "readme.md"
  140. }
  141. ];
  142. // remove the modules for now
  143. /*fs.readdirSync(basePath + '/modules/').forEach(object => {
  144. console.log(object);
  145. if (fs.statSync(basePath + '/modules/' + object).isDirectory) {
  146. files.push({
  147. path: basePath + '/modules/' + object,
  148. objectName: object,
  149. isDir: true
  150. });
  151. }
  152. })*/
  153. //copy them to the package path
  154. files.forEach(file => {
  155. fs.copySync(file.path, basePath + '/package/' + file.objectName);
  156. });
  157. // update package.json
  158. packageJson.version = version;
  159. console.log("generating file list");
  160. let packageFiles = ["package.json"];
  161. files.forEach(file => {
  162. if (!file.isDir) {
  163. packageFiles.push(file.objectName);
  164. } else {
  165. //todo is it better to read the content and add it? leave it like that ATM
  166. packageFiles.push(file.objectName + "/index.js", file.objectName + "/index.d.ts", file.objectName + "/es6.js")
  167. }
  168. });
  169. console.log("updating package.json");
  170. packageJson.files = packageFiles;
  171. packageJson.main = "babylon.js";
  172. packageJson.typings = "babylon.d.ts";
  173. fs.writeFileSync(basePath + '/package/' + 'package.json', JSON.stringify(packageJson, null, 4));
  174. console.log('Publishing ' + package.name + " from " + basePath + '/package/');
  175. let tagDef = "";
  176. // check for alpha or beta
  177. if (version.indexOf('alpha') !== -1 || version.indexOf('beta') !== -1) {
  178. tagDef = '--tag preview';
  179. }
  180. //publish the respected package
  181. shelljs.exec('npm publish \"' + basePath + '/package/' + "\"" + ' ' + tagDef);
  182. // remove package directory
  183. fs.removeSync(basePath + '/package/');
  184. // now update the main package.json
  185. packageJson.files = packageJson.files.map(file => {
  186. if (file !== 'package.json' && file !== 'readme.md') {
  187. return 'dist/preview release/' + file;
  188. } else {
  189. return file;
  190. }
  191. });
  192. packageJson.main = "dist/preview release/babylon.js";
  193. packageJson.typings = "dist/preview release/babylon.d.ts";
  194. fs.writeFileSync(package.path + 'package.json', JSON.stringify(packageJson, null, 4));
  195. }