Skip to content

Commit 94be97c

Browse files
committed
Merge pull request #123 from 10gen/fix-windows
Fix windows
2 parents 1b2ca92 + 9f40931 commit 94be97c

25 files changed

+555
-222
lines changed

gulpfile.js

Lines changed: 139 additions & 76 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,17 @@
1+
process.env.DEBUG = '*';
2+
3+
/**
4+
* # Welcome to Scout's gulpfile!
5+
*
6+
* Here are a few tips to guide you on your quest:
7+
*
8+
* - [Gulp](http://gulpjs.com) is a toolkit for workflow automation
9+
* - Use the `DEBUG` environment variable if you run into trouble! @see http://npm.im/debug
10+
* - Check out the [gulp cookbook](http://git.io/vGye8) for more info
11+
* - Remember to smile and floss
12+
*/
13+
var path = require('path');
14+
var spawn = require('child_process').spawn;
115
var browserify = require('browserify');
216
var watchify = require('watchify');
317
var source = require('vinyl-source-stream');
@@ -9,91 +23,101 @@ var sourcemaps = require('gulp-sourcemaps');
923
var buffer = require('vinyl-buffer');
1024
var merge = require('merge-stream');
1125
var shell = require('gulp-shell');
12-
var path = require('path');
1326
var del = require('del');
14-
var spawn = require('child_process').spawn;
27+
var sequence = require('run-sequence');
1528

1629
var notify = require('./tasks/notify');
1730
var pkg = require('./package.json');
1831

1932
// Platform specific tasks
2033
var platform = require(path.join(__dirname, 'tasks', process.platform));
2134

