plugins {
    id 'java'
    id("org.jetbrains.gradle.plugin.idea-ext") version "1.0"
    id "me.champeau.jmh" version "0.6.6"

    // This is a workaround for a bug in the Jib plugin that causes it to stall randomly
    // https://github.com/GoogleContainerTools/jib/issues/3347
    id 'com.google.cloud.tools.jib' version '3.4.5' apply(false)
}

group 'marginalia'
version 'SNAPSHOT'

compileJava.options.encoding = "UTF-8"
compileTestJava.options.encoding = "UTF-8"

subprojects.forEach {it ->
    // Enable preview features for the entire project

    if (it.path.contains(':code:')) {
        sourceSets.main.java.srcDirs += file('java')
        sourceSets.main.resources.srcDirs += file('resources')
        sourceSets.test.java.srcDirs += file('test')
        sourceSets.test.resources.srcDirs += file('test-resources')
    }

    it.tasks.withType(JavaCompile).configureEach {
        options.compilerArgs += ['--enable-preview']
    }
    it.tasks.withType(JavaExec).configureEach {
        jvmArgs += ['--enable-preview']
    }
    it.tasks.withType(Test).configureEach {
        jvmArgs += ['--enable-preview']
    }

    // Enable reproducible builds for the entire project
    it.tasks.withType(AbstractArchiveTask).configureEach {
        preserveFileTimestamps = false
        reproducibleFileOrder = true
    }

}

ext {
    jvmVersion = 24
    dockerImageBase='container-registry.oracle.com/graalvm/jdk:24'
    dockerImageTag='latest'
    dockerImageRegistry='marginalia'
    jibVersion = '3.4.5'
}

idea {
    module {
        // Exclude these directories from being indexed by IntelliJ
        // as they tend to bring the IDE to its knees and use up all
        // Inotify spots in a hurry
        excludeDirs.add(file("$projectDir/run/node-1"))
        excludeDirs.add(file("$projectDir/run/node-2"))
        excludeDirs.add(file("$projectDir/run/model"))
        excludeDirs.add(file("$projectDir/run/dist"))
        excludeDirs.add(file("$projectDir/run/db"))
        excludeDirs.add(file("$projectDir/run/logs"))
        excludeDirs.add(file("$projectDir/run/data"))
        excludeDirs.add(file("$projectDir/run/conf"))
        excludeDirs.add(file("$projectDir/run/test-data"))
    }
}
java {
    toolchain {
        languageVersion.set(JavaLanguageVersion.of(rootProject.ext.jvmVersion))
    }
}

