1 |
|
2 |
|
3 |
|
4 |
|
5 |
|
6 |
|
7 |
|
8 |
|
9 |
|
10 |
|
11 |
|
12 | var
|
13 | gulp = require('gulp'),
|
14 |
|
15 |
|
16 | fs = require('fs'),
|
17 | path = require('path'),
|
18 | mergeStream = require('merge-stream'),
|
19 |
|
20 |
|
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 |
|
28 | config = require('../../config/user'),
|
29 | release = require('../../config/admin/release'),
|
30 | project = require('../../config/project/release'),
|
31 |
|
32 |
|
33 | version = project.version,
|
34 | output = config.paths.output
|
35 |
|
36 | ;
|
37 |
|
38 |
|
39 | module.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 |
|
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 |
|
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 |
|
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 |
|
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 |