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
This commit is contained in:
Marshall Bowers
2016-07-05 16:30:09 -04:00
committed by Paul O’Shannessy
parent 2b226f5fa6
commit 69703e04d5
9 changed files with 182 additions and 84 deletions

View File

@@ -52,11 +52,17 @@ module.exports = function(grunt) {
grunt.loadNpmTasks(npmTaskName);
});
grunt.registerTask('eslint', require('./grunt/tasks/eslint'));
grunt.registerTask('eslint', function() {
// Use gulp here.
spawnGulp(['eslint'], null, this.async());
});
grunt.registerTask('lint', ['eslint']);
grunt.registerTask('flow', require('./grunt/tasks/flow'));
grunt.registerTask('flow', function() {
// Use gulp here.
spawnGulp(['flow'], null, this.async());
});
grunt.registerTask('delete-build-modules', function() {
// Use gulp here.
@@ -84,7 +90,10 @@ module.exports = function(grunt) {
grunt.registerTask('npm-react-addons:release', npmReactAddonsTasks.buildReleases);
grunt.registerTask('npm-react-addons:pack', npmReactAddonsTasks.packReleases);
grunt.registerTask('version-check', require('./grunt/tasks/version-check'));
grunt.registerTask('version-check', function() {
// Use gulp here.
spawnGulp(['version-check'], null, this.async());
});
grunt.registerTask('build:basic', [
'build-modules',

View File

@@ -1,22 +0,0 @@
'use strict';
var grunt = require('grunt');
var extension = process.platform === 'win32' ? '.cmd': '';
module.exports = function() {
var done = this.async();
grunt.util.spawn({
cmd: 'node_modules/.bin/eslint' + extension,
args: ['.'],
opts: {stdio: 'inherit'}, // allows colors to passthrough
}, function(err, result, code) {
if (err) {
grunt.log.error('Lint failed');
} else {
grunt.log.ok('Lint passed');
}
done(code === 0);
});
};

View File

@@ -1,22 +0,0 @@
'use strict';
var grunt = require('grunt');
var extension = process.platform === 'win32' ? '.cmd': '';
module.exports = function() {
var done = this.async();
grunt.util.spawn({
cmd: 'node_modules/.bin/flow' + extension,
args: ['check', '.'],
opts: {stdio: 'inherit'},
}, function(err, result, code) {
if (err) {
grunt.log.error('Flow failed');
} else {
grunt.log.ok('Flow passed');
}
done(code === 0);
});
};

View File

@@ -1,37 +0,0 @@
'use strict';
var grunt = require('grunt');
module.exports = function() {
var pkgVersion = grunt.config.data.pkg.version;
var addonsData = grunt.file.readJSON('./packages/react-addons/package.json');
var versions = {
'packages/react/package.json':
grunt.file.readJSON('./packages/react/package.json').version,
'packages/react-dom/package.json':
grunt.file.readJSON('./packages/react-dom/package.json').version,
'packages/react-native-renderer/package.json':
grunt.file.readJSON('./packages/react-native-renderer/package.json').version,
'packages/react-addons/package.json (version)': addonsData.version,
// Get the "version" without the range bit
'packages/react-addons/package.json (react dependency)': addonsData.peerDependencies.react.slice(1),
'src/ReactVersion.js': require('../../src/ReactVersion'),
};
// Return true (ok) or false (failed)
return Object.keys(versions).reduce(function(prev, name) {
var version = versions[name];
var ok = true;
if (version !== pkgVersion) {
grunt.log.error(
'%s version does not match package.json. Expected %s, saw %s.',
name,
pkgVersion,
version
);
ok = false;
}
return prev && ok;
}, true);
};

49
gulp/tasks/eslint.js Normal file
View File

@@ -0,0 +1,49 @@
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';
var path = require('path');
var spawn = require('child_process').spawn;
var extension = process.platform === 'win32' ? '.cmd' : '';
module.exports = function(gulp, plugins) {
var gutil = plugins.util;
return function(done) {
spawn(
process.execPath,
[
path.join('node_modules', '.bin', 'eslint' + extension),
'.',
],
{
// Allow colors to pass through
stdio: 'inherit',
}
).on('close', function(code) {
if (code !== 0) {
gutil.log(
gutil.colors.red(
'Lint failed'
)
);
process.exit(code);
}
gutil.log(
gutil.colors.green(
'Lint passed'
)
);
done();
});
};
};

50
gulp/tasks/flow.js Normal file
View File

@@ -0,0 +1,50 @@
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';
var path = require('path');
var spawn = require('child_process').spawn;
var extension = process.platform === 'win32' ? '.cmd' : '';
module.exports = function(gulp, plugins) {
var gutil = plugins.util;
return function(done) {
spawn(
process.execPath,
[
path.join('node_modules', '.bin', 'flow' + extension),
'check',
'.',
],
{
// Allow colors to pass through
stdio: 'inherit',
}
).on('close', function(code) {
if (code !== 0) {
gutil.log(
gutil.colors.red(
'Flow failed'
)
);
process.exit(code);
}
gutil.log(
gutil.colors.green(
'Flow passed'
)
);
done();
});
};
};

View File

@@ -0,0 +1,55 @@
/**
* Copyright 2013-present, Facebook, Inc.
* All rights reserved.
*
* This source code is licensed under the BSD-style license found in the
* LICENSE file in the root directory of this source tree. An additional grant
* of patent rights can be found in the PATENTS file in the same directory.
*/
'use strict';
module.exports = function(gulp, plugins) {
var gutil = plugins.util;
return function(done) {
var reactVersion = require('../../package.json').version;
var addonsData = require('../../packages/react-addons/package.json');
var versions = {
'packages/react/package.json':
require('../../packages/react/package.json').version,
'packages/react-dom/package.json':
require('../../packages/react-dom/package.json').version,
'packages/react-native-renderer/package.json':
require('../../packages/react-native-renderer/package.json').version,
'packages/react-addons/package.json (version)': addonsData.version,
'packages/react-addons/package.json (react dependency)':
// Get the "version" without the range bit
addonsData.peerDependencies.react.slice(1),
'src/ReactVersion.js': require('../../src/ReactVersion'),
};
var allVersionsMatch = true;
Object.keys(versions).forEach(function(name) {
var version = versions[name];
if (version !== reactVersion) {
allVersionsMatch = false;
gutil.log(
gutil.colors.red(
'%s version does not match package.json. Expected %s, saw %s.'
),
name,
reactVersion,
version
);
}
});
if (!allVersionsMatch) {
process.exit(1);
}
done();
};
};

View File

@@ -18,6 +18,13 @@ var babelPluginModules = require('fbjs-scripts/babel-6/rewrite-modules');
var extractErrors = require('./scripts/error-codes/gulp-extract-errors');
var devExpressionWithCodes = require('./scripts/error-codes/dev-expression-with-codes');
// Load all of the Gulp plugins.
var plugins = require('gulp-load-plugins')();
function getTask(name) {
return require(`./gulp/tasks/${name}`)(gulp, plugins);
}
var paths = {
react: {
src: [
@@ -59,6 +66,14 @@ var babelOpts = {
],
};
gulp.task('eslint', getTask('eslint'));
gulp.task('lint', ['eslint']);
gulp.task('flow', getTask('flow'));
gulp.task('version-check', getTask('version-check'));
gulp.task('react:clean', function() {
return del([paths.react.lib]);
});

View File

@@ -53,6 +53,7 @@
"gulp": "^3.9.0",
"gulp-babel": "^6.0.0",
"gulp-flatten": "^0.2.0",
"gulp-load-plugins": "^1.2.4",
"gulp-util": "^3.0.7",
"gzip-js": "~0.3.2",
"jest": "^12.1.1",