1*68017707SAndroid Build Coastguard Worker/* 2*68017707SAndroid Build Coastguard Worker * Copyright 2017-2018 JetBrains s.r.o. Use of this source code is governed by the Apache 2.0 license. 3*68017707SAndroid Build Coastguard Worker */ 4*68017707SAndroid Build Coastguard Worker 5*68017707SAndroid Build Coastguard Workerdef prop(name, defVal) { 6*68017707SAndroid Build Coastguard Worker def value = project.properties[name] 7*68017707SAndroid Build Coastguard Worker if (value == null) return defVal 8*68017707SAndroid Build Coastguard Worker return value 9*68017707SAndroid Build Coastguard Worker} 10*68017707SAndroid Build Coastguard Worker 11*68017707SAndroid Build Coastguard Workerdef distTag(version) { 12*68017707SAndroid Build Coastguard Worker def i = version.indexOf('-') 13*68017707SAndroid Build Coastguard Worker if (i > 0) return version.substring(i + 1) 14*68017707SAndroid Build Coastguard Worker return "latest" 15*68017707SAndroid Build Coastguard Worker} 16*68017707SAndroid Build Coastguard Worker 17*68017707SAndroid Build Coastguard Workerdef npmTemplateDir = file("$projectDir/npm") 18*68017707SAndroid Build Coastguard Workerdef npmDeployDir = file("$buildDir/npm") 19*68017707SAndroid Build Coastguard Workerdef npmDeployTag = distTag(version) 20*68017707SAndroid Build Coastguard Worker 21*68017707SAndroid Build Coastguard Workerdef authToken = prop("kotlin.npmjs.auth.token", "") 22*68017707SAndroid Build Coastguard Workerdef dryRun = prop("dryRun", "false") 23*68017707SAndroid Build Coastguard Worker 24*68017707SAndroid Build Coastguard Workerdef compileJsLegacy = tasks.hasProperty("compileKotlinJsLegacy") 25*68017707SAndroid Build Coastguard Worker ? compileKotlinJsLegacy 26*68017707SAndroid Build Coastguard Worker : compileKotlinJs 27*68017707SAndroid Build Coastguard Worker 28*68017707SAndroid Build Coastguard Workertask preparePublishNpm(type: Copy, dependsOn: [compileJsLegacy]) { 29*68017707SAndroid Build Coastguard Worker from(npmTemplateDir) { 30*68017707SAndroid Build Coastguard Worker expand (project.properties + [kotlinDependency: "\"kotlin\": \"$kotlin_version\""]) 31*68017707SAndroid Build Coastguard Worker } 32*68017707SAndroid Build Coastguard Worker from(compileJsLegacy.destinationDirectory) 33*68017707SAndroid Build Coastguard Worker into npmDeployDir 34*68017707SAndroid Build Coastguard Worker} 35*68017707SAndroid Build Coastguard Worker 36*68017707SAndroid Build Coastguard Workertask performPublishNpm(type: NpmTask, dependsOn: [preparePublishNpm]) { 37*68017707SAndroid Build Coastguard Worker workingDir = npmDeployDir 38*68017707SAndroid Build Coastguard Worker def deployArgs = ['publish', 39*68017707SAndroid Build Coastguard Worker "--//registry.npmjs.org/:_authToken=$authToken", 40*68017707SAndroid Build Coastguard Worker "--tag=$npmDeployTag"] 41*68017707SAndroid Build Coastguard Worker doFirst { 42*68017707SAndroid Build Coastguard Worker if (dryRun == "true") { 43*68017707SAndroid Build Coastguard Worker println("$npmDeployDir \$ npm arguments: $deployArgs") 44*68017707SAndroid Build Coastguard Worker args = ['pack'] 45*68017707SAndroid Build Coastguard Worker } else { 46*68017707SAndroid Build Coastguard Worker args = deployArgs 47*68017707SAndroid Build Coastguard Worker } 48*68017707SAndroid Build Coastguard Worker } 49*68017707SAndroid Build Coastguard Worker 50*68017707SAndroid Build Coastguard Worker if (authToken == "") { 51*68017707SAndroid Build Coastguard Worker enabled = false // skip npm publishing when token is not set 52*68017707SAndroid Build Coastguard Worker } 53*68017707SAndroid Build Coastguard Worker} 54*68017707SAndroid Build Coastguard Worker 55*68017707SAndroid Build Coastguard Workertask publishNpm(dependsOn: performPublishNpm) { 56*68017707SAndroid Build Coastguard Worker doFirst { 57*68017707SAndroid Build Coastguard Worker if (!performPublishNpm.enabled) { 58*68017707SAndroid Build Coastguard Worker println("NOTE: publishNpm is skipped because 'kotlin.npmjs.auth.token' is not set") 59*68017707SAndroid Build Coastguard Worker } 60*68017707SAndroid Build Coastguard Worker } 61*68017707SAndroid Build Coastguard Worker} 62*68017707SAndroid Build Coastguard Worker 63