plugins { id "org.implab.gradle-typescript" version "1.0-SNAPSHOT" } // если версия явно не заданы вычисляем ее из тэга ревизии v.{num}*** // результатом будет версия '{num}.{distance}' где distance - расстояние от // текущей ревизии до ревизии с тэгом def tagDistance = 0; def isRelease = false; if (!version) { def rev = ["hg", "log", "-r", ".", "--template", "{latesttag('re:^v') % '{tag}-{distance}'}"].execute().text.trim(); def tagVersion; def match = (rev =~ /^v(\d+\.\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; if (tagDistance > 0) version++; } else { println "explicit version: $version"; } if (hasProperty('versionSuffix') && versionSuffix) { version += "-$versionSuffix" } if(!npmName) npmName = name; if (hasProperty('release')) { isRelease = (release != 'false') } else { isRelease = (tagDistance == 0); } 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") def targetLibs = [ "es3" : ["es5", "es2015.promise", "es2015.symbol", "dom", "scripthost"], "es5" : ["es5", "es2015.promise", "es2015.symbol", "dom", "scripthost"] ]; ext { packageName = "@$npmScope/$npmName" } def srcDir = "$projectDir/src" def typingsDir = "$srcDir/typings" def distDir = "$buildDir/dist" def testDir = "$buildDir/test" def jstarget = target; sources { } typescript { compilerOptions { lib = targetLibs[target] ?: [target, "dom"] target = jstarget module = jsmodule types = [] } tsLintCmd = "tslint" esLintCmd = "eslint" npmCmd = "npm" } task printVersion { doLast { println "version: $version"; println "isRelease: $isRelease, tagDistance: $tagDistance"; println "packageName: $packageName"; println "bundle: ${pack.outputs.files.join(',')}"; println "target: $target"; println "module: $jsmodule"; } } task clean { doLast { delete buildDir delete typingsDir } } 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"; } } /* 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" } */ task markRelease(type: Exec) { onlyIf { tagDistance > 1 } commandLine "hg", "tag", "v$version"; }