plugins { id 'application' id 'com.github.ben-manes.versions' version '0.42.0' id 'idea' id 'io.gitlab.arturbosch.detekt' version '1.19.0' id 'java' id 'net.thauvin.erik.gradle.semver' version '1.0.4' id 'org.jetbrains.kotlin.jvm' version '1.6.20' id 'org.jetbrains.kotlin.kapt' version '1.6.20' id 'org.jetbrains.kotlinx.kover' version '0.5.0' id 'org.sonarqube' version '3.3' id 'pmd' } defaultTasks 'deploy' final def packageName = 'net.thauvin.erik.mobibot' final def deployDir = 'deploy' final def semverProcessor = "net.thauvin.erik:semver:1.2.0" def isNonStable = { String version -> def stableKeyword = ['RELEASE', 'FINAL', 'GA', 'JRE'].any { it -> version.toUpperCase().contains(it) } def regex = /^[0-9,.v-]+(-r)?$/ return !stableKeyword && !(version ==~ regex) } mainClassName = packageName + '.Mobibot' ext.versions = [ log4j: '2.17.2', pmd : '6.44.0', ] repositories { mavenLocal() mavenCentral() maven { url 'https://jitpack.io' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } dependencies { kapt(semverProcessor) compileOnly(semverProcessor) // PircBotX implementation 'com.github.pircbotx:pircbotx:-SNAPSHOT' // Commons implementation 'org.apache.commons:commons-lang3:3.12.0' implementation 'org.apache.commons:commons-text:1.9' implementation 'commons-cli:commons-cli:1.5.0' implementation 'commons-codec:commons-codec:1.15' implementation 'commons-net:commons-net:3.8.0' // Google implementation 'com.google.code.gson:gson:2.9.0' implementation 'com.google.guava:guava:31.1-jre' // Kotlin implementation platform('org.jetbrains.kotlin:kotlin-bom') implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8' implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0' // Logging implementation 'org.slf4j:slf4j-api:1.7.36' implementation "org.apache.logging.log4j:log4j-api:$versions.log4j" implementation "org.apache.logging.log4j:log4j-core:$versions.log4j" implementation "org.apache.logging.log4j:log4j-slf4j-impl:$versions.log4j" implementation 'com.rometools:rome:1.18.0' implementation 'com.squareup.okhttp3:okhttp:4.9.3' implementation 'net.aksingh:owm-japis:2.5.3.0' implementation 'net.objecthunter:exp4j:0.4.8' implementation 'org.json:json:20220320' implementation 'org.jsoup:jsoup:1.14.3' implementation 'org.twitter4j:twitter4j-core:4.0.7' implementation 'net.thauvin.erik:cryptoprice:0.9.0' implementation 'net.thauvin.erik:pinboard-poster:1.0.3' testImplementation 'com.willowtreeapps.assertk:assertk-jvm:0.25' // testImplementation 'org.mockito.kotlin:mockito-kotlin:4.0.0' // testImplementation "org.mockito:mockito-core:4.0.0" testImplementation 'org.testng:testng:7.5' } test { testLogging { exceptionFormat = 'full' events('skipped', 'failed') } useTestNG() { options.suites('src/test/resources/testng.xml') } } java { sourceCompatibility = JavaVersion.VERSION_11 targetCompatibility = JavaVersion.VERSION_11 } kapt { includeCompileClasspath = false arguments { arg('semver.project.dir', projectDir) } } tasks.withType(JavaCompile) { options.encoding = 'UTF-8' } compileJava { dependsOn 'incrementBuildMeta' options.compilerArgs += ['-Xlint:unchecked', '-Xlint:deprecation'] } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = java.targetCompatibility.toString() } } tasks.named("dependencyUpdates").configure { rejectVersionIf { isNonStable(it.candidate.version) } } pmd { toolVersion = versions.pmd ignoreFailures = true ruleSets = [] ruleSetFiles = files("${projectDir}/config/pmd.xml") consoleOutput = true } detekt { //toolVersion = "main-SNAPSHOT" baseline = file("${projectDir}/config/detekt/baseline.xml") } jar { manifest.attributes('Main-Class': mainClassName, 'Class-Path': '. ./lib/' + configurations.runtimeClasspath.collect { it.getName() }.join(' ./lib/')) archiveVersion.set("") exclude('log4j2.xml') } clean { doLast { project.delete(fileTree(deployDir)) } } run { args('-h') } incrementBuildMeta { doFirst { if (!System.getenv('CI')) { buildMeta = sprintf("%03d", (buildMeta as Integer) + 1) } else { println 'No increment on CIs.' } } } sonarqube { properties { property('sonar.organization', 'ethauvin-github') property('sonar.projectKey', 'ethauvin_mobibot') property('sonar.host.url', 'https://sonarcloud.io') property('sonar.coverage.jacoco.xmlReportPaths', "${project.buildDir}/reports/kover/report.xml") } } tasks.sonarqube { dependsOn 'koverReport' } task copyToDeploy(type: Copy) { from('properties', jar) into deployDir } task copyToDeployLib(type: Copy) { from(configurations.runtimeClasspath) { exclude 'annotations-*.jar' } into(deployDir + '/lib') } task deploy { description = "Copies all needed files to the ${deployDir} directory." group = 'Publishing' dependsOn(clean, build, jar) outputs.dir deployDir inputs.files(copyToDeploy, copyToDeployLib) doLast { file(deployDir + '/logs').mkdir() } mustRunAfter clean } task release { group = 'Publishing' description = 'Releases new version.' dependsOn(wrapper, 'deploy') }