UNPKG

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