22-
gulp.task('dev:configure', function() {
23-
process.env.NODE_ENV = 'development';
24-
});
25-
26-
gulp.task('release:configure', function() {
35+
/**
36+
* # release
37+
*
38+
* `npm run release` calls this to build Scout
39+
* and generate installers for users.
40+
*/
41+
gulp.task('release', function(done) {
2742
process.env.NODE_ENV = 'production';
43+
sequence(
44+
'build',
45+
'electron:build',
46+
'electron:build-installer'
47+
, done);
2848
});
2949

30-
// `npm start` calls this.
31-
gulp.task('dev', ['dev:build-app', 'dev:build-js', 'dev:remove-unpacked-app'], function() {
32-
var child = spawn(path.resolve(platform.ELECTRON), ['build/']);
33-
child.stderr.pipe(process.stderr);
34-
child.stdout.pipe(process.stdout);
35-
child.on('exit', function(code) {
36-
process.exit(code);
37-
});
38-
return gulp.start('dev:watch');
39-
});
40-
41-
gulp.task('dev:build-app', ['dev:configure', 'dev:build-electron'], function() {
42-
return gulp.start('pages', 'less', 'copy:fonts', 'copy:images', 'copy:electron');
43-
});
44-
45-
gulp.task('dev:remove-unpacked-app', ['dev:build-electron'], function() {
46-
// deletes the `app` folder in electron build
47-
// so `platform:start` can just point the electron renderer at `BUILD`
48-
// and we don't have to do all kinds of crazy copying.
49-
return del(platform.BUILD);
50-
});
51-
gulp.task('dev:build-electron', platform.build);
52-
53-
// `npm run release` calls this.
54-
gulp.task('release', ['release:build-app'], function() {
55-
return gulp.start('release:electron:build-installer');
50+
/**
51+
* # build
52+
*/
53+
gulp.task('build', function(done) {
54+
sequence(
55+
[
56+
'build:pages',
57+
'build:less',
58+
'copy:fonts',
59+
'copy:images',
60+
'copy:text',
61+
'copy:js',
62+
'copy:package.json'
63+
],
64+
'npm:install',
65+
'build:js'
66+
, done);
5667
});
5768

58-
gulp.task('release:build-app', [
59-
'js',
60-
'pages',
61-
'less',
62-
'copy:fonts',
63-
'copy:images',
64-
'copy:electron'
65-
]);
66-
67-
gulp.task('release:electron:build-installer', ['release:build-app'], platform.installer);
68-
69-
var bundler = browserify(pkg.browserify).transform('jadeify');
70-
gulp.task('js', ['release:npm-install'], function() {
71-
return bundler.bundle()
72-
.on('error', notify('js'))
73-
.pipe(source('index.js'))
74-
.pipe(buffer())
75-
.pipe(sourcemaps.init({
76-
loadMaps: true
77-
}))
78-
.pipe(sourcemaps.write('./'))
79-
.pipe(gulp.dest('build/'));
69+
/**
70+
* # dev
71+
*
72+
* `npm start` calls this which you call at least once a day
73+
* so if there is something bugging you, post a message in flowdock!
74+
*/
75+
gulp.task('dev', function(done) {
76+
process.env.NODE_ENV = 'development';
77+
sequence(
78+
'build',
79+
'electron:build',
80+
'electron:start',
81+
'watch'
82+
, done);
8083
});
8184

82-
gulp.task('dev:watch', function() {
83-
gulp.watch(['src/{*,**/*}.less', 'styles/*.less'], ['less']);
84-
gulp.watch(['src/*.jade'], ['pages']);
85+
/**
86+
* # watch
87+
*
88+
* Once you build the app and start it up, the next thing you'll want to do
89+
* is actually change things. `watch` handles applying the correct
90+
* tasks to your change so you can actually view the results.
91+
*/
92+
gulp.task('watch', function() {
93+
gulp.watch(['src/{*,**/*}.less', 'styles/*.less'], ['build:less']);
94+
gulp.watch(['src/*.jade'], ['build:pages']);
8595
gulp.watch('images/{*,**/*}', ['copy:images']);
8696
gulp.watch('fonts/*', ['copy:fonts']);
87-
gulp.watch(['main.js', 'src/electron/*', 'settings.json'], ['copy:electron']);
88-
gulp.watch('package.json', ['copy:electron', 'dev:npm-install']);
97+
gulp.watch(['src/electron/*'], ['copy:js']);
98+
gulp.watch('package.json', function() {
99+
gutil.log('package.json changed!');
100+
sequence('copy:package.json', 'npm:install');
101+
});
89102
});
90103

91104
/**
92-
* Gulp's [fast browserify builds recipe](http://git.io/iiCk-A)
105+
* Use browserify to compile the UI js.
93106
*/
94-
gulp.task('dev:build-js', [
95-
'dev:build-app',
96-
'dev:npm-install'], function() {
107+
gulp.task('build:js', function() {
108+
var bundler = browserify(pkg.browserify).transform('jadeify');
109+
if (process.env.NODE_ENV === 'production') {
110+
return bundler.bundle()
111+
.on('error', notify('js'))
112+
.pipe(source('index.js'))
113+
.pipe(buffer())
114+
.pipe(sourcemaps.init({
115+
loadMaps: true
116+
}))
117+
.pipe(sourcemaps.write('./'))
118+
.pipe(gulp.dest('build/'));
119+
}
120+
// @see [fast browserify builds recipe](http://git.io/iiCk-A)
97121
var b;
98122
function rebundle(files) {
99123
if (files) {
@@ -112,8 +136,10 @@ gulp.task('dev:build-js', [
112136
return rebundle();
113137
});
114138

115-
// Compile LESS to CSS.
116-
gulp.task('less', function() {
139+
/**
140+
* Compile LESS to CSS.
141+
*/
142+
gulp.task('build:less', function() {
117143
return gulp.src('src/*.less')
118144
.pipe(sourcemaps.init())
119145
.pipe(less(pkg.less))
@@ -122,8 +148,13 @@ gulp.task('less', function() {
122148
.pipe(gulp.dest('build/'));
123149
});
124150

125-
// Compile jade templates to HTML files.
126-
gulp.task('pages', function() {
151+
/**
152+
* Compile jade templates to static HTML files.
153+
* require('*.jade') statements you see in `src`
154+
* are compiled via the `jadeify` browserify transform.
155+
* @see build:js
156+
*/
157+
gulp.task('build:pages', function() {
127158
return gulp.src('src/index.jade')
128159
.pipe(jade({
129160
locals: {
@@ -134,7 +165,32 @@ gulp.task('pages', function() {
134165
.pipe(gulp.dest('build/'));
135166
});
136167

137-
// Things that should be copied into `build/`.
168+
/**
169+
* ## electron
170+
*/
171+
gulp.task('electron:start', function() {
172+
var child = spawn(path.resolve(platform.ELECTRON), ['build/']);
173+
child.stderr.pipe(process.stderr);
174+
child.stdout.pipe(process.stdout);
175+
child.on('exit', function(code) {
176+
process.exit(code);
177+
});
178+
});
179+
180+
gulp.task('electron:build', function(done) {
181+
platform.build(function(err) {
182+
if (err) {
183+
return done(err);
184+
}
185+
done();
186+
});
187+
});
188+
189+
gulp.task('electron:build-installer', platform.installer);
190+
191+
/**
192+
* ## Things that should be copied into `build/`.
193+
*/
138194
gulp.task('copy:fonts', function() {
139195
return gulp.src(pkg.fonts)
140196
.pipe(gulp.dest('build/fonts'));
@@ -145,20 +201,27 @@ gulp.task('copy:images', function() {
145201
.pipe(gulp.dest('build/images'));
146202
});
147203

148-
gulp.task('copy:electron', function() {
204+
gulp.task('copy:package.json', function() {
205+
return gulp.src('package.json')
206+
.pipe(gulp.dest('build/'));
207+
});
208+
209+
gulp.task('copy:text', function() {
210+
return gulp.src(['README.md'])
211+
.pipe(gulp.dest('build/'));
212+
});
213+
214+
// Copy non-UI js into the build.
215+
gulp.task('copy:js', function() {
149216
return merge(
150-
gulp.src(['main.js', 'package.json', 'settings.json', 'README.md'])
217+
gulp.src(['main.js'])
151218
.pipe(gulp.dest('build/')),
152219
gulp.src(['src/electron/*'])
153220
.pipe(gulp.dest('build/src/electron'))
154221
);
155222
});
156223

157-
gulp.task('dev:npm-install', ['copy:electron'], shell.task('npm install', {
158-
cwd: 'build/'
159-
}));
160-
161-
gulp.task('release:npm-install', ['copy:electron'], shell.task('npm install --production', {
224+
gulp.task('npm:install', shell.task('npm install --production --quiet --loglevel error', {
162225
cwd: 'build/'
163226
}));
164227

main.js

Lines changed: 0 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,4 @@
11
/**
22
* The main entrpoint Electron will execute.
33
*/
4-
if (process.env.NODE_ENV === 'development') {
5-
process.env.DEBUG = 'mon*,sco*';
6-
}
7-
8-
// @todo (imlucas): Use subprocess instead?
9-
require('scout-server').start();
10-
114
require('./src/electron');

package.json

Lines changed: 17 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,9 @@
11
{
2-
"name": "scout",
2+
"name": "mongodb-scout",
33
"description": "The MongoDB GUI.",
44
"version": "0.3.0",
55
"main": "main.js",
6-
"electron_version": "0.30.5",
6+
"electron_version": "0.30.6",
77
"product_name": "MongoDB Scout",
88
"authors": "MongoDB Inc.",
99
"check": {
@@ -27,7 +27,12 @@
2727
"browser-window",
2828
"menu",
2929
"jade",
30-
"ampersand-state"
30+
"ampersand-state",
31+
"scout-server",
32+
"tiny-lr",
33+
"watch",
34+
"glob",
35+
"electron-squirrel-startup"
3136
]
3237
},
3338
"fonts": [
@@ -62,6 +67,11 @@
6267
"url": "git://github.com/10gen/scout.git"
6368
},
6469
"dependencies": {
70+
"debug": "^2.2.0",
71+
"scout-server": "http://bin.mongodb.org/js/scout-server/v0.0.4/scout-server-0.0.4.tar.gz",
72+
"electron-squirrel-startup": "^0.1.2"
73+
},
74+
"devDependencies": {
6575
"ampersand-app": "^1.0.4",
6676
"ampersand-collection": "^1.4.5",
6777
"ampersand-collection-filterable": "^0.2.1",
@@ -75,10 +85,10 @@
7585
"bootstrap": "https://github.com/twbs/bootstrap/archive/v3.3.5.tar.gz",
7686
"bugsnag-js": "^2.4.8",
7787
"d3": "^3.5.5",
78-
"debug": "^2.2.0",
7988
"domready": "^1.0.8",
8089
"event-stream": "^3.3.1",
8190
"font-awesome": "https://github.com/FortAwesome/Font-Awesome/archive/v4.3.0.tar.gz",
91+
"glob": "^5.0.14",
8292
"jade": "^1.11.0",
8393
"jquery": "^2.1.4",
8494
"local-links": "^1.4.0",
@@ -96,15 +106,12 @@
96106
"raf": "^3.0.0",
97107
"scout-brain": "http://bin.mongodb.org/js/scout-brain/v0.0.2/scout-brain-0.0.2.tar.gz",
98108
"scout-client": "http://bin.mongodb.org/js/scout-client/v0.0.5/scout-client-0.0.5.tar.gz",
99-
"scout-server": "http://bin.mongodb.org/js/scout-server/v0.0.4/scout-server-0.0.4.tar.gz",
100109
"tiny-lr": "^0.1.6",
101-
"watch": "^0.16.0"
102-
},
103-
"devDependencies": {
110+
"watch": "^0.16.0",
104111
"browserify": "^10.2.4",
105112
"del": "^1.2.0",
106113
"electron-installer-dmg": "^0.1.0",
107-
"electron-installer-squirrel-windows": "0.0.1",
114+
"electron-installer-squirrel-windows": "^0.4.0",
108115
"electron-packager": "^5.0.0",
109116
"eslint": "^0.24.1",
110117
"eslint-config-mongodb-js": "^0.1.4",
@@ -123,6 +130,7 @@
123130
"node-notifier": "^4.2.3",
124131
"phantomjs": "^1.9.17",
125132
"pre-commit": "^1.0.10",
133+
"run-sequence": "^1.1.2",
126134
"run-series": "^1.1.2",
127135
"stream-combiner2": "^1.0.2",
128136
"vinyl-buffer": "^1.0.0",

0 commit comments

Comments
 (0)