plugins { id 'application' id 'com.github.ben-manes.versions' version '0.41.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.10' id 'org.jetbrains.kotlin.kapt' version '1.6.10' id 'org.jetbrains.kotlinx.kover' version '0.4.4' 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.1', pmd : '6.41.0', ] repositories { mavenLocal() mavenCentral() maven { url 'https://jitpack.io' } maven { url 'https://oss.sonatype.org/content/repositories/snapshots' } } dependencies { kapt(semverProcessor) compileOnly(semverProcessor) implementation 'com.github.pircbotx:pircbotx:-SNAPSHOT' 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' implementation 'com.google.code.gson:gson:2.8.9' implementation 'com.google.guava:guava:31.0.1-jre' implementation(platform("org.jetbrains.kotlin:kotlin-bom")) implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-core:1.6.0' implementation 'org.slf4j:slf4j-api:1.7.33' 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:20211205' 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') }