plugins {
  id 'java'
  id 'checkstyle'
  id 'org.springframework.boot' version '4.0.3'
  id 'io.spring.dependency-management' version '1.1.7'
  id 'org.graalvm.buildtools.native' version '0.11.5'
  id 'org.cyclonedx.bom' version '3.2.0'
  id 'io.spring.javaformat' version '0.0.47'
  id "io.spring.nohttp" version "0.0.11"
}

gradle.startParameter.excludedTaskNames += [ "checkFormatAot", "checkFormatAotTest" ]

group = 'org.springframework.samples'
version = '4.0.0-SNAPSHOT'

java {
  toolchain {
    languageVersion = JavaLanguageVersion.of(17)
  }
}

repositories {
  mavenCentral()
}

ext.checkstyleVersion = "12.3.1"
ext.springJavaformatCheckstyleVersion = "0.0.47"
ext.webjarsLocatorLiteVersion = "1.1.3"
ext.webjarsFontawesomeVersion = "4.7.0"
ext.webjarsBootstrapVersion = "5.3.8"

dependencies {
  implementation 'org.springframework.boot:spring-boot-starter-cache'
  implementation 'org.springframework.boot:spring-boot-starter-data-jpa'
  implementation 'org.springframework.boot:spring-boot-starter-thymeleaf'
  implementation 'org.springframework.boot:spring-boot-starter-webmvc'
  implementation 'org.springframework.boot:spring-boot-starter-validation'
  implementation 'javax.cache:cache-api'
  implementation 'jakarta.xml.bind:jakarta.xml.bind-api'
  runtimeOnly 'org.springframework.boot:spring-boot-starter-actuator'
  runtimeOnly "org.webjars:webjars-locator-lite:${webjarsLocatorLiteVersion}"
  runtimeOnly "org.webjars.npm:bootstrap:${webjarsBootstrapVersion}"
  runtimeOnly "org.webjars.npm:font-awesome:${webjarsFontawesomeVersion}"
  runtimeOnly 'com.github.ben-manes.caffeine:caffeine'
  runtimeOnly 'com.h2database:h2'
  runtimeOnly 'com.mysql:mysql-connector-j'
  runtimeOnly 'org.postgresql:postgresql'
  developmentOnly 'org.springframework.boot:spring-boot-devtools'
  testImplementation 'org.springframework.boot:spring-boot-starter-data-jpa-test'
  testImplementation 'org.springframework.boot:spring-boot-starter-restclient-test'
  testImplementation 'org.springframework.boot:spring-boot-starter-webmvc-test'
  testImplementation 'org.springframework.boot:spring-boot-testcontainers'
  testImplementation 'org.springframework.boot:spring-boot-docker-compose'
  testImplementation 'org.testcontainers:testcontainers-junit-jupiter'
  testImplementation 'org.testcontainers:testcontainers-mysql'
  checkstyle "io.spring.javaformat:spring-javaformat-checkstyle:${springJavaformatCheckstyleVersion}"
  checkstyle "com.puppycrawl.tools:checkstyle:${checkstyleVersion}"
}

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

tasks.named("cyclonedxDirectBom").configure {
  dependsOn("compileJava")
  skipConfigs = [".*[Tt]est.*"]
}

checkstyle {
  configDirectory = project.file('src/checkstyle')
  configFile = file('src/checkstyle/nohttp-checkstyle.xml')
}

checkstyleNohttp {
  configDirectory = project.file('src/checkstyle')
  configFile = file('src/checkstyle/nohttp-checkstyle.xml')
}

tasks.named("formatMain").configure { dependsOn("checkstyleMain") }
tasks.named("formatMain").configure { dependsOn("checkstyleNohttp") }

tasks.named("formatTest").configure { dependsOn("checkstyleTest") }
tasks.named("formatTest").configure { dependsOn("checkstyleNohttp") }

checkstyleAot.enabled = false
checkstyleAotTest.enabled = false

checkFormatAot.enabled = false
checkFormatAotTest.enabled = false

formatAot.enabled = false
formatAotTest.enabled = false