import com.jfrog.bintray.gradle.tasks.BintrayUploadTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import org.jetbrains.dokka.gradle.LinkMapping import java.io.FileInputStream import java.util.Properties plugins { `build-scan` jacoco java kotlin("jvm") version "1.3.21" `maven-publish` id("com.github.ben-manes.versions") version "0.21.0" id("com.jfrog.bintray") version "1.8.4" id("io.gitlab.arturbosch.detekt") version "1.0.0-RC14" id("org.jetbrains.dokka") version "0.9.18" id("org.jlleitschuh.gradle.ktlint") version "7.2.1" id("org.sonarqube") version "2.7" } group = "net.thauvin.erik" version = "1.0.1-beta" description = "Pinboard Poster for Kotlin/Java" val gitHub = "ethauvin/$name" val mavenUrl = "https://github.com/$gitHub" val deployDir = "deploy" var isRelease = "release" in gradle.startParameter.taskNames val publicationName = "mavenJava" // Load local.properties File("local.properties").apply { if (exists()) { FileInputStream(this).use { fis -> Properties().apply { load(fis) forEach { (k, v) -> extra[k as String] = v } } } } } repositories { jcenter() } dependencies { implementation(kotlin("stdlib")) implementation("com.squareup.okhttp3:okhttp:3.14.0") testImplementation("org.testng:testng:6.14.3") } detekt { input = files("src/main/kotlin") filters = ".*/resources/.*,.*/build/.*" baseline = project.rootDir.resolve("detekt-baseline.xml") } sonarqube { properties { property("sonar.projectKey", "ethauvin_pinboard-poster") property("sonar.sourceEncoding", "UTF-8") } } val sourcesJar by tasks.creating(Jar::class) { archiveClassifier.set("sources") from(sourceSets.getByName("main").allSource) } val javadocJar by tasks.creating(Jar::class) { dependsOn(tasks.dokka) from(tasks.dokka) archiveClassifier.set("javadoc") description = "Assembles a JAR of the generated Javadoc." group = JavaBasePlugin.DOCUMENTATION_GROUP } tasks { withType { useTestNG() } withType { reports { html.isEnabled = true } } withType { kotlinOptions.jvmTarget = "1.8" } withType { destination = file("$projectDir/pom.xml") } dokka { outputFormat = "html" outputDirectory = "$buildDir/javadoc" jdkVersion = 8 val mapping = LinkMapping().apply { dir = "src/main/kotlin" url = "https://github.com/ethauvin/pinboard-poster/blob/${project.version}/src/main/kotlin" suffix = "#L" } linkMappings = arrayListOf(mapping) includeNonPublic = false } "assemble" { dependsOn(sourcesJar, javadocJar) } val copyToDeploy by registering(Copy::class) { from(configurations.runtime) from(jar) into(deployDir) } register("deploy") { description = "Copies all needed files to the $deployDir directory." group = PublishingPlugin.PUBLISH_TASK_GROUP dependsOn("build") outputs.dir(deployDir) inputs.files(copyToDeploy) mustRunAfter("clean") } val gitIsDirty by registering(Exec::class) { description = "Fails if git has uncommitted changes." group = "verification" commandLine("git", "diff", "--quiet", "--exit-code") } val gitTag by registering(Exec::class) { description = "Tags the local repository with version ${project.version}" group = PublishingPlugin.PUBLISH_TASK_GROUP dependsOn(gitIsDirty) if (isRelease) { commandLine("git", "tag", "-a", project.version, "-m", "Version ${project.version}") } } "check" { dependsOn("ktlintCheck") } val bintrayUpload by existing(BintrayUploadTask::class) { dependsOn(publishToMavenLocal, gitTag) } buildScan { setTermsOfServiceUrl("https://gradle.com/terms-of-service") setTermsOfServiceAgree("yes") } register("release") { description = "Publishes version ${project.version} to Bintray." group = PublishingPlugin.PUBLISH_TASK_GROUP dependsOn("wrapper", bintrayUpload) } } fun findProperty(s: String) = project.findProperty(s) as String? bintray { user = findProperty("bintray.user") key = findProperty("bintray.apikey") publish = isRelease setPublications(publicationName) pkg.apply { repo = "maven" name = project.name desc = description websiteUrl = mavenUrl issueTrackerUrl = "$mavenUrl/issues" githubRepo = gitHub githubReleaseNotesFile = "README.md" vcsUrl = "$mavenUrl.git" setLabels("kotlin", "java", "pinboard", "poster", "bookmarks") publicDownloadNumbers = true version.apply { name = project.version as String desc = description vcsTag = project.version as String gpg.apply { sign = true } } } } publishing { publications { create(publicationName) { from(components["java"]) artifact(sourcesJar) artifact(javadocJar) pom.withXml { asNode().apply { appendNode("name", project.name) appendNode("description", project.description) appendNode("url", mavenUrl) appendNode("licenses").appendNode("license").apply { appendNode("name", "BSD 3-Clause") appendNode("url", "https://opensource.org/licenses/BSD-3-Clause") } appendNode("developers").appendNode("developer").apply { appendNode("id", "ethauvin") appendNode("name", "Erik C. Thauvin") appendNode("email", "erik@thauvin.net") } appendNode("scm").apply { appendNode("connection", "scm:git:$mavenUrl.git") appendNode("developerConnection", "scm:git:git@github.com:$gitHub.git") appendNode("url", mavenUrl) } appendNode("issueManagement").apply { appendNode("system", "GitHub") appendNode("url", "$mavenUrl/issues") } } } } } }