Skip to content

Commit 20472b9

Browse files
committed
[fixed] Windows build
1 parent 2a578d4 commit 20472b9

File tree

8 files changed

+108
-19
lines changed

8 files changed

+108
-19
lines changed

README.md

+5-1
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,8 @@
22

33
[Bootstrap 3][bootstrap] components built with [React][react]
44

5-
[![Build Status][build-badge]][build]
5+
[![Travis Build Status][build-badge]][build]
6+
[![AppVeyor Build Status][appveyor-badge]][appveyor]
67
[![NPM version][npm-badge]][npm]
78
[![Bower version][bower-badge]][bower]
89
[![HuBoard][huboard-badge]][huboard]
@@ -74,3 +75,6 @@ Yes please! See the [contributing guidelines][contributing] for details.
7475

7576
[huboard-badge]: https://img.shields.io/badge/Hu-Board-7965cc.svg
7677
[huboard]: https://huboard.com/react-bootstrap/react-bootstrap
78+
79+
[appveyor-badge]: https://ci.appveyor.com/api/projects/status/ylitpyo6n5yq1s6i/branch/master?svg=true
80+
[appveyor]: https://ci.appveyor.com/project/mtscout6/react-bootstrap/branch/master

appveyor.yml.tmp

+28
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
version: '{build}'
2+
3+
# Test against this version of Node.js
4+
environment:
5+
matrix:
6+
# node.js
7+
- nodejs_version: "0.10"
8+
- nodejs_version: "0.12"
9+
# io.js
10+
- nodejs_version: "1.0"
11+
12+
# Install scripts. (runs after repo cloning)
13+
install:
14+
# Get the latest stable version of Node.js or io.js
15+
- ps: Install-Product node $env:nodejs_version
16+
# install modules
17+
- npm -g install npm@latest
18+
- set PATH=%APPDATA%\npm;%PATH%
19+
- npm --version
20+
- npm install
21+
22+
# Post-install test scripts.
23+
test_script:
24+
# Output useful info for debugging.
25+
- node --version
26+
- npm --version
27+
# run tests
28+
- npm test

docs/build.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@ import Router from 'react-router';
44
import routes from './src/Routes';
55
import Root from './src/Root';
66
import fsp from 'fs-promise';
7+
import { copy } from '../tools/fs-utils';
78
import { exec, spawn } from 'child-process-promise';
89

910
const repoRoot = path.resolve(__dirname, '../');
@@ -16,7 +17,7 @@ const readmeDest = path.join(docsBuilt, 'README.md');
1617
export default function BuildDocs() {
1718
console.log('Building: '.cyan + 'docs'.green);
1819

19-
return exec(`rm -rf ${docsBuilt}`)
20+
return exec(`rimraf ${docsBuilt}`)
2021
.then(() => fsp.mkdir(docsBuilt))
2122
.then(() => {
2223
let writes = Root
@@ -31,8 +32,8 @@ export default function BuildDocs() {
3132

3233
return Promise.all(writes.concat([
3334
exec(`webpack --config webpack.docs.js -p --bail`),
34-
exec(`cp ${license} ${docsBuilt}`),
35-
exec(`cp ${readmeSrc} ${readmeDest}`)
35+
copy(license, docsBuilt),
36+
copy(readmeSrc, readmeDest)
3637
]));
3738
})
3839
.then(() => console.log('Built: '.cyan + 'docs'.green));

package.json

+8-6
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,14 @@
88
},
99
"homepage": "http://react-bootstrap.github.io/",
1010
"scripts": {
11-
"build": "./run-babel tools/build.js",
11+
"build": "node run-babel tools/build.js",
1212
"test-watch": "karma start",
1313
"test": "karma start --single-run && npm run lint && npm run build",
1414
"lint": "eslint src test docs ie8 tools webpack karma.conf.js webpack.config.js webpack.docs.js",
15-
"docs-build": "./run-babel tools/build.js --docs-only",
16-
"docs": "./run-babel docs/server.js",
17-
"docs-prod": "webpack --config webpack.docs.js -p --progress && NODE_ENV=production ./run-babel docs/server.js",
18-
"ie8": "./run-babel ie8/server.js"
15+
"docs-build": "node run-babel tools/build.js --docs-only",
16+
"docs": "node run-babel docs/server.js",
17+
"docs-prod": "webpack --config webpack.docs.js -p --progress && NODE_ENV=production node run-babel docs/server.js",
18+
"ie8": "node run-babel ie8/server.js"
1919
},
2020
"main": "lib/index.js",
2121
"directories": {
@@ -51,6 +51,7 @@
5151
"express": "^4.12.3",
5252
"extract-text-webpack-plugin": "^0.3.8",
5353
"file-loader": "^0.8.1",
54+
"fs-extra": "^0.18.0",
5455
"fs-promise": "^0.3.1",
5556
"json-loader": "^0.5.1",
5657
"karma": "~0.12.32",
@@ -71,6 +72,7 @@
7172
"react": "^0.13.1",
7273
"react-router": "^0.13.1",
7374
"rf-changelog": "^0.4.0",
75+
"rimraf": "^2.3.2",
7476
"semver": "^4.3.1",
7577
"sinon": "^1.10.3",
7678
"style-loader": "^0.9.0",
@@ -82,4 +84,4 @@
8284
"dependencies": {
8385
"classnames": "^1.1.4"
8486
}
85-
}
87+
}

tools/amd/build.js

