##// END OF EJS Templates
added markRelease task
cin -
r68:bed8af5ffbac v1.2.15 default
parent child
Show More
@@ -1,255 +1,272
1 // если версия явно не заданы вычисляем ее из тэга ревизии v.{num}***
1 // если версия явно не заданы вычисляем ее из тэга ревизии v.{num}***
2 // результатом будет версия '{num}.{distance}' где distance - расстояние от
2 // результатом будет версия '{num}.{distance}' где distance - расстояние от
3 // текущей ревизии до ревизии с тэгом
3 // текущей ревизии до ревизии с тэгом
4 def tagDistance = 0;
5 def isRelease = false;
6
4 if (!version) {
7 if (!version) {
5 def tagDistance = 0;
6
8
7 def rev = ["hg", "log", "-r", ".", "--template", "{latesttag('re:^v') % '{tag}-{distance}'}"].execute().text.trim();
9 def rev = ["hg", "log", "-r", ".", "--template", "{latesttag('re:^v') % '{tag}-{distance}'}"].execute().text.trim();
8
10
9 def tagVersion;
11 def tagVersion;
10
12
11 def match = (rev =~ /^v(\d+\.\d+).*-(\d+)$/);
13 def match = (rev =~ /^v(\d+\.\d+\.\d+).*-(\d+)$/);
12
14
13 if (match.size()) {
15 if (match.size()) {
14 tagVersion = match[0][1];
16 tagVersion = match[0][1];
15 tagDistance = match[0][2].toInteger();
17 tagDistance = match[0][2].toInteger();
16 } else {
18 } else {
17 throw new Exception("A version must be specied");
19 throw new Exception("A version must be specied");
18 }
20 }
19
21
20 version = "${tagVersion}.$tagDistance";
22 version = tagVersion;
23
24 if (tagDistance > 0)
25 version++;
21 } else {
26 } else {
22 println "explicit version: $version";
27 println "explicit version: $version";
23 }
28 }
24
29
25 if (hasProperty('versionSuffix') && versionSuffix) {
30 if (hasProperty('versionSuffix') && versionSuffix) {
26 version += "-$versionSuffix"
31 version += "-$versionSuffix"
27 }
32 }
28
33
29 if(!npmName)
34 if(!npmName)
30 npmName = name;
35 npmName = name;
31
36
37 if (hasProperty('release')) {
38 isRelease = (release != 'false')
39 } else {
40 isRelease = (tagDistance == 0);
41 }
42
32 if(!["amd", "commonjs", "system", "umd", "es6", "esnext"].contains(jsmodule))
43 if(!["amd", "commonjs", "system", "umd", "es6", "esnext"].contains(jsmodule))
33 throw new Exception("Invalid jsmodule specified: $jsmodule");
44 throw new Exception("Invalid jsmodule specified: $jsmodule");
34 if(!["es3", "es5", "es6", "es2016", "es2017", "esnext"].contains(target))
45 if(!["es3", "es5", "es6", "es2016", "es2017", "esnext"].contains(target))
35 throw new Exception("Invalid target specified: $target")
46 throw new Exception("Invalid target specified: $target")
36
47
37 def targetLibs = [
48 def targetLibs = [
38 "es3" : "es5,es2015.promise,es2015.symbol,dom,scripthost",
49 "es3" : "es5,es2015.promise,es2015.symbol,dom,scripthost",
39 "es5" : "es5,es2015.promise,es2015.symbol,dom,scripthost"
50 "es5" : "es5,es2015.promise,es2015.symbol,dom,scripthost"
40 ];
51 ];
41
52
42 ext.packageName="@$npmScope/$npmName";
53 ext.packageName="@$npmScope/$npmName";
43
54
44 def srcDir = "$projectDir/src"
55 def srcDir = "$projectDir/src"
45 def typingsDir = "$srcDir/typings"
56 def typingsDir = "$srcDir/typings"
46 def distDir = "$buildDir/dist"
57 def distDir = "$buildDir/dist"
47 def testDir = "$buildDir/test"
58 def testDir = "$buildDir/test"
48 def lib = targetLibs[target] ?: "${target},dom";
59 def lib = targetLibs[target] ?: "${target},dom";
49
60
50 println "lib: $lib";
61 println "lib: $lib";
51
62
52 def sourceSets = ["main", "amd", "cjs"];
63 def sourceSets = ["main", "amd", "cjs"];
53 def testSets = ["test", "testAmd", "testCjs"];
64 def testSets = ["test", "testAmd", "testCjs"];
54
65
55 task beforeBuild {
66 task beforeBuild {
56 }
67 }
57
68
58 def createSoursetTasks = { String name, String outDir ->
69 def createSoursetTasks = { String name, String outDir ->
59 def setName = name.capitalize();
70 def setName = name.capitalize();
60
71
61 def compileDir = "$buildDir/compile/$name"
72 def compileDir = "$buildDir/compile/$name"
62 def declDir = "$typingsDir/$name"
73 def declDir = "$typingsDir/$name"
63 def setDir = "$projectDir/src/$name"
74 def setDir = "$projectDir/src/$name"
64 def jsDir = outDir;
75 def jsDir = outDir;
65
76
66 def beforeBuildTask = task "beforeBuild$setName"(dependsOn: beforeBuild) {
77 def beforeBuildTask = task "beforeBuild$setName"(dependsOn: beforeBuild) {
67 }
78 }
68
79
69 def copyJsTask = task "copyJs$setName"(dependsOn: beforeBuildTask, type: Copy) {
80 def copyJsTask = task "copyJs$setName"(dependsOn: beforeBuildTask, type: Copy) {
70 from "$setDir/js"
81 from "$setDir/js"
71 into jsDir
82 into jsDir
72 }
83 }
73
84
74 def lintJsTask = task "lintJs$setName"(dependsOn: beforeBuildTask, type: Exec) {
85 def lintJsTask = task "lintJs$setName"(dependsOn: beforeBuildTask, type: Exec) {
75 inputs.dir("$setDir/js/").skipWhenEmpty();
86 inputs.dir("$setDir/js/").skipWhenEmpty();
76 commandLine "eslint", '--format', 'stylish', "$setDir/js/"
87 commandLine "eslint", '--format', 'stylish', "$setDir/js/"
77 }
88 }
78
89
79 def compileTsTask = task "compileTs$setName"(dependsOn: beforeBuildTask, type: Exec) {
90 def compileTsTask = task "compileTs$setName"(dependsOn: beforeBuildTask, type: Exec) {
80 inputs.dir("$setDir/ts").skipWhenEmpty()
91 inputs.dir("$setDir/ts").skipWhenEmpty()
81 inputs.file("$srcDir/tsconfig.json")
92 inputs.file("$srcDir/tsconfig.json")
82 inputs.file("$setDir/tsconfig.json")
93 inputs.file("$setDir/tsconfig.json")
83 outputs.dir(compileDir)
94 outputs.dir(compileDir)
84 outputs.dir(declDir)
95 outputs.dir(declDir)
85
96
86 commandLine 'node_modules/.bin/tsc',
97 commandLine 'node_modules/.bin/tsc',
87 '-p', "$setDir/tsconfig.json",
98 '-p', "$setDir/tsconfig.json",
88 '-t', target,
99 '-t', target,
89 '-m', jsmodule,
100 '-m', jsmodule,
90 '-d',
101 '-d',
91 '--outDir', compileDir,
102 '--outDir', compileDir,
92 '--declarationDir', declDir
103 '--declarationDir', declDir
93
104
94 if (lib)
105 if (lib)
95 args '--lib', lib
106 args '--lib', lib
96 }
107 }
97
108
98 def copyTsOutputTask = task "copyTsOutput$setName"(dependsOn: compileTsTask, type: Copy) {
109 def copyTsOutputTask = task "copyTsOutput$setName"(dependsOn: compileTsTask, type: Copy) {
99 from compileDir
110 from compileDir
100 into jsDir
111 into jsDir
101 }
112 }
102
113
103 def copyTypingsTask = task "copyTypings$setName"(dependsOn: compileTsTask, type: Copy) {
114 def copyTypingsTask = task "copyTypings$setName"(dependsOn: compileTsTask, type: Copy) {
104 from declDir
115 from declDir
105 into jsDir
116 into jsDir
106 }
117 }
107
118
108 def copyResourcesTask = task "copyResources$setName"(dependsOn: beforeBuildTask, type: Copy) {
119 def copyResourcesTask = task "copyResources$setName"(dependsOn: beforeBuildTask, type: Copy) {
109 from "$setDir/resources"
120 from "$setDir/resources"
110 into outDir
121 into outDir
111 }
122 }
112
123
113 task "build$setName" {
124 task "build$setName" {
114 dependsOn copyTypingsTask,
125 dependsOn copyTypingsTask,
115 copyTsOutputTask,
126 copyTsOutputTask,
116 copyJsTask,
127 copyJsTask,
117 copyResourcesTask,
128 copyResourcesTask,
118 lintJsTask
129 lintJsTask
119 }
130 }
120 }
131 }
121
132
122 task printVersion {
133 task printVersion {
123 doLast {
134 doLast {
124 println "version: $version"
135 println "version: $version";
125 println "packageName: $packageName"
136 println "isRelease: $isRelease, tagDistance: $tagDistance";
126 println "bundle: ${pack.outputs.files.join(',')}"
137 println "packageName: $packageName";
127 println "target: $target"
138 println "bundle: ${pack.outputs.files.join(',')}";
128 println "module: $jsmodule"
139 println "target: $target";
140 println "module: $jsmodule";
129 }
141 }
130 }
142 }
131
143
132 task clean {
144 task clean {
133 doLast {
145 doLast {
134 delete buildDir
146 delete buildDir
135 delete typingsDir
147 delete typingsDir
136 }
148 }
137 }
149 }
138
150
139 task _initBuild {
151 task _initBuild {
140 mustRunAfter clean
152 mustRunAfter clean
141
153
142 def buildInfoFile = "$buildDir/platform";
154 def buildInfoFile = "$buildDir/platform";
143 inputs.property('target',target);
155 inputs.property('target',target);
144 inputs.property('jsmodule',jsmodule);
156 inputs.property('jsmodule',jsmodule);
145 outputs.file(buildInfoFile);
157 outputs.file(buildInfoFile);
146
158
147 doLast {
159 doLast {
148 delete buildDir
160 delete buildDir
149 mkdir buildDir
161 mkdir buildDir
150
162
151 def f = new File(buildInfoFile);
163 def f = new File(buildInfoFile);
152 f << "$target-$jsmodule";
164 f << "$target-$jsmodule";
153 }
165 }
154 }
166 }
155
167
156 task cleanNpm {
168 task cleanNpm {
157 doLast {
169 doLast {
158 delete 'node_modules'
170 delete 'node_modules'
159 }
171 }
160 }
172 }
161
173
162 task _npmInstall() {
174 task _npmInstall() {
163 inputs.file("package.json")
175 inputs.file("package.json")
164 outputs.dir("node_modules")
176 outputs.dir("node_modules")
165 doLast {
177 doLast {
166 exec {
178 exec {
167 commandLine 'npm', 'install'
179 commandLine 'npm', 'install'
168 }
180 }
169 }
181 }
170 }
182 }
171
183
172 beforeBuild {
184 beforeBuild {
173 dependsOn _initBuild
185 dependsOn _initBuild
174 dependsOn _npmInstall
186 dependsOn _npmInstall
175 }
187 }
176
188
177 sourceSets.each { createSoursetTasks(it, distDir) }
189 sourceSets.each { createSoursetTasks(it, distDir) }
178
190
179 testSets.each { createSoursetTasks(it, testDir) }
191 testSets.each { createSoursetTasks(it, testDir) }
180
192
181 compileTsAmd {
193 compileTsAmd {
182 dependsOn compileTsMain
194 dependsOn compileTsMain
183 }
195 }
184
196
185 compileTsCjs {
197 compileTsCjs {
186 dependsOn compileTsMain
198 dependsOn compileTsMain
187 }
199 }
188
200
189 task build(dependsOn: buildMain) {
201 task build(dependsOn: buildMain) {
190 if (jsmodule == "amd")
202 if (jsmodule == "amd")
191 dependsOn buildAmd
203 dependsOn buildAmd
192 if (jsmodule == "commonjs")
204 if (jsmodule == "commonjs")
193 dependsOn buildCjs
205 dependsOn buildCjs
194 }
206 }
195
207
196 compileTsTest {
208 compileTsTest {
197 dependsOn build
209 dependsOn build
198 }
210 }
199
211
200 compileTsTestAmd {
212 compileTsTestAmd {
201 dependsOn compileTsTest
213 dependsOn compileTsTest
202 }
214 }
203
215
204 compileTsTestCjs {
216 compileTsTestCjs {
205 dependsOn compileTsTest
217 dependsOn compileTsTest
206 }
218 }
207
219
208 task _installLocalCjsDependency(dependsOn: [buildTestCjs, "_packageMeta"], type: Exec) {
220 task _installLocalCjsDependency(dependsOn: [buildTestCjs, "_packageMeta"], type: Exec) {
209 inputs.file("$distDir/package.json")
221 inputs.file("$distDir/package.json")
210 outputs.upToDateWhen {
222 outputs.upToDateWhen {
211 new File("$testDir/$packageName").exists()
223 new File("$testDir/$packageName").exists()
212 }
224 }
213
225
214 workingDir testDir
226 workingDir testDir
215
227
216 commandLine 'npm', 'install', '--no-save', '--force', distDir
228 commandLine 'npm', 'install', '--no-save', '--force', distDir
217 }
229 }
218
230
219 task test(dependsOn: [buildTest], type: Exec) {
231 task test(dependsOn: [buildTest], type: Exec) {
220 if (jsmodule == "amd")
232 if (jsmodule == "amd")
221 dependsOn buildTestAmd
233 dependsOn buildTestAmd
222 if (jsmodule == "commonjs") {
234 if (jsmodule == "commonjs") {
223 dependsOn buildTestCjs
235 dependsOn buildTestCjs
224 dependsOn _installLocalCjsDependency
236 dependsOn _installLocalCjsDependency
225 }
237 }
226
238
227 commandLine 'node', "$testDir/run-tests.js"
239 commandLine 'node', "$testDir/run-tests.js"
228 }
240 }
229
241
230 task _packageMeta(type: Copy) {
242 task _packageMeta(type: Copy) {
231 mustRunAfter build
243 mustRunAfter build
232
244
233 inputs.property("version", version)
245 inputs.property("version", version)
234 from('.') {
246 from('.') {
235 include '.npmignore', 'readme.md', 'license', 'history.md'
247 include '.npmignore', 'readme.md', 'license', 'history.md'
236 }
248 }
237 from("$srcDir/package.${jsmodule}.tmpl.json") {
249 from("$srcDir/package.${jsmodule}.tmpl.json") {
238 expand project.properties
250 expand project.properties
239 rename { "package.json" }
251 rename { "package.json" }
240 }
252 }
241 into distDir
253 into distDir
242 }
254 }
243
255
244 task pack(dependsOn: [build, _packageMeta], type: Exec) {
256 task pack(dependsOn: [build, _packageMeta], type: Exec) {
245 workingDir distDir
257 workingDir distDir
246 outputs.file("$npmScope-$npmName-${version}.tgz")
258 outputs.file("$npmScope-$npmName-${version}.tgz")
247
259
248 commandLine 'npm', 'pack'
260 commandLine 'npm', 'pack'
249 }
261 }
250
262
251 task publish(dependsOn: [build, _packageMeta], type: Exec) {
263 task publish(dependsOn: [build, _packageMeta], type: Exec) {
252 workingDir distDir
264 workingDir distDir
253
265
254 commandLine 'npm', 'publish', '--access', 'public'
266 commandLine 'npm', 'publish', '--access', 'public'
267 }
268
269 task markRelease(type: Exec) {
270 onlyIf { tagDistance > 1 }
271 commandLine "hg", "tag", "v$version";
255 } No newline at end of file
272 }
General Comments 0
You need to be logged in to leave comments. Login now