import org.jetbrains.kotlin.gradle.tasks.KotlinCompile

buildscript {
    repositories {
        google()
        jcenter()
        maven {
            url("https://androidx.dev/dokka/builds/7299536/artifacts/repository")
            metadataSources {
                mavenPom()
                artifact()
            }
        }
    }

    dependencies {
        classpath(libs.androidGradlePlugin)
        classpath(libs.kotlinGradlePlugin)
        classpath(libs.dokkaGradlePlugin)
    }
}

allprojects {
    repositories {
        google()
        mavenCentral()
        jcenter()
        maven {
            url("https://androidx.dev/metalava/builds/7255182/artifacts/repo/m2repository")
            metadataSources {
                mavenPom()
                artifact()
            }
        }
        maven {
            url("https://androidx.dev/dokka/builds/7299536/artifacts/repository")
            metadataSources {
                mavenPom()
                artifact()
            }
        }
    }
    tasks.withType(KotlinCompile).configureEach {
        kotlinOptions {
            jvmTarget = "1.8"
            freeCompilerArgs += [
                    "-Werror",
                    "-Xskip-runtime-version-check",
                    // Allow `@OptIn` and `@UseExperimental`
                    "-Xopt-in=kotlin.RequiresOptIn"
            ]
        }
    }
}
