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