build.gradle
246 lines
| 5.9 KiB
| text/x-groovy
|
GroovyLexer
|
|
r61 | // если версия явно не заданы вычисляем ее из тэга ревизии v.{num}*** | |
| // результатом будет версия '{num}.{distance}' где distance - расстояние от | |||
| // текущей ревизии до ревизии с тэгом | |||
| if (!version) { | |||
| def tagDistance = 0; | |||
| def rev = ["hg", "log", "-r", ".", "--template", "{latesttag('re:^v') % '{tag}-{distance}'}"].execute().text.trim(); | |||
| def tagVersion; | |||
| def match = (rev =~ /^v(\d+\.\d+).*-(\d+)$/); | |||
| if (match.size()) { | |||
| tagVersion = match[0][1]; | |||
| tagDistance = match[0][2].toInteger(); | |||
| } else { | |||
| throw new Exception("A version must be specied"); | |||
| } | |||
| version = "${tagVersion}.$tagDistance"; | |||
| } else { | |||
| println "explicit version: $version"; | |||
| } | |||
| if (hasProperty('versionSuffix') && versionSuffix) { | |||
| version += "-$versionSuffix" | |||
|
|
r27 | } | |
|
|
r0 | ||
|
|
r47 | if(!npmName) | |
| npmName = name; | |||
|
|
r59 | if(!["amd", "commonjs", "system", "umd", "es6", "esnext"].contains(jsmodule)) | |
| throw new Exception("Invalid jsmodule specified: $jsmodule"); | |||
| if(!["es3", "es5", "es6", "es2016", "es2017", "esnext"].contains(target)) | |||
| throw new Exception("Invalid target specified: $target") | |||
|
|
r51 | ||
|
|
r59 | def targetLibs = [ | |
| "es3" : "es5,es2015.promise,es2015.symbol,dom,scripthost", | |||
| "es5" : "es5,es2015.promise,es2015.symbol,dom,scripthost" | |||
| ]; | |||
|
|
r0 | ||
|
|
r59 | ext.packageName="$npmScope/$npmName"; | |
|
|
r51 | ||
| def srcDir = "$projectDir/src" | |||
| def typingsDir = "$srcDir/typings" | |||
|
|
r59 | def distDir = "$buildDir/dist" | |
| def testDir = "$buildDir/test" | |||
| def lib = targetLibs[target] ?: "${target},dom"; | |||
| println "lib: $lib"; | |||
| def sourceSets = ["main", "amd", "cjs"]; | |||
| def testSets = ["test", "testAmd", "testCjs"]; | |||
| task beforeBuild { | |||
| } | |||
| def createSoursetTasks = { String name, String outDir -> | |||
| def setName = name.capitalize(); | |||
|
|
r63 | def compileDir = "$buildDir/compile/$name" | |
|
|
r59 | def declDir = "$typingsDir/$name" | |
| def setDir = "$projectDir/src/$name" | |||
|
|
r63 | def jsDir = outDir; | |
|
|
r59 | ||
| def beforeBuildTask = task "beforeBuild$setName"(dependsOn: beforeBuild) { | |||
| } | |||
| def copyJsTask = task "copyJs$setName"(dependsOn: beforeBuildTask, type: Copy) { | |||
| from "$setDir/js" | |||
|
|
r63 | into jsDir | |
| } | |||
| def lintJsTask = task "lintJs$setName"(dependsOn: beforeBuildTask, type: Exec) { | |||
| inputs.dir("$setDir/js/").skipWhenEmpty(); | |||
| commandLine "eslint", '--format', 'stylish', "$setDir/js/" | |||
|
|
r59 | } | |
|
|
r60 | def compileTsTask = task "compileTs$setName"(dependsOn: beforeBuildTask, type: Exec) { | |
|
|
r63 | inputs.dir("$setDir/ts").skipWhenEmpty() | |
|
|
r59 | inputs.file("$srcDir/tsconfig.json") | |
| inputs.file("$setDir/tsconfig.json") | |||
|
|
r63 | outputs.dir(compileDir) | |
|
|
r59 | outputs.dir(declDir) | |
|
|
r51 | ||
|
|
r59 | commandLine 'node_modules/.bin/tsc', | |
| '-p', "$setDir/tsconfig.json", | |||
| '-t', target, | |||
| '-m', jsmodule, | |||
| '-d', | |||
|
|
r63 | '--outDir', compileDir, | |
|
|
r59 | '--declarationDir', declDir | |
| if (lib) | |||
| args '--lib', lib | |||
| } | |||
| def copyTsOutputTask = task "copyTsOutput$setName"(dependsOn: compileTsTask, type: Copy) { | |||
|
|
r63 | from compileDir | |
| into jsDir | |||
|
|
r59 | } | |
|
|
r60 | def copyTypingsTask = task "copyTypings$setName"(dependsOn: compileTsTask, type: Copy) { | |
| from declDir | |||
|
|
r63 | into jsDir | |
| } | |||
| def copyResourcesTask = task "copyResources$setName"(dependsOn: beforeBuildTask, type: Copy) { | |||
| from "$setDir/resources" | |||
|
|
r59 | into outDir | |
| } | |||
|
|
r63 | task "build$setName" { | |
| dependsOn copyTypingsTask, | |||
| copyTsOutputTask, | |||
| copyJsTask, | |||
| copyResourcesTask, | |||
| lintJsTask | |||
|
|
r59 | } | |
| } | |||
|
|
r47 | ||
| task printVersion { | |||
|
|
r48 | doLast { | |
| println "version: $version" | |||
| println "packageName: $packageName" | |||
|
|
r59 | println "target: $target" | |
| println "module: $jsmodule" | |||
|
|
r48 | } | |
|
|
r47 | } | |
|
|
r4 | task clean { | |
| doLast { | |||
| delete buildDir | |||
|
|
r51 | delete typingsDir | |
|
|
r4 | } | |
|
|
r2 | } | |
|
|
r59 | task _initBuild { | |
| mustRunAfter clean | |||
| def buildInfoFile = "$buildDir/platform"; | |||
| inputs.property('target',target); | |||
| inputs.property('jsmodule',jsmodule); | |||
| outputs.file(buildInfoFile); | |||
| doLast { | |||
| delete buildDir | |||
| mkdir buildDir | |||
| def f = new File(buildInfoFile); | |||
| f << "$target-$jsmodule"; | |||
| } | |||
| } | |||
|
|
r4 | task cleanNpm { | |
| doLast { | |||
| delete 'node_modules' | |||
|
|
r2 | } | |
| } | |||
|
|
r0 | ||
|
|
r4 | task _npmInstall() { | |
| inputs.file("package.json") | |||
| outputs.dir("node_modules") | |||
| doLast { | |||
| exec { | |||
| commandLine 'npm', 'install' | |||
|
|
r1 | } | |
| } | |||
|
|
r0 | } | |
|
|
r59 | beforeBuild { | |
| dependsOn _initBuild | |||
| dependsOn _npmInstall | |||
| } | |||
|
|
r51 | ||
|
|
r59 | sourceSets.each { createSoursetTasks(it, distDir) } | |
|
|
r51 | ||
|
|
r59 | testSets.each { createSoursetTasks(it, testDir) } | |
|
|
r51 | ||
|
|
r59 | compileTsAmd { | |
|
|
r60 | dependsOn compileTsMain | |
|
|
r4 | } | |
|
|
r60 | compileTsCjs { | |
| dependsOn compileTsMain | |||
|
|
r59 | } | |
| task build(dependsOn: buildMain) { | |||
| if (jsmodule == "amd") | |||
| dependsOn buildAmd | |||
|
|
r60 | if (jsmodule == "commonjs") | |
| dependsOn buildCjs | |||
|
|
r51 | } | |
|
|
r8 | ||
|
|
r59 | compileTsTest { | |
| dependsOn build | |||
|
|
r51 | } | |
|
|
r59 | compileTsTestAmd { | |
|
|
r60 | dependsOn compileTsTest | |
| } | |||
| compileTsTestCjs { | |||
| dependsOn compileTsTest | |||
|
|
r59 | } | |
|
|
r60 | task _installLocalCjsDependency(dependsOn: [buildTestCjs, "_packageMeta"], type: Exec) { | |
| inputs.file("$distDir/package.json") | |||
| outputs.upToDateWhen { | |||
| new File("$testDir/$packageName").exists() | |||
| } | |||
| workingDir testDir | |||
| commandLine 'npm', 'install', '--no-save', '--force', distDir | |||
| } | |||
| task test(dependsOn: [buildTest], type: Exec) { | |||
| if (jsmodule == "amd") | |||
| dependsOn buildTestAmd | |||
| if (jsmodule == "commonjs") { | |||
| dependsOn buildTestCjs | |||
| dependsOn _installLocalCjsDependency | |||
| } | |||
| commandLine 'node', "$testDir/run-tests.js" | |||
|
|
r8 | } | |
|
|
r4 | task _packageMeta(type: Copy) { | |
|
|
r59 | mustRunAfter build | |
|
|
r4 | inputs.property("version", version) | |
| from('.') { | |||
|
|
r51 | include '.npmignore', 'readme.md', 'license', 'history.md' | |
| } | |||
|
|
r59 | from("$srcDir/package.${jsmodule}.tmpl.json") { | |
|
|
r51 | expand project.properties | |
| rename { "package.json" } | |||
|
|
r4 | } | |
| into distDir | |||
| } | |||
|
|
r59 | task pack(dependsOn: [build, _packageMeta], type: Exec) { | |
|
|
r51 | workingDir distDir | |
|
|
r0 | ||
| commandLine 'npm', 'pack' | |||
| } |
