forked from GoogleCloudPlatform/nodejs-docs-samples
-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathtest
78 lines (64 loc) · 2.36 KB
/
test
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
#!/usr/bin/env node
/**
* Copyright 2017, Google, Inc.
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
'use strict';
const fs = require('fs');
const path = require('path');
require('shelljs/global');
const rootDir = path.join(__dirname, '..');
if (process.env.CIRCLE_BRANCH === 'master') {
exec('yarn run all-cover', { cwd: rootDir });
} else {
// Get list of changed files
const changedFiles = exec('git diff-tree --no-commit-id --name-only -r HEAD', { silent: true }).stdout.split('\n')
.filter((line) => line);
// Get list of directories that have tests
const testDirs = getDirs(rootDir)
.map((name) => name.replace(`${rootDir}/`, ''))
.filter((name) => name.endsWith('/test') || name.endsWith('/system-test'));
// Find intersection between changed files and test directories
const affectedTestsNames = {};
changedFiles.forEach((name) => {
testDirs.forEach((dir) => {
const codeDir = `${dir.replace('/test', '').replace('/system-test', '')}/`;
if (name.includes(codeDir)) {
affectedTestsNames[dir] = true;
}
});
});
// Get final names of tests that need to be run
const affectedTests = Object.keys(affectedTestsNames)
.map((name) => `${name}/*.js`);
if (affectedTests.length) {
// Run the affected tests
exec(`yarn run ci-test -- '${affectedTests.join(' ')}'`, { cwd: rootDir });
} else {
// Just run the linting
exec('yarn run lint', { cwd: rootDir });
}
}
function getDirs (_path) {
const dirs = fs.readdirSync(_path)
.filter((name) => !name.includes('.'))
.filter((name) => !name.includes('node_modules'))
.filter((name) => !name.includes('bower_components'))
.map((name) => path.join(_path, name))
.filter((name) => fs.statSync(name).isDirectory());
if (!dirs.length) {
return [_path];
}
return dirs
.reduce((cur, name) => cur.concat(getDirs(name)), []);
}