@vamship/build-utils 1.0.3 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- package/package.json +17 -16
- package/src/project.js +1 -0
- package/src/task-builders/build/build-ui.js +67 -0
- package/src/task-builders/build/index.js +18 -10
- package/src/task-builders/format.js +3 -1
- package/src/task-builders/publish/publish-docker.js +2 -1
- package/src/task-builders/test/index.js +39 -0
- package/src/task-builders/test/test-ui.js +39 -0
- /package/src/task-builders/{test.js → test/test.js} +0 -0
package/package.json
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
{
|
2
2
|
"name": "@vamship/build-utils",
|
3
|
-
"version": "1.0
|
3
|
+
"version": "1.3.0",
|
4
4
|
"description": "Utility library for build tooling",
|
5
5
|
"main": "src/index.js",
|
6
6
|
"scripts": {
|
@@ -41,26 +41,26 @@
|
|
41
41
|
},
|
42
42
|
"homepage": "https://github.com/vamship/build-utils#readme",
|
43
43
|
"devDependencies": {
|
44
|
-
"chai": "^4.3.
|
44
|
+
"chai": "^4.3.6",
|
45
45
|
"chai-as-promised": "^7.1.1",
|
46
|
-
"eslint": "^
|
47
|
-
"jsdoc": "^3.6.
|
48
|
-
"mocha": "^9.
|
49
|
-
"nodemon": "^2.0.
|
46
|
+
"eslint": "^8.10.0",
|
47
|
+
"jsdoc": "^3.6.10",
|
48
|
+
"mocha": "^9.2.2",
|
49
|
+
"nodemon": "^2.0.15",
|
50
50
|
"nyc": "^15.1.0",
|
51
|
-
"prettier": "^2.
|
52
|
-
"rewire": "^
|
53
|
-
"sinon": "^
|
51
|
+
"prettier": "^2.5.1",
|
52
|
+
"rewire": "^6.0.0",
|
53
|
+
"sinon": "^13.0.1",
|
54
54
|
"sinon-chai": "^3.7.0"
|
55
55
|
},
|
56
56
|
"dependencies": {
|
57
|
-
"camelcase": "^6.
|
57
|
+
"camelcase": "^6.3.0",
|
58
58
|
"delete": "^1.1.0",
|
59
59
|
"docdash": "^1.2.0",
|
60
|
-
"dotenv": "^
|
61
|
-
"dotenv-expand": "^
|
60
|
+
"dotenv": "^16.0.0",
|
61
|
+
"dotenv-expand": "^8.0.2",
|
62
62
|
"execa": "^5.1.1",
|
63
|
-
"fancy-log": "^
|
63
|
+
"fancy-log": "^2.0.0",
|
64
64
|
"mkdirp": "^1.0.4",
|
65
65
|
"semver": "^7.3.5"
|
66
66
|
},
|
@@ -82,10 +82,11 @@
|
|
82
82
|
},
|
83
83
|
"optionalDependencies": {
|
84
84
|
"gulp-jsdoc3": "= 3.0.0",
|
85
|
-
"typedoc": ">=
|
86
|
-
"typescript": ">=
|
85
|
+
"typedoc": ">=0.22.13",
|
86
|
+
"typescript": ">=4.6.2"
|
87
87
|
},
|
88
88
|
"engines": {
|
89
|
-
"node": ">= 14.18.1"
|
89
|
+
"node": ">= 14.18.1",
|
90
|
+
"npm": ">= 8.1.0"
|
90
91
|
}
|
91
92
|
}
|
package/src/project.js
CHANGED
@@ -0,0 +1,67 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const _gulp = require('gulp');
|
4
|
+
const _typescript = require('gulp-typescript');
|
5
|
+
const _execa = require('execa');
|
6
|
+
|
7
|
+
/**
|
8
|
+
* Sub builder that creates a task that will build UI project
|
9
|
+
* using vite. This method will return a watcher if the watch option
|
10
|
+
* is set to true.
|
11
|
+
*
|
12
|
+
* @private
|
13
|
+
* @param {Object} project Reference to an object that contains project metadata
|
14
|
+
* that can be used to customize build outputs.
|
15
|
+
* @param {Object} options An options object that can be used to customize the
|
16
|
+
* task.
|
17
|
+
*
|
18
|
+
* @returns {Function} A gulp task.
|
19
|
+
*/
|
20
|
+
module.exports = (project, options) => {
|
21
|
+
const { watch } = Object.assign({ watch: false }, options);
|
22
|
+
const rootDir = project.rootDir;
|
23
|
+
const workingDir = rootDir.getChild('working');
|
24
|
+
|
25
|
+
const viteBin = project.rootDir.getFilePath('node_modules/.bin/vite');
|
26
|
+
|
27
|
+
const dirs = ['src', 'test'];
|
28
|
+
|
29
|
+
const distFiles = [
|
30
|
+
rootDir.getFileGlob('_scripts/*'),
|
31
|
+
rootDir.getFileGlob('nginx.conf'),
|
32
|
+
rootDir.getFileGlob('package-lock.json'),
|
33
|
+
rootDir.getFileGlob('Dockerfile*'),
|
34
|
+
rootDir.getFileGlob('LICENSE'),
|
35
|
+
rootDir.getFileGlob('README.md'),
|
36
|
+
rootDir.getFileGlob('.env'),
|
37
|
+
rootDir.getFileGlob(project.configFileName),
|
38
|
+
];
|
39
|
+
const copyTask = () =>
|
40
|
+
_gulp
|
41
|
+
.src(distFiles, { allowEmpty: true })
|
42
|
+
.pipe(_gulp.dest(workingDir.absolutePath));
|
43
|
+
|
44
|
+
const args = ['build'];
|
45
|
+
const buildTask = () => _execa(viteBin, args, { stdio: 'inherit' });
|
46
|
+
buildTask.displayName = 'build-ui';
|
47
|
+
buildTask.description = 'Build the UI project';
|
48
|
+
|
49
|
+
const task = _gulp.series([buildTask, copyTask]);
|
50
|
+
|
51
|
+
if (watch) {
|
52
|
+
const paths = dirs
|
53
|
+
.map((dir) => rootDir.getChild(dir))
|
54
|
+
.map((dir) => ['ts', 'tsx'].map((ext) => dir.getAllFilesGlob(ext)))
|
55
|
+
.reduce((result, arr) => result.concat(arr), []);
|
56
|
+
|
57
|
+
args.push('--watch');
|
58
|
+
const buildTask = () => _execa(viteBin, args, { stdio: 'inherit' });
|
59
|
+
const task = _gulp.series([buildTask, copyTask]);
|
60
|
+
const watchTask = () => _gulp.watch(paths, task);
|
61
|
+
watchTask.displayName = 'watch-build-ui';
|
62
|
+
watchTask.description = 'Automatically build the UI project on change';
|
63
|
+
return watchTask;
|
64
|
+
}
|
65
|
+
|
66
|
+
return task;
|
67
|
+
};
|
@@ -27,18 +27,26 @@ module.exports = (project, options) => {
|
|
27
27
|
return;
|
28
28
|
}
|
29
29
|
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
if (project.
|
34
|
-
const
|
35
|
-
tasks
|
36
|
-
|
37
|
-
|
38
|
-
|
30
|
+
let task;
|
31
|
+
let tasks;
|
32
|
+
|
33
|
+
if (project.projectType !== 'ui') {
|
34
|
+
const jsBuild = require('./build-js');
|
35
|
+
tasks = [jsBuild(project, options)];
|
36
|
+
|
37
|
+
if (project.hasTypescript) {
|
38
|
+
const tsBuild = require('./build-ts');
|
39
|
+
tasks.push(tsBuild(project, options));
|
40
|
+
} else if (project.hasExportedTypes) {
|
41
|
+
const typesBuild = require('./build-types');
|
42
|
+
tasks.push(typesBuild(project, options));
|
43
|
+
}
|
44
|
+
} else {
|
45
|
+
const tsBuild = require('./build-ui');
|
46
|
+
tasks = [tsBuild(project, options)];
|
39
47
|
}
|
40
48
|
|
41
|
-
|
49
|
+
task = _gulp.parallel(tasks);
|
42
50
|
if (!watch) {
|
43
51
|
task.displayName = 'build';
|
44
52
|
task.description = 'Transpile/copy source files into working directory';
|
@@ -29,7 +29,9 @@ module.exports = (project, options) => {
|
|
29
29
|
const paths = dirs
|
30
30
|
.map((dir) => rootDir.getChild(dir))
|
31
31
|
.map((dir) =>
|
32
|
-
['ts', 'js', 'json', 'py'].map((ext) =>
|
32
|
+
['ts', 'js', 'json', 'py', 'tsx', 'jsx'].map((ext) =>
|
33
|
+
dir.getAllFilesGlob(ext)
|
34
|
+
)
|
33
35
|
)
|
34
36
|
.reduce((result, arr) => result.concat(arr), [])
|
35
37
|
.concat(extras.map((file) => rootDir.getFileGlob(file)));
|
@@ -42,10 +42,11 @@ module.exports = (project, options) => {
|
|
42
42
|
: [version, major, `${major}.${minor}`];
|
43
43
|
|
44
44
|
const tags = tagList.map((tag) => `${repo}:${tag}`);
|
45
|
+
const latestTag = `${repo}:latest`;
|
45
46
|
|
46
47
|
const tasks = tags.map((tag) => {
|
47
48
|
const tagTask = () =>
|
48
|
-
_execa(dockerBin, ['tag', tag], {
|
49
|
+
_execa(dockerBin, ['tag', latestTag, tag], {
|
49
50
|
stdio: 'inherit',
|
50
51
|
});
|
51
52
|
tagTask.displayName = `publish-docker-tag-${tag}${suffix}`;
|
@@ -0,0 +1,39 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const _gulp = require('gulp');
|
4
|
+
|
5
|
+
/**
|
6
|
+
* Builder function that can be used to generate a gulp task to execute
|
7
|
+
* instrumented unit/api tests.
|
8
|
+
*
|
9
|
+
* @param {Object} project Reference to an object that contains project metadata
|
10
|
+
* that can be used to customize build outputs.
|
11
|
+
* @param {Object} options An options object that can be used to customize the
|
12
|
+
* task.
|
13
|
+
*
|
14
|
+
* @returns {Function} A gulp task.
|
15
|
+
*/
|
16
|
+
module.exports = (project, options) => {
|
17
|
+
const { testType, watch } = Object.assign(
|
18
|
+
{ testType: 'unit', watch: false },
|
19
|
+
options
|
20
|
+
);
|
21
|
+
const tasks = [];
|
22
|
+
if (project.projectType !== 'ui') {
|
23
|
+
const nonUiTests = require('./test');
|
24
|
+
tasks.push(nonUiTests(project, options));
|
25
|
+
} else {
|
26
|
+
const uiTests = require('./test-ui');
|
27
|
+
tasks.push(uiTests(project, options));
|
28
|
+
}
|
29
|
+
const task = _gulp.parallel(tasks);
|
30
|
+
if (!watch) {
|
31
|
+
task.displayName = `test-${testType}`;
|
32
|
+
task.description = `Execute ${testType} tests`;
|
33
|
+
} else {
|
34
|
+
task.displayName = `watch-test-${testType}`;
|
35
|
+
task.description = `Automatically execute ${testType} tests on change`;
|
36
|
+
}
|
37
|
+
|
38
|
+
return task;
|
39
|
+
};
|
@@ -0,0 +1,39 @@
|
|
1
|
+
'use strict';
|
2
|
+
|
3
|
+
const _gulp = require('gulp');
|
4
|
+
const _execa = require('execa');
|
5
|
+
|
6
|
+
/**
|
7
|
+
* Builder function that can be used to generate a gulp task to execute
|
8
|
+
* instrumented unit/api tests.
|
9
|
+
*
|
10
|
+
* @param {Object} project Reference to an object that contains project metadata
|
11
|
+
* that can be used to customize build outputs.
|
12
|
+
* @param {Object} options An options object that can be used to customize the
|
13
|
+
* task.
|
14
|
+
*
|
15
|
+
* @returns {Function} A gulp task.
|
16
|
+
*/
|
17
|
+
module.exports = (project, options) => {
|
18
|
+
const { testType, watch } = Object.assign(
|
19
|
+
{ testType: 'unit', watch: false },
|
20
|
+
options
|
21
|
+
);
|
22
|
+
|
23
|
+
const rootDir = project.jsRootDir;
|
24
|
+
const jestBin = project.rootDir.getFilePath('node_modules/.bin/jest');
|
25
|
+
let args = ['--config', 'jest.config.js', '--coverage'];
|
26
|
+
|
27
|
+
if (watch) {
|
28
|
+
args.push('--watchAll');
|
29
|
+
const watchTask = () => _execa(jestBin, args, { stdio: 'inherit' });
|
30
|
+
watchTask.displayName = `watch-test-${testType}`;
|
31
|
+
watchTask.description = `Automatically execute ${testType} tests on change`;
|
32
|
+
return watchTask;
|
33
|
+
}
|
34
|
+
|
35
|
+
const task = () => _execa(jestBin, args, { stdio: 'inherit' });
|
36
|
+
task.displayName = `test-${testType}`;
|
37
|
+
task.description = `Execute ${testType} tests`;
|
38
|
+
return task;
|
39
|
+
};
|
File without changes
|