mobibot/build.gradle
2022-09-19 01:37:36 -07:00

222 lines
5.8 KiB
Groovy

plugins {
id 'application'
id 'com.github.ben-manes.versions' version '0.42.0'
id 'idea'
id 'io.gitlab.arturbosch.detekt' version '1.21.0'
id 'java'
id 'net.thauvin.erik.gradle.semver' version '1.0.4'
id 'org.jetbrains.kotlin.jvm' version '1.7.10'
id 'org.jetbrains.kotlin.kapt' version '1.7.10'
id 'org.jetbrains.kotlinx.kover' version '0.6.0'
id 'org.sonarqube' version '3.4.0.2513'
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"
final def isCI = (System.getenv('CI') != null)
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.19.0',
pmd : '6.49.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'
implementation fileTree(dir: 'lib', include: '*.jar')
// Commons (mostly for PircBotX)
implementation 'org.apache.commons:commons-lang3:3.12.0'
implementation 'org.apache.commons:commons-text:1.9'
implementation 'commons-codec:commons-codec:1.15'
implementation 'commons-net:commons-net:3.8.0'
// Google
implementation 'com.google.code.gson:gson:2.9.1'
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.4'
implementation 'org.jetbrains.kotlinx:kotlinx-cli:0.3.5'
// Logging
implementation 'org.slf4j:slf4j-api:2.0.1'
implementation "org.apache.logging.log4j:log4j-api:$versions.log4j"
implementation "org.apache.logging.log4j:log4j-core:$versions.log4j"
implementation "org.apache.logging.log4j:log4j-slf4j2-impl:$versions.log4j"
implementation 'com.rometools:rome:1.18.0'
implementation 'com.squareup.okhttp3:okhttp:4.10.0'
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.15.3'
implementation 'org.twitter4j:twitter4j-core:4.0.7'
// Thauvin
implementation 'net.thauvin.erik:cryptoprice:1.0.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.6.1'
}
test {
useTestNG() {
if (isCI) {
excludeGroups('no-ci')
println "Excluded test groups: ${excludeGroups}"
}
}
}
tasks.withType(Test).configureEach {
testLogging {
exceptionFormat = 'full'
events('skipped', 'failed')
}
}
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'
}
tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
kotlinOptions {
jvmTarget = java.targetCompatibility.toString()
}
}
compileJava {
dependsOn 'incrementBuildMeta'
options.compilerArgs += ['-Xlint:unchecked', '-Xlint:deprecation']
}
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 {
doFirst {
project.delete(fileTree(deployDir))
}
}
run {
args('-h')
}
incrementBuildMeta {
doFirst {
if (isCI) {
println 'No increment with CI.'
} else {
buildMeta = sprintf("%03d", (buildMeta as Integer) + 1)
}
}
}
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/xml/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(assemble, jar)
outputs.dir deployDir
inputs.files(copyToDeploy, copyToDeployLib)
doLast {
file(deployDir + '/logs').mkdir()
}
mustRunAfter(clean)
}
task release {
group = 'Publishing'
description = 'Releases new version.'
dependsOn(clean, wrapper, check, deploy)
mustRunAfter clean
}