plugins {
    id 'java'
    id 'org.springframework.boot'
    id 'org.jetbrains.kotlin.jvm'
    id 'org.jetbrains.kotlin.plugin.jpa'
    id 'org.jetbrains.kotlin.plugin.spring'
    id "com.palantir.git-version" version "0.12.0-rc2"
    id 'com.palantir.docker' version '0.22.1'
}

apply plugin: 'java'
apply plugin: 'io.spring.dependency-management'

payapiVersion = gitVersion()

group = 'com.supwisdom'
version = '1'
sourceCompatibility = jdkVersion
def startClass = 'com.supwisdom.dlpay.PayApiApplicationKt'

println("Build version: $payapiVersion")
repositories {
    mavenCentral()
}

bootJar {
    mainClassName = startClass
    manifest {
        attributes('Payapi-Version': payapiVersion)
    }
}

jar {
    baseName = 'payapi'
}

docker {
    name 'harbor.supwisdom.com/dali/payapi:' + version
    println(jar.archivePath)
    files jar.archivePath
}

docker.dependsOn(jar)

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-web'
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.springframework.boot:spring-boot-autoconfigure'
    implementation 'org.springframework.security:spring-security-oauth2-jose'
    implementation 'org.springframework.security:spring-security-oauth2-client'
    implementation 'org.springframework.security:spring-security-oauth2-jose'
    implementation 'org.springframework.security.oauth.boot:spring-security-oauth2-autoconfigure:2.1.5.RELEASE'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.session:spring-session-data-redis'
    implementation 'org.springframework.boot:spring-boot-starter-cache'
    implementation 'org.springframework.social:spring-social-web:1.1.6.RELEASE'
    implementation 'org.jetbrains.kotlin:kotlin-reflect'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'commons-codec:commons-codec:1.12'

    implementation 'org.springframework.cloud:spring-cloud-starter-consul-discovery:2.1.2.RELEASE'

    implementation 'org.thymeleaf.extras:thymeleaf-extras-springsecurity5'

    runtime("org.springframework.boot:spring-boot-devtools")

    implementation 'org.postgresql:postgresql:42.2.5'
    implementation 'com.fasterxml.jackson.module:jackson-module-kotlin'
    implementation 'com.jcabi:jcabi-manifests:1.1'
    implementation 'org.bitbucket.b_c:jose4j:0.6.3'
    implementation 'io.github.microutils:kotlin-logging:1.6.26'
    implementation 'org.slf4j:slf4j-parent:1.7.26'
    implementation 'com.github.penggle:kaptcha:2.3.2'
    implementation group: 'com.google.code.gson', name: 'gson', version: '2.8.5'
    implementation group: 'com.sun.jersey', name: 'jersey-client', version: '1.19'
    implementation group: 'javax.servlet', name: 'jstl', version: '1.2'
    implementation group: 'taglibs', name: 'standard', version: '1.1.2'
    implementation group: 'commons-codec', name: 'commons-codec', version: '1.6'
    implementation files('libs/ojdbc6.jar')
    implementation 'commons-dbcp:commons-dbcp:1.4'

    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"
    annotationProcessor 'org.projectlombok:lombok:1.18.8'
    compileOnly 'org.projectlombok:lombok:1.18.8'

//    providedRuntime 'org.springframework.boot:spring-boot-starter-tomcat'
    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'io.rest-assured:rest-assured:3.3.0'
    testImplementation 'io.rest-assured:spring-mock-mvc:3.3.0'
    testImplementation 'org.hamcrest:hamcrest:2.1'
}

compileKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = jdkVersion
    }
}

compileTestKotlin {
    kotlinOptions {
        freeCompilerArgs = ['-Xjsr305=strict']
        jvmTarget = jdkVersion
    }
}
