|
|
/******************************* Create Distributions *******************************/
/* This will create individual distribution repositories for each SUI distribution
* copy distribution files to release * update package.json file */
var gulp = require('gulp'),
// node dependencies
console = require('better-console'), del = require('del'), fs = require('fs'), path = require('path'), runSequence = require('run-sequence'), mergeStream = require('merge-stream'),
// admin dependencies
concatFileNames = require('gulp-concat-filenames'), debug = require('gulp-debug'), flatten = require('gulp-flatten'), git = require('gulp-git'), jsonEditor = require('gulp-json-editor'), plumber = require('gulp-plumber'), rename = require('gulp-rename'), replace = require('gulp-replace'), tap = require('gulp-tap'),
// config
config = require('../../config/user'), release = require('../../config/admin/release'), project = require('../../config/project/release'),
// shorthand
version = project.version, output = config.paths.output
;
module.exports = function(callback) { var stream, index, tasks = [] ;
for(index in release.distributions) {
var distribution = release.distributions[index] ;
// streams... designed to save time and make coding fun...
(function(distribution) {
var distLowerCase = distribution.toLowerCase(), outputDirectory = path.join(release.outputRoot, distLowerCase), packageFile = path.join(outputDirectory, release.files.npm), repoName = release.distRepoRoot + distribution, regExp = { match : { files : '{files}', version : '{version}' } }, task = { all : distribution + ' copying files', repo : distribution + ' create repo', meteor : distribution + ' create meteor package.js', package : distribution + ' create package.json' }, gatherFiles, createList ;
// get files for meteor
gatherFiles = function(dir) { var dir = dir || path.resolve('.'), list = fs.readdirSync(dir), omitted = [ '.git', 'node_modules', 'package.js', 'LICENSE', 'README.md', 'package.json', 'bower.json', '.gitignore' ], files = [] ; list.forEach(function(file) { var isOmitted = (omitted.indexOf(file) > -1), filePath = path.join(dir, file), stat = fs.statSync(filePath) ; if(!isOmitted) { if(stat && stat.isDirectory()) { files = files.concat(gatherFiles(filePath)); } else { files.push(filePath.replace(outputDirectory + path.sep, '')); } } }); return files; };
// spaces out list correctly
createList = function(files) { var filenames = ''; for(var file in files) { if(file == (files.length - 1) ) { filenames += "'" + files[file] + "'"; } else { filenames += "'" + files[file] + "',\n "; } } return filenames; };
gulp.task(task.meteor, function() { var files = gatherFiles(outputDirectory), filenames = createList(files) ; gulp.src(release.templates.meteor[distLowerCase]) .pipe(plumber()) .pipe(flatten()) .pipe(replace(regExp.match.version, version)) .pipe(replace(regExp.match.files, filenames)) .pipe(rename(release.files.meteor)) .pipe(gulp.dest(outputDirectory)) ; });
if(distribution == 'CSS') { gulp.task(task.repo, function() { var themes, components, releases ; themes = gulp.src('dist/themes/default/**/*', { base: 'dist/' }) .pipe(gulp.dest(outputDirectory)) ; components = gulp.src('dist/components/*', { base: 'dist/' }) .pipe(gulp.dest(outputDirectory)) ; releases = gulp.src('dist/*', { base: 'dist/' }) .pipe(gulp.dest(outputDirectory)) ; return mergeStream(themes, components, releases); }); } else if(distribution == 'LESS') { gulp.task(task.repo, function() { var definitions, themeImport, themeConfig, siteTheme, themes ; definitions = gulp.src('src/definitions/**/*', { base: 'src/' }) .pipe(gulp.dest(outputDirectory)) ; themeImport = gulp.src('src/semantic.less', { base: 'src/' }) .pipe(gulp.dest(outputDirectory)) ; themeImport = gulp.src('src/theme.less', { base: 'src/' }) .pipe(gulp.dest(outputDirectory)) ; themeConfig = gulp.src('src/theme.config.example', { base: 'src/' }) .pipe(gulp.dest(outputDirectory)) ; siteTheme = gulp.src('src/_site/**/*', { base: 'src/' }) .pipe(gulp.dest(outputDirectory)) ; themes = gulp.src('src/themes/**/*', { base: 'src/' }) .pipe(gulp.dest(outputDirectory)) ; return mergeStream(definitions, themeImport, themeConfig, siteTheme, themes); }); }
// extend package.json
gulp.task(task.package, function() { return gulp.src(packageFile) .pipe(plumber()) .pipe(jsonEditor(function(package) { if(version) { package.version = version; } return package; })) .pipe(gulp.dest(outputDirectory)) ; });
tasks.push(task.meteor); tasks.push(task.repo); tasks.push(task.package);
})(distribution); } runSequence(tasks, callback); };
|