diff --git a/build-logic/convention/build.gradle.kts b/build-logic/convention/build.gradle.kts new file mode 100644 index 0000000000..0daf172141 --- /dev/null +++ b/build-logic/convention/build.gradle.kts @@ -0,0 +1,33 @@ +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +plugins { + `kotlin-dsl` +} + +group = "dev.mobile.maestro" + +dependencies { + compileOnly(libs.kotlin.gradlePlugin) +} + +// Configure the build-logic plugins to target JDK 17 +// This matches the JDK used to build the project, and is not related to what is running on device. +// java { +// sourceCompatibility = JavaVersion.VERSION_17 +// targetCompatibility = JavaVersion.VERSION_17 +// } + +// kotlin { +// compilerOptions { +// jvmTarget = JvmTarget.JVM_17 +// } +// } + +gradlePlugin { + plugins { + register("jvmLibrary") { + id = "maestro.jvm.library" + implementationClass = "dev.mobile.maestro.JvmLibraryConventionPlugin" + } + } +} diff --git a/build-logic/convention/src/main/kotlin/dev/mobile/maestro/JvmLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/dev/mobile/maestro/JvmLibraryConventionPlugin.kt new file mode 100644 index 0000000000..df6a5b6ec1 --- /dev/null +++ b/build-logic/convention/src/main/kotlin/dev/mobile/maestro/JvmLibraryConventionPlugin.kt @@ -0,0 +1,37 @@ +package dev.mobile.maestro + +import org.gradle.api.JavaVersion +import org.gradle.api.Plugin +import org.gradle.api.Project +import org.gradle.api.plugins.JavaPluginExtension +import org.gradle.api.tasks.compile.JavaCompile +import org.gradle.kotlin.dsl.configure +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile + +class JvmLibraryConventionPlugin : Plugin { + override fun apply(target: Project) { + with(target) { + with(pluginManager) { + apply("org.jetbrains.kotlin.jvm") + libs.plugins.mavenPublish + } + + extensions.configure { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } + + tasks.withType(JavaCompile::class.java).configureEach { + options.release.set(8) + } + + tasks.withType(KotlinCompile::class.java).configureEach { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_1_8) + freeCompilerArgs.addAll("-Xjdk-release=1.8") + } + } + } + } +} diff --git a/build-logic/convention/src/main/kotlin/dev/mobile/maestro/ProjectExtensions.kt b/build-logic/convention/src/main/kotlin/dev/mobile/maestro/ProjectExtensions.kt new file mode 100644 index 0000000000..0ebee8f1cf --- /dev/null +++ b/build-logic/convention/src/main/kotlin/dev/mobile/maestro/ProjectExtensions.kt @@ -0,0 +1,9 @@ +package dev.mobile.maestro + +import org.gradle.api.Project +import org.gradle.api.artifacts.VersionCatalog +import org.gradle.api.artifacts.VersionCatalogsExtension +import org.gradle.kotlin.dsl.getByType + +val Project.libs + get(): VersionCatalog = extensions.getByType().named("libs") diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 0000000000..c55e37ec2f --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,15 @@ +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } + + versionCatalogs { + create("libs") { + from(files("../gradle/libs.versions.toml")) + } + } +} + +rootProject.name = "build-logic" +include(":convention") diff --git a/example/build.gradle.kts b/example/build.gradle.kts index d19b5139aa..29ba8a5c09 100644 --- a/example/build.gradle.kts +++ b/example/build.gradle.kts @@ -1,4 +1,5 @@ -import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask +import org.jetbrains.kotlin.gradle.dsl.JvmTarget +import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { application @@ -10,8 +11,14 @@ application { mainClass.set("MainKt") } -tasks.named("compileKotlin", KotlinCompilationTask::class.java) { +java { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 +} + +tasks.withType(KotlinCompile::class.java).configureEach { compilerOptions { + jvmTarget = JvmTarget.JVM_1_8 freeCompilerArgs.addAll("-Xjdk-release=1.8") } } @@ -21,4 +28,3 @@ dependencies { implementation("dev.mobile:maestro-orchestra:1.38.1") implementation("dev.mobile:maestro-ios:1.38.1") } - diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index bd85143c14..1bb1c73583 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -7,7 +7,7 @@ # https://blog.gradle.org/best-practices-naming-version-catalog-entries [versions] -androidPlugin = "7.4.2" +androidPlugin = "8.2.2" androidxEspresso = "3.6.1" androidxTestJunit = "1.2.1" androidxUiautomator = "2.3.0" @@ -112,6 +112,10 @@ square-mock-server = { module = "com.squareup.okhttp3:mockwebserver", version.re wiremock-jre8 = { module = "com.github.tomakehurst:wiremock-jre8", version.ref = "wiremock" } logback = { module = "ch.qos.logback:logback-classic", version.ref = "logback" } +# Dependencies of the included build-logic +kotlin-gradlePlugin = { group = "org.jetbrains.kotlin", name = "kotlin-gradle-plugin", version.ref = "kotlin" } +mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.19.0" } + [bundles] [plugins] @@ -121,6 +125,9 @@ protobuf = { id = "com.google.protobuf", version.ref = "googleProtobufPlugin" } kotlin-jvm = { id = "org.jetbrains.kotlin.jvm", version.ref = "kotlin" } kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } kotlin-serialization = { id = "org.jetbrains.kotlin.plugin.serialization", version.ref = "kotlin" } -mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.19.0" } +mavenPublish = { id = "com.vanniktech.maven.publish", version = "0.19.0" } # TODO: Delete from here jreleaser = { id = "org.jreleaser", version = "1.13.1" } shadow = { id = "com.github.johnrengelman.shadow", version = "7.1.2" } + +# Plugins defined by this project +maestro-jvm-library = { id = "maestro.jvm.library", version = "unspecified" } diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index fa0f661b9d..bdbb757b04 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,7 +1,7 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionSha256Sum=bed1da33cca0f557ab13691c77f38bb67388119e4794d113e051039b80af9bb1 -distributionUrl=https\://services.gradle.org/distributions/gradle-7.6.4-bin.zip +distributionSha256Sum=5b9c5eb3f9fc2c94abaea57d90bd78747ca117ddbbf96c859d3741181a12bf2a +distributionUrl=https\://services.gradle.org/distributions/gradle-8.10-bin.zip networkTimeout=10000 zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists diff --git a/maestro-ai/build.gradle.kts b/maestro-ai/build.gradle.kts index 75f9f35d33..165a10cbd5 100644 --- a/maestro-ai/build.gradle.kts +++ b/maestro-ai/build.gradle.kts @@ -4,9 +4,8 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask plugins { application id("maven-publish") - alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.maestro.jvm.library) alias(libs.plugins.kotlin.serialization) - alias(libs.plugins.mavenPublish) } application { diff --git a/maestro-client/src/main/resources/maestro-app.apk b/maestro-client/src/main/resources/maestro-app.apk index 4af2d623e9..a0b536e482 100644 Binary files a/maestro-client/src/main/resources/maestro-app.apk and b/maestro-client/src/main/resources/maestro-app.apk differ diff --git a/maestro-orchestra/build.gradle.kts b/maestro-orchestra/build.gradle.kts index e63776015b..873cd6a668 100644 --- a/maestro-orchestra/build.gradle.kts +++ b/maestro-orchestra/build.gradle.kts @@ -3,7 +3,7 @@ import org.jetbrains.kotlin.gradle.tasks.KotlinCompilationTask plugins { id("maven-publish") - alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.maestro.jvm.library) alias(libs.plugins.kotlin.serialization) alias(libs.plugins.mavenPublish) } diff --git a/maestro-utils/build.gradle.kts b/maestro-utils/build.gradle.kts index 7a6e96c372..68bda2e349 100644 --- a/maestro-utils/build.gradle.kts +++ b/maestro-utils/build.gradle.kts @@ -4,6 +4,7 @@ import com.vanniktech.maven.publish.SonatypeHost plugins { id("maven-publish") alias(libs.plugins.kotlin.jvm) + alias(libs.plugins.maestro.jvm.library) alias(libs.plugins.mavenPublish) } diff --git a/settings.gradle.kts b/settings.gradle.kts index 8d1a50ae39..f06e9910ab 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,6 +1,7 @@ rootProject.name = "maestro" pluginManagement { + includeBuild("build-logic") repositories { google() mavenCentral()