-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gruntfile.js
79 lines (78 loc) · 3.19 KB
/
Gruntfile.js
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
79
const fs = require('fs')
module.exports = function (grunt) {
require('load-grunt-tasks')(grunt)
grunt.initConfig({
originalBranch: '',
version: '',
exec: {
lint: { cmd: 'npx eslint src' },
test: { cmd: 'npx jest --config jest-unit-config.json' },
tsc: { cmd: 'npx tsc' },
doc: { cmd: 'npx typedoc --plugin typedoc-plugin-markdown --out doc/source src/lib/index.ts' },
getOriginalBranch: {
cmd: 'git branch | sed -n -e \'s/^\\* \\(.*\\)/\\1/p\'',
callback: function (error, stdout, stderr) {
if (error) {
grunt.log.error(stderr)
} else {
grunt.config.set('originalBranch', stdout.trim())
}
}
},
standardVersion: {
cmd: 'standard-version'
},
gitFlowRelease: {
cmd: `git add . && git commit -m "chore(release): <%= version %>" && git push && git push --tags
&& git checkout -b release/<%= version %> && git push --set-upstream origin release/<%= version %>
&& git checkout main && git merge release/<%= version %> -m "chore(release): release <%= version %>" && git push
&& git checkout <%= originalBranch %> && git merge release/<%= version %> -m "chore(release): release <%= version %>" && git push
&& git branch -D release/<%= version %>
`
}
},
clean: {
build: ['build'],
dist: ['dist']
},
copy: {
lib: { expand: true, cwd: 'build/lib', src: '**', dest: 'dist/' },
readme: { expand: true, src: './README.md', dest: 'dist/' },
changeLog: { expand: true, src: './CHANGELOG.md', dest: 'dist/' },
license: { expand: true, src: './LICENSE', dest: 'dist/' },
jest: { expand: true, src: './jest-unit-config.json', dest: 'dist/' }
}
})
grunt.registerTask('get-version', 'get version from package.json', function () {
const version = grunt.file.readJSON('./package.json').version
grunt.config.set('version', version)
})
grunt.registerTask('create-package', 'create package.json for dist', function () {
const data = require('./package.json')
delete data.devDependencies
delete data.private
data.scripts = {
test: data.scripts.test
}
data.main = 'index.js'
data.types = 'index.d.ts'
fs.writeFileSync('dist/package.json', JSON.stringify(data, null, 2), 'utf8')
})
grunt.registerTask('build-wiki', 'build wiki', function () {
const task = require('./build/dev/task/buildWiki')
task.apply(this.async())
})
grunt.registerTask('exec-release', ['exec:standardVersion', 'copy:changeLog', 'create-package', 'get-version', 'exec:gitFlowRelease'])
grunt.registerTask('run-release-if-applicable', 'run release if applicable', function () {
const originalBranch = grunt.config.get('originalBranch')
if (originalBranch === 'develop' || originalBranch.startsWith('hotfix')) {
grunt.task.run('exec-release')
} else {
grunt.log.writeln('Current branch ' + originalBranch + ', cannot release from branch different from develop or hotfix.')
}
})
grunt.registerTask('dist', ['clean:dist', 'clean:build', 'exec:tsc', 'exec:lint', 'exec:test', 'copy:lib', 'copy:jest', 'copy:readme', 'copy:license', 'create-package'])
grunt.registerTask('doc', ['exec:doc'])
grunt.registerTask('release', ['dist', 'doc', 'exec:getOriginalBranch', 'run-release-if-applicable'])
grunt.registerTask('default', [])
}