+4-3
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
import _ from 'lodash';
22
import path from 'path';
33
import fsp from 'fs-promise';
4+
import { copy } from '../fs-utils';
45
import { exec, spawn } from 'child-process-promise';
56

67
const repoRoot = path.resolve(__dirname, '../../');
@@ -28,13 +29,13 @@ function bowerConfig() {
2829
export default function BuildBower() {
2930
console.log('Building: '.cyan + 'bower module'.green);
3031

31-
return exec(`rm -rf ${amd}`)
32+
return exec(`rimraf ${amd}`)
3233
.then(() => fsp.mkdir(amd))
3334
.then(() => Promise.all([
3435
bowerConfig(),
3536
exec(`babel --modules amd --optional es7.objectRestSpread ${src} --out-dir ${path.join(amd, 'lib')}`),
36-
exec(`cp ${readme} ${amd}`),
37-
exec(`cp ${license} ${amd}`)
37+
copy(readme, amd),
38+
copy(license, amd)
3839
]))
3940
.then(() => console.log('Built: '.cyan + 'bower module'.green));
4041
}

tools/build.js

+10-1
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,20 @@
11
/* eslint no-process-exit: 0 */
22

33
import from 'colors';
4+
import path from 'path';
45
import bower from './amd/build';
56
import lib from './lib/build';
67
import docs from '../docs/build';
78
import dist from './dist/build';
9+
import { copy } from './fs-utils';
810
import { exec, spawn } from 'child-process-promise';
911

1012
import yargs from 'yargs';
1113

14+
const repoRoot = path.resolve(__dirname, '../');
15+
const distFolder = path.join(repoRoot, 'dist');
16+
const amdFolder = path.join(repoRoot, 'amd');
17+
1218
const argv = yargs
1319
.option('docs-only', {
1420
demand: false,
@@ -26,12 +32,15 @@ export default function Build(noExitOnFailure) {
2632
dist(),
2733
docs()
2834
])
29-
.then(() => exec(`cp -R dist/ amd`));
35+
.then(() => copy(distFolder, amdFolder));
3036

3137
if (!noExitOnFailure) {
3238
result = result
3339
.catch(err => {
3440
console.error(err.toString().red);
41+
if (err.stack) {
42+
console.error(err.stack.red);
43+
}
3544
process.exit(1);
3645
});
3746
}

tools/fs-utils.js

+39
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
import path from 'path';
2+
import fsp from 'fs-promise';
3+
import fse from 'fs-extra';
4+
5+
function copy(src, dest, options) {
6+
options = options || {};
7+
8+
return Promise.all([
9+
fsp.stat(src),
10+
fsp.exists(dest)
11+
.then(exists => {
12+
if (!exists) {
13+
return false;
14+
}
15+
16+
return fsp.stat(dest);
17+
})
18+
])
19+
.then(([srcStat, destStat]) => {
20+
if (srcStat.isFile() && destStat && destStat.isDirectory()) {
21+
let filename = path.basename(src);
22+
dest = path.join(dest, filename);
23+
}
24+
25+
return new Promise((resolve, reject) => {
26+
fse.copy(src, dest, options, err => {
27+
if (err) {
28+
reject(err);
29+
}
30+
31+
resolve();
32+
});
33+
});
34+
});
35+
}
36+
37+
export default {
38+
copy
39+
}

tools/release-scripts/repo-release.js

+10-5
Original file line numberDiff line numberDiff line change
@@ -2,27 +2,32 @@ import from 'colors';
22
import path from 'path';
33
import fsp from 'fs-promise';
44
import { exec, spawn } from 'child-process-promise';
5+
import { copy } from '../fs-utils';
6+
7+
const repoRoot = path.resolve(__dirname, '../../');
8+
9+
const license = path.join(repoRoot, 'LICENSE');
510

611
export default (repo, srcFolder, tmpFolder, version) => {
712
console.log('Releasing: '.cyan + repo.green);
813

9-
return exec(`rm -rf ${tmpFolder}`)
14+
return exec(`rimraf ${tmpFolder}`)
1015
.then(() => exec(`git clone ${repo} ${tmpFolder}`))
1116
.then(() => fsp.readdir(tmpFolder))
1217
.then(files => {
1318
return Promise.all(
1419
files
1520
.filter(file => file !== '.git')
16-
.map(file => exec(`rm -rf ${path.join(tmpFolder, file)}`))
21+
.map(file => exec(`rimraf ${path.join(tmpFolder, file)}`))
1722
);
1823
})
19-
.then(() => exec(`cp -R ${srcFolder} ${tmpFolder}`))
20-
.then(() => exec(`cp LICENSE ${tmpFolder}`))
24+
.then(() => copy(srcFolder, tmpFolder))
25+
.then(() => copy(license, tmpFolder))
2126
.then(() => exec(`cd ${tmpFolder} && git add -A .`))
2227
.then(() => exec(`cd ${tmpFolder} && git commmit -m "Release v${version}"`))
2328
.then(() => exec(`cd ${tmpFolder} && git tag -a --message=v${version} v${version}`))
2429
.then(() => exec(`cd ${tmpFolder} && git push`))
2530
.then(() => exec(`cd ${tmpFolder} && git push --tags`))
26-
.then(() => exec(`rm -rf ${tmpFolder}`))
31+
.then(() => exec(`rimraf ${tmpFolder}`))
2732
.then(() => console.log('Released: '.cyan + repo.green));
2833
}

0 commit comments

Comments
 (0)