deploy.js 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. const LineReader = require('n-readlines');
  2. const zipdir = require('zip-dir');
  3. const copydir = require('copy-dir');
  4. const commander = require('commander');
  5. const del = require('del');
  6. const file = require('./src/file');
  7. const deploy = require('./deploy.json');
  8. // Lecture des arguments
  9. commander.version('1.2.0');
  10. commander
  11. .option('-z, --zip', 'create a zip file for each programs', false)
  12. .option('-r, --remove', 'zip and deletes the non-zip version of programs', false);
  13. commander.parse(process.argv);
  14. const zip = commander.zip || commander.remove;
  15. const remove = commander.remove;
  16. // Constante
  17. const OUT = './dist/';
  18. // Creation dossier destination
  19. file.makedir(OUT);
  20. // Séparation de chaque programme
  21. deploy.programs.forEach(program => {
  22. // Création du dossier
  23. const distPath = OUT + program.name;
  24. file.makedir(distPath);
  25. // Creation dossier data
  26. file.makedir(distPath + '/data');
  27. file.put(distPath + '/data/.gitkeep', '');
  28. // Copie des fichiers commun
  29. file.makedir(distPath + '/src');
  30. file.fs.readdirSync('./src').forEach(f => {
  31. if (!file.isDir('./src/' + f)) {
  32. file.fs.copyFile('./src/' + f, distPath + '/src/' + f, (err) => {
  33. if (err) throw err;
  34. });
  35. }
  36. });
  37. // Copie dossier propre à chaque programme
  38. copydir.sync('./src/' + program.name, distPath + '/src/' + program.name, {
  39. utimes: true,
  40. mode: true,
  41. cover: true
  42. });
  43. // Copie fichier main
  44. file.fs.copyFile(program.main, distPath + '/main.js', (err) => {
  45. if (err) throw err;
  46. });
  47. // Copie package.json
  48. const pckg = require('./package.json');
  49. pckg.scripts = program.scripts;
  50. pckg.version = program.version;
  51. program.rm_dependencies.forEach(elt => {
  52. delete pckg.dependencies[elt];
  53. });
  54. let json = JSON.stringify(pckg, null, 4);
  55. json = json.replace(new RegExp(program.main, 'g'), 'main.js');
  56. file.put(distPath + '/package.json', json);
  57. // Ecriture ReadMe
  58. file.put(distPath + '/README.md', readMe(program.part).replace(new RegExp(program.main, 'g'), 'main.js'));
  59. // Zip du code pour distribution
  60. if (zip) {
  61. zipdir(distPath, {saveTo: distPath + '.zip'}, (err, buffer) => {
  62. if (err) {
  63. console.error('Error when zipping files', err);
  64. } else {
  65. console.info(`Zip file created for ${program.name} in ${distPath}.zip`);
  66. }
  67. });
  68. }
  69. // Message de fin
  70. console.info(`${program.name} deployed in ${distPath}`);
  71. // Si besoins on supprime les versions non zipper des dossier
  72. if (remove) {
  73. del(distPath + '/**').then(deletedPaths => {
  74. file.fs.rmdir(distPath, () => {
  75. console.info(`Directory ${distPath} deleted`);
  76. });
  77. });
  78. }
  79. });
  80. // Fonction découpage readme
  81. function readMe(part) {
  82. const liner = new LineReader('./README.md');
  83. let data = '';
  84. let line = liner.next().toString();
  85. while (line !== 'false' && line.indexOf('## Partie ') === -1) {
  86. data += '\n' + line;
  87. line = liner.next().toString();
  88. }
  89. while (line !== 'false' && line.indexOf('## Partie ' + part) === -1) {
  90. line = liner.next().toString();
  91. }
  92. data += '\n' + line;
  93. line = liner.next().toString();
  94. while (line !== 'false' && line.indexOf('## Partie ') === -1) {
  95. data += '\n' + line;
  96. line = liner.next().toString();
  97. }
  98. if (line !== 'false') {
  99. liner.close();
  100. }
  101. return data;
  102. }