Skip to content

Commit 7328d0b

Browse files
committed
build: simplify & speed up logic in Travis CI build steps
1 parent 30516ba commit 7328d0b

File tree

1 file changed

+39
-31
lines changed

1 file changed

+39
-31
lines changed

.travis.yml

Lines changed: 39 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -22,6 +22,32 @@ cache:
2222
- node_modules
2323
before_install:
2424
- |
25+
# Setup utility functions
26+
function node_version_lt () {
27+
[[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v "${1}")" ]]
28+
}
29+
function npm_module_installed () {
30+
npm -lsp ls | grep -Fq "$(pwd)/node_modules/${1}:${1}@"
31+
}
32+
function npm_remove_module_re () {
33+
node -e '
34+
fs = require("fs");
35+
p = JSON.parse(fs.readFileSync("package.json", "utf8"));
36+
r = RegExp(process.argv[1]);
37+
for (k in p.devDependencies) {
38+
if (r.test(k)) delete p.devDependencies[k];
39+
}
40+
fs.writeFileSync("package.json", JSON.stringify(p, null, 2) + "\n");
41+
' "$@"
42+
}
43+
function npm_use_module () {
44+
node -e '
45+
fs = require("fs");
46+
p = JSON.parse(fs.readFileSync("package.json", "utf8"));
47+
p.devDependencies[process.argv[1]] = process.argv[2];
48+
fs.writeFileSync("package.json", JSON.stringify(p, null, 2) + "\n");
49+
' "$@"
50+
}
2551
function v () {
2652
tr '.' '\n' <<< "${1}" \
2753
| awk '{ printf "%03d", $0 }' \
@@ -33,33 +59,19 @@ before_install:
3359
npm config set shrinkwrap false
3460
# Setup Node.js version-specific dependencies
3561
- |
36-
# eslint for linting
37-
if [[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v '6.0')" ]]; then
38-
# - remove on Node.js < 6
39-
node -pe 'Object.keys(require("./package").devDependencies).join("\n")' | \
40-
grep -E '^eslint(-|$)' | \
41-
xargs npm rm --save-dev
62+
# Configure eslint for linting
63+
if node_version_lt '6.0'; then npm_remove_module_re '^eslint(-|$)'
4264
fi
4365
- |
44-
# istanbul for coverage
45-
if [[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v '0.10')" ]]; then
46-
# - remove on Node.js < 0.10
47-
npm rm --save-dev istanbul
66+
# Configure istanbul for coverage
67+
if node_version_lt '0.10'; then npm_remove_module_re '^istanbul$'
4868
fi
4969
- |
50-
# mocha for testing
51-
if [[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v '0.8')" ]]; then
52-
# - use 1.x for Node.js < 0.8
53-
npm install --save-dev [email protected]
54-
elif [[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v '0.10')" ]]; then
55-
# - use 2.x for Node.js < 0.10
56-
npm install --save-dev [email protected]
57-
elif [[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v '4.0')" ]]; then
58-
# - use 3.x for Node.js < 4
59-
npm install --save-dev [email protected]
60-
elif [[ "$(v "$TRAVIS_NODE_VERSION")" -lt "$(v '6.0')" ]]; then
61-
# - use 5.x for Node.js < 6
62-
npm install --save-dev [email protected]
70+
# Configure mocha for testing
71+
if node_version_lt '0.8' ; then npm_use_module 'mocha' '1.21.5'
72+
elif node_version_lt '0.10'; then npm_use_module 'mocha' '2.5.3'
73+
elif node_version_lt '4.0' ; then npm_use_module 'mocha' '3.5.3'
74+
elif node_version_lt '6.0' ; then npm_use_module 'mocha' '5.2.0'
6375
fi
6476
# Update Node.js modules
6577
- |
@@ -68,19 +80,15 @@ before_install:
6880
npm prune
6981
npm rebuild
7082
fi
71-
7283
script:
7384
- |
7485
# Run test script, depending on istanbul install
75-
if npm -ps ls istanbul | grep -q istanbul; then
76-
npm run-script test-travis
77-
else
78-
npm test
86+
if npm_module_installed 'istanbul'; then npm run-script test-travis
87+
else npm test
7988
fi
8089
- |
81-
# Run linting, depending on eslint install
82-
if npm -ps ls eslint | grep -q eslint; then
83-
npm run-script lint
90+
# Run linting, if eslint exists
91+
if npm_module_installed 'eslint'; then npm run-script lint
8492
fi
8593
after_script:
8694
- |

0 commit comments

Comments
 (0)