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