| /******************************* |
| 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); |
| }; |