Move react-source gem out of project root
Now it requires a build step. At least the confusing lib directory is gone though.
Paul O’Shannessy committed
Jul 21, 2014 at 20:41 UTC
520c4f96d4703d13ec97e5a2e9ee69f312d075a6
5 files changed
+73
-12
Gruntfile.js
+6
-9
@@ -12,6 +12,7 @@ var releaseTasks = require('./grunt/tasks/release');
12
var npmReactTasks = require('./grunt/tasks/npm-react');
13
var npmReactToolsTasks = require('./grunt/tasks/npm-react-tools');
14
var versionCheckTask = require('./grunt/tasks/version-check');
15
+var gemReactSourceTasks = require('./grunt/tasks/gem-react-source');
16
17
module.exports = function(grunt) {
18
@@ -68,6 +69,8 @@ module.exports = function(grunt) {
69
grunt.registerTask('npm-react:pack', npmReactTasks.packRelease);
70
grunt.registerTask('npm-react-tools:release', npmReactToolsTasks.buildRelease);
71
grunt.registerTask('npm-react-tools:pack', npmReactToolsTasks.packRelease);
72
+ grunt.registerTask('gem-react-source:release', gemReactSourceTasks.buildRelease);
73
+ grunt.registerTask('gem-react-source:pack', gemReactSourceTasks.packRelease);
74
75
grunt.registerTask('version-check', versionCheckTask);
76
@@ -96,6 +99,7 @@ module.exports = function(grunt) {
99
'populist:test'
100
]);
101
grunt.registerTask('build:npm-react', ['version-check', 'jsx:normal', 'npm-react:release']);
102
+ grunt.registerTask('build:gem-react-source', ['build', 'gem-react-source:release'])
103
104
grunt.registerTask('webdriver-phantomjs', webdriverPhantomJSTask);
105
@@ -238,7 +242,8 @@ module.exports = function(grunt) {
242
'release:setup',
243
'clean',
244
'build',
241
- 'gem:only',
245
+ 'gem-react-source:release',
246
+ 'gem-react-source:pack',
247
'release:bower',
248
'release:starter',
249
'compress',
@@ -246,14 +251,6 @@ module.exports = function(grunt) {
251
'release:msg'
252
]);
253
249
- // `gem` task to build the react-source gem
250
- grunt.registerTask('gem', ['build', 'gem:only']);
251
-
252
- grunt.registerTask('gem:only', function() {
253
- var done = this.async();
254
- exec('gem build react-source.gemspec', done);
255
- });
256
-
254
// The default task - build - to keep setup easy
255
grunt.registerTask('default', ['build']);
256
};
gem-react-source/lib/react/source.rb
renamed
gem-react-source/react-source.gemspec
renamed
+4
-1
@@ -1,7 +1,10 @@
1
#encoding: utf-8
2
3
require('json')
4
-package = JSON.parse(File.read('package.json'))
4
+
5
+# Because of build process, does not necessarily reflect directory path in the
6
+# repository.
7
+package = JSON.parse(File.read('../../package.json'))
8
9
gemspec = Gem::Specification.new do |s|
10
s.name = 'react-source'
grunt/tasks/gem-react-source.js
new
+61
@@ -0,0 +1,61 @@
1
+'use strict';
2
+
3
+var fs = require('fs');
4
+var grunt = require('grunt');
5
+
6
+var src = 'gem-react-source/';
7
+var dest = 'build/gem-react-source/';
8
+var build = dest + 'build/';
9
+var buildFiles = [
10
+ 'react.js', 'react.min.js', 'JSXTransformer.js',
11
+ 'react-with-addons.js', 'react-with-addons.min.js'
12
+];
13
+
14
+function buildRelease() {
15
+ grunt.file.exists(dest) && grunt.file.delete(dest);
16
+
17
+ // Copy gem-react-source/**/* to build/gem-react-source
18
+ var mappings = [].concat(
19
+ grunt.file.expandMapping('**/*', dest, {cwd: src})
20
+ );
21
+ mappings.forEach(function(mapping) {
22
+ var src = mapping.src[0];
23
+ var dest = mapping.dest;
24
+ if (grunt.file.isDir(src)) {
25
+ grunt.file.mkdir(dest);
26
+ } else {
27
+ grunt.file.copy(src, dest);
28
+ }
29
+ });
30
+
31
+ // Make built source available inside npm package
32
+ grunt.file.mkdir(build);
33
+ buildFiles.forEach(function(file) {
34
+ grunt.file.copy('build/' + file, build + file);
35
+ });
36
+}
37
+
38
+function packRelease() {
39
+ /*jshint validthis:true */
40
+ var done = this.async();
41
+ var spawnCmd = {
42
+ cmd: 'gem',
43
+ args: ['build', 'react-source.gemspec'],
44
+ opts: {
45
+ cwd: dest
46
+ }
47
+ };
48
+ grunt.util.spawn(spawnCmd, function(err, result) {
49
+ // Gem packing does weird things to versions so 0.12.0-alpha becomes
50
+ // 0.12.0.pre.alpha. We need to get the filename printed to stdout.
51
+ var filename = result.stdout.match(/File: (.*)$/)[1];
52
+ var src = 'build/gem-react-source/' + filename;
53
+ var dest = 'build/react-source.tgz';
54
+ fs.rename(src, dest, done);
55
+ });
56
+}
57
+
58
+module.exports = {
59
+ buildRelease: buildRelease,
60
+ packRelease: packRelease
61
+};
grunt/tasks/npm-react-tools.js
+2
-2
@@ -20,9 +20,9 @@ function buildRelease() {
20
21
pkgFiles.map(function(file) {
22
if (grunt.file.isDir(file)) {
23
- mappings = mappings.concat(grunt.file.expandMapping(file + '**/*', dest))
23
+ mappings = mappings.concat(grunt.file.expandMapping(file + '**/*', dest));
24
} else {
25
- mappings.push({src: [file], dest: dest + file})
25
+ mappings.push({src: [file], dest: dest + file});
26
}
27
});
28