plugins {
    id 'org.springframework.boot' version '3.0.0-M5'
    id 'io.spring.dependency-management' version '1.0.14.RELEASE'
    id "checkstyle"
    id 'java'
}

group = "run.halo.app"
sourceCompatibility = JavaVersion.VERSION_17

checkstyle {
    toolVersion = "9.3"
    showViolations = false
    ignoreFailures = false
}

repositories {
    maven { url 'https://maven.aliyun.com/repository/public/' }
    maven { url 'https://maven.aliyun.com/repository/spring/' }
    maven { url 'https://repo.spring.io/milestone' }

    mavenLocal()
    mavenCentral()

}


configurations {
    compileOnly {
        extendsFrom annotationProcessor
    }
}

bootJar {
    manifest {
        attributes "Implementation-Title": "Halo Application",
                "Implementation-Version": archiveVersion
    }
}

ext {
    commonsLang3 = "3.12.0"
    base62 = "0.1.3"
    pf4j = '3.7.0'
    javaDiffUtils = "4.12"
    guava = "31.1-jre"
    jsoup = '1.15.3'
    jsonPatch = "1.13"
}

dependencies {
    implementation 'org.springframework.boot:spring-boot-starter-actuator'
    implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
    implementation 'org.springframework.boot:spring-boot-starter-mail'
    implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
    implementation 'org.springframework.boot:spring-boot-starter-webflux'
    implementation 'org.springframework.boot:spring-boot-starter-validation'
    implementation 'org.springframework.boot:spring-boot-starter-data-r2dbc'

    // Spring Security
    implementation 'org.springframework.boot:spring-boot-starter-security'
    implementation 'org.springframework.security:spring-security-oauth2-jose'
    implementation 'org.springframework.security:spring-security-oauth2-resource-server'

    implementation 'org.springdoc:springdoc-openapi-starter-webflux-ui:2.0.0-M6'
    implementation 'org.openapi4j:openapi-schema-validator:1.0.7'
    implementation "net.bytebuddy:byte-buddy"

    implementation "org.apache.commons:commons-lang3:$commonsLang3"
    implementation "io.seruco.encoding:base62:$base62"
    implementation "org.pf4j:pf4j:$pf4j"
    implementation "com.google.guava:guava:$guava"
    implementation "org.jsoup:jsoup:$jsoup"
    implementation "io.github.java-diff-utils:java-diff-utils:$javaDiffUtils"
    implementation "org.springframework.integration:spring-integration-core"
    implementation "com.github.java-json-tools:json-patch:$jsonPatch"

    compileOnly 'org.projectlombok:lombok'
    testCompileOnly 'org.projectlombok:lombok'

    annotationProcessor "org.springframework.boot:spring-boot-configuration-processor"

    developmentOnly 'org.springframework.boot:spring-boot-devtools'

    // R2DBC
    // Currently, official doesn't support mssql and mariadb yet until drivers are available.
    // See https://github.com/spring-projects/spring-data-relational/commit/ee6c2c89b5c433748b22a79cf40dc8e01142caa3
    // for more.
    runtimeOnly 'io.r2dbc:r2dbc-h2'
    runtimeOnly 'com.github.jasync-sql:jasync-r2dbc-mysql:2.1.5'
    runtimeOnly 'org.postgresql:postgresql'
    runtimeOnly 'org.postgresql:r2dbc-postgresql'

    annotationProcessor 'org.projectlombok:lombok'
    testAnnotationProcessor 'org.projectlombok:lombok'

    testImplementation 'org.springframework.boot:spring-boot-starter-test'
    testImplementation 'org.springframework.security:spring-security-test'
    testImplementation 'io.projectreactor:reactor-test'
}

tasks.named('test') {
    useJUnitPlatform()
}