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