Gulp: lint, flow, and version-check (#7174)
* Add plugin loading for gulp * Convert `lint` task to gulp * Convert `flow` task to gulp * Convert `version-check` task to gulp * Add missing semicolons
Marshall Bowers committed
Jul 5, 2016 at 16:30 UTC
69703e04d559ff7089938bbdfd0d0ccf9b92d992
9 files changed
+182
-84
Gruntfile.js
+12
-3
@@ -52,11 +52,17 @@ module.exports = function(grunt) {
52
grunt.loadNpmTasks(npmTaskName);
53
});
54
55
- grunt.registerTask('eslint', require('./grunt/tasks/eslint'));
55
+ grunt.registerTask('eslint', function() {
56
+ // Use gulp here.
57
+ spawnGulp(['eslint'], null, this.async());
58
+ });
59
60
grunt.registerTask('lint', ['eslint']);
61
59
- grunt.registerTask('flow', require('./grunt/tasks/flow'));
62
+ grunt.registerTask('flow', function() {
63
+ // Use gulp here.
64
+ spawnGulp(['flow'], null, this.async());
65
+ });
66
67
grunt.registerTask('delete-build-modules', function() {
68
// Use gulp here.
@@ -84,7 +90,10 @@ module.exports = function(grunt) {
90
grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases);
91
grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases);
92
87
- grunt.registerTask('version-check', require('./grunt/tasks/version-check'));
93
+ grunt.registerTask('version-check', function() {
94
+ // Use gulp here.
95
+ spawnGulp(['version-check'], null, this.async());
96
+ });
97
98
grunt.registerTask('build:basic', [
99
'build-modules',
grunt/tasks/eslint.js
deleted
-22
@@ -1,22 +0,0 @@
1
-'use strict';
2
-
3
-var grunt = require('grunt');
4
-
5
-var extension = process.platform === 'win32' ? '.cmd': '';
6
-
7
-module.exports = function() {
8
- var done = this.async();
9
- grunt.util.spawn({
10
- cmd: 'node_modules/.bin/eslint' + extension,
11
- args: ['.'],
12
- opts: {stdio: 'inherit'}, // allows colors to passthrough
13
- }, function(err, result, code) {
14
- if (err) {
15
- grunt.log.error('Lint failed');
16
- } else {
17
- grunt.log.ok('Lint passed');
18
- }
19
-
20
- done(code === 0);
21
- });
22
-};
grunt/tasks/flow.js
deleted
-22
@@ -1,22 +0,0 @@
1
-'use strict';
2
-
3
-var grunt = require('grunt');
4
-
5
-var extension = process.platform === 'win32' ? '.cmd': '';
6
-
7
-module.exports = function() {
8
- var done = this.async();
9
- grunt.util.spawn({
10
- cmd: 'node_modules/.bin/flow' + extension,
11
- args: ['check', '.'],
12
- opts: {stdio: 'inherit'},
13
- }, function(err, result, code) {
14
- if (err) {
15
- grunt.log.error('Flow failed');
16
- } else {
17
- grunt.log.ok('Flow passed');
18
- }
19
-
20
- done(code === 0);
21
- });
22
-};
grunt/tasks/version-check.js
deleted
-37
@@ -1,37 +0,0 @@
1
-'use strict';
2
-
3
-var grunt = require('grunt');
4
-
5
-module.exports = function() {
6
- var pkgVersion = grunt.config.data.pkg.version;
7
-
8
- var addonsData = grunt.file.readJSON('./packages/react-addons/package.json');
9
- var versions = {
10
- 'packages/react/package.json':
11
- grunt.file.readJSON('./packages/react/package.json').version,
12
- 'packages/react-dom/package.json':
13
- grunt.file.readJSON('./packages/react-dom/package.json').version,
14
- 'packages/react-native-renderer/package.json':
15
- grunt.file.readJSON('./packages/react-native-renderer/package.json').version,
16
- 'packages/react-addons/package.json (version)': addonsData.version,
17
- // Get the "version" without the range bit
18
- 'packages/react-addons/package.json (react dependency)': addonsData.peerDependencies.react.slice(1),
19
- 'src/ReactVersion.js': require('../../src/ReactVersion'),
20
- };
21
-
22
- // Return true (ok) or false (failed)
23
- return Object.keys(versions).reduce(function(prev, name) {
24
- var version = versions[name];
25
- var ok = true;
26
- if (version !== pkgVersion) {
27
- grunt.log.error(
28
- '%s version does not match package.json. Expected %s, saw %s.',
29
- name,
30
- pkgVersion,
31
- version
32
- );
33
- ok = false;
34
- }
35
- return prev && ok;
36
- }, true);
37
-};
gulp/tasks/eslint.js
new
+49
@@ -0,0 +1,49 @@
1
+/**
2
+ * Copyright 2013-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+'use strict';
11
+
12
+var path = require('path');
13
+var spawn = require('child_process').spawn;
14
+
15
+var extension = process.platform === 'win32' ? '.cmd' : '';
16
+
17
+module.exports = function(gulp, plugins) {
18
+ var gutil = plugins.util;
19
+
20
+ return function(done) {
21
+ spawn(
22
+ process.execPath,
23
+ [
24
+ path.join('node_modules', '.bin', 'eslint' + extension),
25
+ '.',
26
+ ],
27
+ {
28
+ // Allow colors to pass through
29
+ stdio: 'inherit',
30
+ }
31
+ ).on('close', function(code) {
32
+ if (code !== 0) {
33
+ gutil.log(
34
+ gutil.colors.red(
35
+ 'Lint failed'
36
+ )
37
+ );
38
+ process.exit(code);
39
+ }
40
+
41
+ gutil.log(
42
+ gutil.colors.green(
43
+ 'Lint passed'
44
+ )
45
+ );
46
+ done();
47
+ });
48
+ };
49
+};
gulp/tasks/flow.js
new
+50
@@ -0,0 +1,50 @@
1
+/**
2
+ * Copyright 2013-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+'use strict';
11
+
12
+var path = require('path');
13
+var spawn = require('child_process').spawn;
14
+
15
+var extension = process.platform === 'win32' ? '.cmd' : '';
16
+
17
+module.exports = function(gulp, plugins) {
18
+ var gutil = plugins.util;
19
+
20
+ return function(done) {
21
+ spawn(
22
+ process.execPath,
23
+ [
24
+ path.join('node_modules', '.bin', 'flow' + extension),
25
+ 'check',
26
+ '.',
27
+ ],
28
+ {
29
+ // Allow colors to pass through
30
+ stdio: 'inherit',
31
+ }
32
+ ).on('close', function(code) {
33
+ if (code !== 0) {
34
+ gutil.log(
35
+ gutil.colors.red(
36
+ 'Flow failed'
37
+ )
38
+ );
39
+ process.exit(code);
40
+ }
41
+
42
+ gutil.log(
43
+ gutil.colors.green(
44
+ 'Flow passed'
45
+ )
46
+ );
47
+ done();
48
+ });
49
+ };
50
+};
gulp/tasks/version-check.js
new
+55
@@ -0,0 +1,55 @@
1
+/**
2
+ * Copyright 2013-present, Facebook, Inc.
3
+ * All rights reserved.
4
+ *
5
+ * This source code is licensed under the BSD-style license found in the
6
+ * LICENSE file in the root directory of this source tree. An additional grant
7
+ * of patent rights can be found in the PATENTS file in the same directory.
8
+ */
9
+
10
+'use strict';
11
+
12
+module.exports = function(gulp, plugins) {
13
+ var gutil = plugins.util;
14
+
15
+ return function(done) {
16
+ var reactVersion = require('../../package.json').version;
17
+
18
+ var addonsData = require('../../packages/react-addons/package.json');
19
+ var versions = {
20
+ 'packages/react/package.json':
21
+ require('../../packages/react/package.json').version,
22
+ 'packages/react-dom/package.json':
23
+ require('../../packages/react-dom/package.json').version,
24
+ 'packages/react-native-renderer/package.json':
25
+ require('../../packages/react-native-renderer/package.json').version,
26
+ 'packages/react-addons/package.json (version)': addonsData.version,
27
+ 'packages/react-addons/package.json (react dependency)':
28
+ // Get the "version" without the range bit
29
+ addonsData.peerDependencies.react.slice(1),
30
+ 'src/ReactVersion.js': require('../../src/ReactVersion'),
31
+ };
32
+
33
+ var allVersionsMatch = true;
34
+ Object.keys(versions).forEach(function(name) {
35
+ var version = versions[name];
36
+ if (version !== reactVersion) {
37
+ allVersionsMatch = false;
38
+ gutil.log(
39
+ gutil.colors.red(
40
+ '%s version does not match package.json. Expected %s, saw %s.'
41
+ ),
42
+ name,
43
+ reactVersion,
44
+ version
45
+ );
46
+ }
47
+ });
48
+
49
+ if (!allVersionsMatch) {
50
+ process.exit(1);
51
+ }
52
+
53
+ done();
54
+ };
55
+};
gulpfile.js
+15
@@ -18,6 +18,13 @@ var babelPluginModules = require('fbjs-scripts/babel-6/rewrite-modules');
18
var extractErrors = require('./scripts/error-codes/gulp-extract-errors');
19
var devExpressionWithCodes = require('./scripts/error-codes/dev-expression-with-codes');
20
21
+// Load all of the Gulp plugins.
22
+var plugins = require('gulp-load-plugins')();
23
+
24
+function getTask(name) {
25
+ return require(`./gulp/tasks/${name}`)(gulp, plugins);
26
+}
27
+
28
var paths = {
29
react: {
30
src: [
@@ -59,6 +66,14 @@ var babelOpts = {
66
],
67
};
68
69
+gulp.task('eslint', getTask('eslint'));
70
+
71
+gulp.task('lint', ['eslint']);
72
+
73
+gulp.task('flow', getTask('flow'));
74
+
75
+gulp.task('version-check', getTask('version-check'));
76
+
77
gulp.task('react:clean', function() {
78
return del([paths.react.lib]);
79
});
package.json
+1
@@ -53,6 +53,7 @@
53
"gulp": "^3.9.0",
54
"gulp-babel": "^6.0.0",
55
"gulp-flatten": "^0.2.0",
56
+ "gulp-load-plugins": "^1.2.4",
57
"gulp-util": "^3.0.7",
58
"gzip-js": "~0.3.2",
59
"jest": "^12.1.1",