123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- /*******************************
- 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
- fs = require('fs'),
- path = require('path'),
- mergeStream = require('merge-stream'),
- // admin dependencies
- flatten = require('gulp-flatten'),
- jsonEditor = require('gulp-json-editor'),
- plumber = require('gulp-plumber'),
- rename = require('gulp-rename'),
- replace = require('gulp-replace'),
- // 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;
- };
- tasks.push(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') {
- tasks.push(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') {
- tasks.push(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
- tasks.push(function() {
- return gulp.src(packageFile)
- .pipe(plumber())
- .pipe(jsonEditor(function(package) {
- if(version) {
- package.version = version;
- }
- return package;
- }))
- .pipe(gulp.dest(outputDirectory))
- ;
- });
- })(distribution);
- }
- gulp.series(...tasks)(callback);
- };
|