import org.jetbrains.dokka.gradle.DokkaTask import org.jetbrains.kotlin.gradle.tasks.KotlinCompile import com.github.benmanes.gradle.versions.updates.DependencyUpdatesTask import org.gradle.api.tasks.testing.logging.TestExceptionFormat import org.gradle.api.tasks.testing.logging.TestLogEvent plugins { id("application") id("com.github.ben-manes.versions") version "0.49.0" id("io.gitlab.arturbosch.detekt") version "1.23.1" id("java") id("maven-publish") id("org.jetbrains.dokka") version "1.9.10" id("org.jetbrains.kotlinx.kover") version "0.7.4" id("org.sonarqube") version "4.4.1.3373" id("signing") kotlin("jvm") version "1.9.10" } defaultTasks(ApplicationPlugin.TASK_RUN_NAME) description = "Retrieve cryptocurrencies prices" group = "net.thauvin.erik" version = "1.0.2-SNAPSHOT" val deployDir = "deploy" val gitHub = "ethauvin/$name" val mavenUrl = "https://github.com/$gitHub" val publicationName = "mavenJava" fun isNonStable(version: String): Boolean { val stableKeyword = listOf("RELEASE", "FINAL", "GA").any { version.uppercase().contains(it) } val regex = "^[0-9,.v-]+(-r)?$".toRegex() val isStable = stableKeyword || regex.matches(version) return isStable.not() } repositories { mavenCentral() maven { url = uri("https://oss.sonatype.org/content/repositories/snapshots") } } dependencies { implementation(platform(kotlin("bom"))) implementation("org.jetbrains.kotlin:kotlin-stdlib-jdk8") implementation("com.squareup.okhttp3:okhttp:4.12.0") implementation("org.json:json:20231013") testImplementation(kotlin("test")) testImplementation("com.willowtreeapps.assertk:assertk-jvm:0.27.0") } application { mainClass.set("net.thauvin.erik.crypto.CryptoPrice") } java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 withSourcesJar() } detekt { //toolVersion = "main-SNAPSHOT" } koverReport { defaults { xml { onCheck = true } html { onCheck = true } } } sonarqube { properties { property("sonar.projectKey", "ethauvin_$name") property("sonar.organization", "ethauvin-github") property("sonar.host.url", "https://sonarcloud.io") property("sonar.sourceEncoding", "UTF-8") property("sonar.coverage.jacoco.xmlReportPaths", "${layout.buildDirectory.get()}/reports/kover/report.xml") } } val javadocJar by tasks.creating(Jar::class) { dependsOn(tasks.dokkaJavadoc) from(tasks.dokkaJavadoc) archiveClassifier.set("javadoc") } tasks { named("run") { args = listOf("BTC","ETH","LTC") } withType { rejectVersionIf { isNonStable(candidate.version) } } withType().configureEach { kotlinOptions.jvmTarget = java.targetCompatibility.toString() } withType { testLogging { exceptionFormat = TestExceptionFormat.FULL events = setOf(TestLogEvent.PASSED, TestLogEvent.SKIPPED, TestLogEvent.FAILED) } } withType().configureEach { this.jvmTarget = java.targetCompatibility.toString() } withType().configureEach { this.jvmTarget = java.targetCompatibility.toString() } withType { destination = file("$projectDir/pom.xml") } clean { doLast { project.delete(fileTree(deployDir)) } } withType().configureEach { dokkaSourceSets { named("main") { moduleName.set("CryptoPrice") } } } val copyToDeploy by registering(Copy::class) { from(configurations.runtimeClasspath) { exclude("annotations-*.jar") } from(jar) into(deployDir) } register("deploy") { description = "Copies all needed files to the $deployDir directory." group = PublishingPlugin.PUBLISH_TASK_GROUP dependsOn(clean, wrapper, build, jar) outputs.dir(deployDir) inputs.files(copyToDeploy) mustRunAfter(clean) } } publishing { publications { create(publicationName) { from(components["java"]) artifact(javadocJar) pom { name.set(project.name) description.set(project.description) url.set(mavenUrl) licenses { license { name.set("BSD 3-Clause") url.set("https://opensource.org/licenses/BSD-3-Clause") } } developers { developer { id.set("ethauvin") name.set("Erik C. Thauvin") email.set("erik@thauvin.net") url.set("https://erik.thauvin.net/") } } scm { connection.set("scm:git:https://github.com/$gitHub.git") developerConnection.set("scm:git:git@github.com:$gitHub.git") url.set(mavenUrl) } issueManagement { system.set("GitHub") url.set("$mavenUrl/issues") } } } } repositories { maven { name = "ossrh" url = if (project.version.toString().contains("SNAPSHOT")) uri("https://oss.sonatype.org/content/repositories/snapshots/") else uri("https://oss.sonatype.org/service/local/staging/deploy/maven2/") credentials(PasswordCredentials::class) } } } signing { useGpgCmd() sign(publishing.publications[publicationName]) }