From c76854df2920045329d81ec79e836ddacdb5e02a Mon Sep 17 00:00:00 2001 From: "Sergey C." <119192+technoir42@users.noreply.github.com> Date: Wed, 31 Jul 2024 18:11:44 +0100 Subject: [PATCH] Simplify deployment (#68) * Include plugin build in the sample project * Simplify deployment --- .buildsystem/deploy-sonatype.sh | 30 ---------------- .github/workflows/ci.yml | 4 +-- README.md | 13 +++---- build.gradle.kts | 37 +++++++++---------- buildSrc/src/main/kotlin/Deployment.kt | 49 +++----------------------- sample/gradle.properties | 3 +- sample/settings.gradle | 10 +++--- settings.gradle.kts | 11 +++++- 8 files changed, 47 insertions(+), 110 deletions(-) delete mode 100755 .buildsystem/deploy-sonatype.sh diff --git a/.buildsystem/deploy-sonatype.sh b/.buildsystem/deploy-sonatype.sh deleted file mode 100755 index 51e7af64c..000000000 --- a/.buildsystem/deploy-sonatype.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -cd $(dirname $0)/.. - - -if [ -z "$SONATYPE_USERNAME" ]; then - echo "error: please set SONATYPE_USERNAME environment variable" - exit 1 -fi - -if [ -z "$SONATYPE_PASSWORD" ]; then - echo "error: please set SONATYPE_PASSWORD environment variable" - exit 1 -fi - -if [ -z "$GPG_PASSPHRASE" ]; then - echo "error: please set GPG_PASSPHRASE environment variable" - exit 1 -fi - -DTASK=":publishDefaultPublicationToOSSHRRepository" - -TARGETS=":core$DTASK :vendor:vendor-android$DTASK :marathon-gradle-plugin$DTASK :report:execution-timeline$DTASK :report:html-report$DTASK" - -if [ -z "$TRAVIS_TAG" ]; then - echo "not on a tag -> deploy snapshot version" - ./gradlew $TARGETS -PreleaseMode=SNAPSHOT -else - echo "on a tag -> deploy release version $TRAVIS_TAG" - ./gradlew $TARGETS -PreleaseMode=RELEASE -fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 4d73a2026..a88747789 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -26,6 +26,6 @@ jobs: restore-keys: | ${{ runner.os }}-gradle- - name: Build - run: ./gradlew build publishAllPublicationsToLocalRepository + run: ./gradlew build - name: Build sample - run: ./gradlew -p sample marathonDebugAndroidTest --dry-run + run: ./gradlew -p sample marathon --dry-run diff --git a/README.md b/README.md index fbe9bd8b3..45cc7582b 100644 --- a/README.md +++ b/README.md @@ -1,25 +1,20 @@ # Marathon -Cross-platform test runner for Android projects +Test runner for Android projects ## Main focus - **stability** of test execution adjusting for flakiness in the environment and in the tests. - **performance** using high parallelization (handling dozens of devices) -## Documentation -Please check the official [documentation](https://malinskiy.github.io/marathon/) for installation, configuration and more - -
- ### Testing Local Changes If you want to make a small update and test it locally before pushing a branch, you can follow these steps: - make sure you have been grated access to the repo -- clone the repo on your local machine and do a build ```./gradlew clean assemble``` +- clone the repo on your local machine and build ```./gradlew build``` - make your changes and verify that the tests pass - deploy to local maven with ```./gradlew publishToMavenLocal -PreleaseMode=SNAPSHOT``` -- to use the artifact in your other Repo, make sure you set `mavenLocal()` before other repositories in your buildScript node in settings.gradle +- to use the artifact in your other Repo, make sure you set `mavenLocal()` before other repositories in your `pluginManagement` node in settings.gradle - to check that the deploy stage was successful, check the pom file in your local maven directory (e.g. `vim ~/.m2/repository/marathon/marathon.gradle.plugin/0.5.4-SNAPSHOT/marathon.gradle.plugin-0.5.4-SNAPSHOT.pom`) -- note that the artifact name to import will begin with "com.malinskiy.marathon" (e.g. ```implementation "com.malinskiy.marathon:marathon-gradle-plugin:0.5.4-SNAPSHOT"```) +- note that the artifact name to import will begin with "com.github.badoo.marathon" (e.g. ```implementation "com.github.badoo.marathon:marathon-gradle-plugin:0.5.4-SNAPSHOT"```) License ------- diff --git a/build.gradle.kts b/build.gradle.kts index 0f322bb92..5dd48a1c8 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ import io.gitlab.arturbosch.detekt.extensions.DetektExtension +import org.jetbrains.kotlin.gradle.dsl.JvmTarget import org.jetbrains.kotlin.gradle.tasks.KotlinCompile plugins { @@ -17,32 +18,32 @@ configure { } allprojects { - group = "com.malinskiy.marathon" + group = "com.github.badoo.marathon" - repositories { - mavenCentral() - google() - maven { url = uri("https://jitpack.io") } + plugins.withId("org.jetbrains.kotlin.jvm") { + dependencies.add("implementation", dependencies.platform(Libraries.kotlinBom)) + dependencies.add("implementation", dependencies.platform(Libraries.kotlinCoroutinesBom)) } - project.plugins.withId("org.jetbrains.kotlin.jvm") { - project.dependencies.add("implementation", project.dependencies.platform(Libraries.kotlinBom)) - project.dependencies.add("implementation", project.dependencies.platform(Libraries.kotlinCoroutinesBom)) - } - - extensions.findByType()?.run { - sourceCompatibility = JavaVersion.VERSION_17 - targetCompatibility = JavaVersion.VERSION_17 + plugins.withId("java") { + extensions.configure { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 + withJavadocJar() + withSourcesJar() + } } - project.tasks.withType().configureEach { - kotlinOptions { - jvmTarget = "17" - freeCompilerArgs += "-opt-in=kotlin.RequiresOptIn" + tasks.withType().configureEach { + compilerOptions { + jvmTarget.set(JvmTarget.JVM_17) + freeCompilerArgs.addAll( + "-opt-in=kotlin.RequiresOptIn" + ) } } } tasks.register("clean") { - delete(project.layout.buildDirectory) + delete(layout.buildDirectory) } diff --git a/buildSrc/src/main/kotlin/Deployment.kt b/buildSrc/src/main/kotlin/Deployment.kt index e87d1a9b9..1bc6fea42 100644 --- a/buildSrc/src/main/kotlin/Deployment.kt +++ b/buildSrc/src/main/kotlin/Deployment.kt @@ -1,32 +1,23 @@ import org.gradle.api.Project -import org.gradle.api.plugins.JavaPluginExtension import org.gradle.api.publish.PublishingExtension import org.gradle.api.publish.maven.MavenPom import org.gradle.api.publish.maven.MavenPublication import org.gradle.kotlin.dsl.configure -import org.gradle.kotlin.dsl.creating +import org.gradle.kotlin.dsl.create import org.gradle.kotlin.dsl.extra import org.gradle.kotlin.dsl.get -import org.gradle.kotlin.dsl.getValue import org.gradle.kotlin.dsl.provideDelegate import org.gradle.kotlin.dsl.the import org.gradle.plugins.signing.SigningExtension import java.net.URI object Deployment { - val user = System.getenv("SONATYPE_USERNAME") - val password = System.getenv("SONATYPE_PASSWORD") val githubUser = System.getenv("GITHUB_MAVEN_USERNAME") val githubPassword = System.getenv("GITHUB_MAVEN_PASSWORD") var releaseMode: String? = null var versionSuffix: String? = null - var deployUrl: String? = null - val snapshotDeployUrl = System.getenv("SONATYPE_SNAPSHOTS_URL") - ?: "https://oss.sonatype.org/content/repositories/snapshots/" - val releaseDeployUrl = System.getenv("SONATYPE_RELEASES_URL") - ?: "https://oss.sonatype.org/service/local/staging/deploy/maven2/" - val githubDeployUrl = "https://maven.pkg.github.com/Malinskiy" + val githubDeployUrl = "https://maven.pkg.github.com/badoo" fun initialize(project: Project) { val releaseMode: String? by project @@ -37,10 +28,6 @@ object Deployment { Deployment.releaseMode = releaseMode Deployment.versionSuffix = versionSuffix - Deployment.deployUrl = when (releaseMode) { - "RELEASE" -> Deployment.releaseDeployUrl - else -> Deployment.snapshotDeployUrl - } initializePublishing(project) initializeSigning(project) @@ -51,40 +38,14 @@ object Deployment { project.plugins.apply("maven-publish") - val javaPlugin = project.the(JavaPluginExtension::class) - - val sourcesJar by project.tasks.creating(org.gradle.api.tasks.bundling.Jar::class) { - archiveClassifier.set("sources") - from(javaPlugin.sourceSets["main"].allSource) - } - val javadocJar by project.tasks.creating(org.gradle.api.tasks.bundling.Jar::class) { - archiveClassifier.set("javadoc") - from(javaPlugin.docsDir) - dependsOn("javadoc") - } - project.configure { publications { - create("default", MavenPublication::class.java) { + create("default") { Deployment.customizePom(project, pom) from(project.components["java"]) - artifact(sourcesJar) - artifact(javadocJar) } } repositories { - maven { - name = "Local" - setUrl("${project.rootDir}/build/repository") - } - maven { - name = "OSSHR" - credentials { - username = Deployment.user - password = Deployment.password - } - url = URI.create(Deployment.deployUrl) - } maven { name = "GitHub" credentials { @@ -116,7 +77,7 @@ object Deployment { fun customizePom(project: Project, pom: MavenPom?) { pom?.apply { name.set(project.name) - url.set("https://github.com/Malinskiy/marathon") + url.set("https://github.com/badoo/marathon") description.set("Android test runner") licenses { @@ -135,7 +96,7 @@ object Deployment { } scm { - url.set("https://github.com/Malinskiy/marathon") + url.set("https://github.com/badoo/marathon") } } } diff --git a/sample/gradle.properties b/sample/gradle.properties index 94f6abb87..fff179c40 100644 --- a/sample/gradle.properties +++ b/sample/gradle.properties @@ -1,5 +1,4 @@ android.useAndroidX=true -androidPluginVersion=8.5.0 +androidPluginVersion=8.5.1 kotlinVersion=1.9.24 -marathonVersion=0.5.4-SNAPSHOT diff --git a/sample/settings.gradle b/sample/settings.gradle index a3183304d..44e0dd36c 100644 --- a/sample/settings.gradle +++ b/sample/settings.gradle @@ -1,16 +1,17 @@ pluginManagement { repositories { - google() - maven { url "$rootDir/../build/repository" } gradlePluginPortal() + mavenCentral() + google() maven { url "https://jitpack.io" } } plugins { id "com.android.application" version "$androidPluginVersion" id "com.android.library" version "$androidPluginVersion" id "org.jetbrains.kotlin.android" version "$kotlinVersion" - id "marathon" version "$marathonVersion" } + + includeBuild("..") } dependencyResolutionManagement { @@ -20,6 +21,7 @@ dependencyResolutionManagement { } } -rootProject.name = "multi-module" +rootProject.name = "sample" + include ":app" include ":library" diff --git a/settings.gradle.kts b/settings.gradle.kts index e14d32702..5de6dbe20 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,7 +1,7 @@ pluginManagement { repositories { - maven { url = uri("$rootDir/build/repository") } gradlePluginPortal() + mavenCentral() } plugins { id("org.jetbrains.kotlin.jvm") version "1.9.22" @@ -10,7 +10,16 @@ pluginManagement { } } +dependencyResolutionManagement { + repositories { + mavenCentral() + google() + maven { url = uri("https://jitpack.io") } + } +} + rootProject.name = "marathon" + include("core") include("vendor:vendor-android:base") include("vendor:vendor-android:ddmlib")