Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
219 lines (197 sloc)
6.2 KB
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| /******************************* | |
| 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); | |
| }; |