package.js 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116
  1. const fs = require('fs');
  2. const os = require('os');
  3. const jetpack = require('fs-jetpack');
  4. const path = require('path');
  5. const archiver = require('archiver');
  6. const args = process.argv.slice(2);
  7. const folder = path.join(__dirname, '/..');
  8. /**
  9. * Realease new version
  10. * calling
  11. * node development/package.js versionhere
  12. * then npm publish
  13. */
  14. async function createFolder() {
  15. jetpack.remove(path.join(folder, 'glightbox-master.zip'));
  16. const tmpfolder = path.join(os.tmpdir(), 'glightbox-master');
  17. const newVersion = args[0];
  18. await updateFileVersion({
  19. file: path.join(folder, 'index.html'),
  20. search: /download\/(.*)\/glightbox/g,
  21. replace: newVersion
  22. });
  23. await updateFileVersion({
  24. file: path.join(folder, 'package.json'),
  25. search: /"version":\s?"(.*)",/g,
  26. replace: newVersion
  27. });
  28. await updateFileVersion({
  29. file: path.join(folder, 'README.md'),
  30. search: /v([0-9-.]+)/g,
  31. replace: newVersion
  32. });
  33. await updateFileVersion({
  34. file: path.join(folder, 'src/js/glightbox.js'),
  35. search: /version\s?=\s?'(.*)';/g,
  36. replace: newVersion
  37. });
  38. jetpack.copy(folder, tmpfolder, {
  39. matching: [
  40. '!node_modules',
  41. '!node_modules/**/*',
  42. '!.git',
  43. '!.git/**/*',
  44. '!.github',
  45. '!.github/**/*',
  46. '!.vscode',
  47. '!.idea',
  48. '!.idea/**/*',
  49. '!.nova',
  50. '!.nova/**/*',
  51. '!icons.zip',
  52. '!.vscode/**/*',
  53. '!*.psd',
  54. '!.DS_Store'
  55. ]
  56. });
  57. console.log('Created folder', `Created folder correctly`);
  58. const zip = await createZip(tmpfolder).catch((error) => {
  59. jetpack.remove(tmpfolder);
  60. });
  61. const folderName = path.basename(folder);
  62. jetpack.remove(tmpfolder);
  63. jetpack.move(zip, path.join(folder, folderName + '-master.zip'));
  64. console.log('Done', `Packaging process ended correctly`);
  65. }
  66. createFolder();
  67. async function createZip(folder) {
  68. return new Promise((resolve, reject) => {
  69. const name = folder + '.zip';
  70. const output = fs.createWriteStream(name);
  71. const archive = archiver('zip', { zlib: { level: 9 } });
  72. output.on('close', () => {
  73. console.log('Zipped', `zip archive was created correctly`);
  74. resolve(name);
  75. });
  76. archive.on('error', (err) => {
  77. console.log('Package Error', `The was an error creating the zip.`);
  78. reject(err);
  79. });
  80. archive.pipe(output);
  81. archive.directory(folder, false);
  82. archive.finalize();
  83. });
  84. }
  85. async function updateFileVersion(data) {
  86. return new Promise((resolve, reject) => {
  87. jetpack.readAsync(data.file).then((str) => {
  88. let regexp = new RegExp(data.search);
  89. while ((matches = regexp.exec(str)) !== null) {
  90. let foundLine = matches[0];
  91. let newLine = foundLine.replace(matches[1], data.replace);
  92. str = str.replace(foundLine, newLine);
  93. }
  94. jetpack.writeAsync(data.file, str).then(() => {
  95. resolve(data.file);
  96. });
  97. });
  98. });
  99. }