create.js 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208
  1. /*******************************
  2. Create Distributions
  3. *******************************/
  4. /*
  5. This will create individual distribution repositories for each SUI distribution
  6. * copy distribution files to release
  7. * update package.json file
  8. */
  9. var
  10. gulp = require('gulp'),
  11. // node dependencies
  12. fs = require('fs'),
  13. path = require('path'),
  14. mergeStream = require('merge-stream'),
  15. // admin dependencies
  16. flatten = require('gulp-flatten'),
  17. jsonEditor = require('gulp-json-editor'),
  18. plumber = require('gulp-plumber'),
  19. rename = require('gulp-rename'),
  20. replace = require('gulp-replace'),
  21. // config
  22. config = require('../../config/user'),
  23. release = require('../../config/admin/release'),
  24. project = require('../../config/project/release'),
  25. // shorthand
  26. version = project.version,
  27. output = config.paths.output
  28. ;
  29. module.exports = function(callback) {
  30. var
  31. stream,
  32. index,
  33. tasks = []
  34. ;
  35. for(index in release.distributions) {
  36. var
  37. distribution = release.distributions[index]
  38. ;
  39. // streams... designed to save time and make coding fun...
  40. (function(distribution) {
  41. var
  42. distLowerCase = distribution.toLowerCase(),
  43. outputDirectory = path.join(release.outputRoot, distLowerCase),
  44. packageFile = path.join(outputDirectory, release.files.npm),
  45. repoName = release.distRepoRoot + distribution,
  46. regExp = {
  47. match : {
  48. files : '{files}',
  49. version : '{version}'
  50. }
  51. },
  52. task = {
  53. all : distribution + ' copying files',
  54. repo : distribution + ' create repo',
  55. meteor : distribution + ' create meteor package.js',
  56. package : distribution + ' create package.json'
  57. },
  58. gatherFiles,
  59. createList
  60. ;
  61. // get files for meteor
  62. gatherFiles = function(dir) {
  63. var
  64. dir = dir || path.resolve('.'),
  65. list = fs.readdirSync(dir),
  66. omitted = [
  67. '.git',
  68. 'node_modules',
  69. 'package.js',
  70. 'LICENSE',
  71. 'README.md',
  72. 'package.json',
  73. 'bower.json',
  74. '.gitignore'
  75. ],
  76. files = []
  77. ;
  78. list.forEach(function(file) {
  79. var
  80. isOmitted = (omitted.indexOf(file) > -1),
  81. filePath = path.join(dir, file),
  82. stat = fs.statSync(filePath)
  83. ;
  84. if(!isOmitted) {
  85. if(stat && stat.isDirectory()) {
  86. files = files.concat(gatherFiles(filePath));
  87. }
  88. else {
  89. files.push(filePath.replace(outputDirectory + path.sep, ''));
  90. }
  91. }
  92. });
  93. return files;
  94. };
  95. // spaces out list correctly
  96. createList = function(files) {
  97. var filenames = '';
  98. for(var file in files) {
  99. if(file == (files.length - 1) ) {
  100. filenames += "'" + files[file] + "'";
  101. }
  102. else {
  103. filenames += "'" + files[file] + "',\n ";
  104. }
  105. }
  106. return filenames;
  107. };
  108. tasks.push(function() {
  109. var
  110. files = gatherFiles(outputDirectory),
  111. filenames = createList(files)
  112. ;
  113. gulp.src(release.templates.meteor[distLowerCase])
  114. .pipe(plumber())
  115. .pipe(flatten())
  116. .pipe(replace(regExp.match.version, version))
  117. .pipe(replace(regExp.match.files, filenames))
  118. .pipe(rename(release.files.meteor))
  119. .pipe(gulp.dest(outputDirectory))
  120. ;
  121. });
  122. if(distribution == 'CSS') {
  123. tasks.push(function() {
  124. var
  125. themes,
  126. components,
  127. releases
  128. ;
  129. themes = gulp.src('dist/themes/default/**/*', { base: 'dist/' })
  130. .pipe(gulp.dest(outputDirectory))
  131. ;
  132. components = gulp.src('dist/components/*', { base: 'dist/' })
  133. .pipe(gulp.dest(outputDirectory))
  134. ;
  135. releases = gulp.src('dist/*', { base: 'dist/' })
  136. .pipe(gulp.dest(outputDirectory))
  137. ;
  138. return mergeStream(themes, components, releases);
  139. });
  140. }
  141. else if(distribution == 'LESS') {
  142. tasks.push(function() {
  143. var
  144. definitions,
  145. themeImport,
  146. themeConfig,
  147. siteTheme,
  148. themes
  149. ;
  150. definitions = gulp.src('src/definitions/**/*', { base: 'src/' })
  151. .pipe(gulp.dest(outputDirectory))
  152. ;
  153. themeImport = gulp.src('src/semantic.less', { base: 'src/' })
  154. .pipe(gulp.dest(outputDirectory))
  155. ;
  156. themeImport = gulp.src('src/theme.less', { base: 'src/' })
  157. .pipe(gulp.dest(outputDirectory))
  158. ;
  159. themeConfig = gulp.src('src/theme.config.example', { base: 'src/' })
  160. .pipe(gulp.dest(outputDirectory))
  161. ;
  162. siteTheme = gulp.src('src/_site/**/*', { base: 'src/' })
  163. .pipe(gulp.dest(outputDirectory))
  164. ;
  165. themes = gulp.src('src/themes/**/*', { base: 'src/' })
  166. .pipe(gulp.dest(outputDirectory))
  167. ;
  168. return mergeStream(definitions, themeImport, themeConfig, siteTheme, themes);
  169. });
  170. }
  171. // extend package.json
  172. tasks.push(function() {
  173. return gulp.src(packageFile)
  174. .pipe(plumber())
  175. .pipe(jsonEditor(function(package) {
  176. if(version) {
  177. package.version = version;
  178. }
  179. return package;
  180. }))
  181. .pipe(gulp.dest(outputDirectory))
  182. ;
  183. });
  184. })(distribution);
  185. }
  186. gulp.series(...tasks)(callback);
  187. };