mobibot/build.gradle

211 lines
5.5 KiB
Groovy

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')
}