From 2ab0401456cf82b918f96e18721729cd99f8979b Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 00:47:10 -0300 Subject: [PATCH 01/38] build: update gradle from 6.9.4 to 8.14.3 --- gradle/wrapper/gradle-wrapper.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index 53b9e380..3ae1e2f1 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,5 +1,5 @@ distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists -distributionUrl=https\://services.gradle.org/distributions/gradle-6.9.4-bin.zip +distributionUrl=https\://services.gradle.org/distributions/gradle-8.14.3-bin.zip zipStoreBase=GRADLE_USER_HOME zipStorePath=wrapper/dists From 9adca7c76657d02604ca42441944982902484611 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 10:28:14 -0300 Subject: [PATCH 02/38] build: update quality gradle files --- gradle/android.quality.gradle | 61 +++++++++++++++-------------------- gradle/quality.gradle | 29 ++++++++--------- 2 files changed, 40 insertions(+), 50 deletions(-) diff --git a/gradle/android.quality.gradle b/gradle/android.quality.gradle index bb696379..9f61977f 100644 --- a/gradle/android.quality.gradle +++ b/gradle/android.quality.gradle @@ -1,3 +1,5 @@ +import com.github.spotbugs.snom.SpotBugsTask + buildscript { repositories { maven { @@ -14,11 +16,11 @@ apply plugin: "com.github.spotbugs-base" apply plugin: 'jacoco' checkstyle { - toolVersion "8.2" - configFile file("$rootDir/tools/checkstyle/google_checks.xml") + toolVersion = "8.2" + configFile = file("$rootDir/tools/checkstyle/google_checks.xml") } -task checkstyleMain(type: Checkstyle) { +tasks.register("checkstyleMain", Checkstyle) { source 'src' include '**/*.java' exclude '**/gen/**' @@ -26,11 +28,11 @@ task checkstyleMain(type: Checkstyle) { exclude '**/annotation/*.java' classpath = files() reports { - xml.enabled false - html.enabled true + xml.required.set(false) + html.required.set(true) } // Set this to true until we fix our current errors. - ignoreFailures true + ignoreFailures = true } spotbugs { @@ -38,54 +40,43 @@ spotbugs { includeFilter = file("$rootDir/tools/findbugs/findbugs.xml") } -task spotbugsMain(type: com.github.spotbugs.snom.SpotBugsTask) { - dependsOn 'assemble' +tasks.register("spotbugsMain", SpotBugsTask) { + dependsOn tasks.matching { it.name.startsWith("assemble") } // Set this to true until we fix our current errors. ignoreFailures = true effort = "max" reportLevel = "medium" - classes = fileTree("$project.buildDir/intermediates/javac/debug/classes/") - sourceDirs = fileTree('src/main/java') - auxClassPaths = files() + classes.setFrom(fileTree("build/intermediates/javac/debug/classes/")) + source.setFrom(fileTree("src/main/java")) + classpath.setFrom(files()) projectName = project.name release = VERSION_NAME - reports { - html { - enabled = true - destination = file("$buildDir/reports/spotbugs/main/spotbugs.html") - stylesheet = 'fancy-hist.xsl' - } - } + reports.html.required = true + reports.html.outputLocation = project.layout.buildDirectory.file("reports/spotbugs/main/spotbugs.html").get().asFile + reports.html.stylesheet = 'fancy-hist.xsl' } jacoco { toolVersion = '0.8.6' } -android.testOptions { - unitTests.all { - jacoco { - destinationFile = file("$buildDir/jacoco/jacocoTest.exec") - classDumpDir = file("$buildDir/jacoco/classpathdumps") - } - } -} +tasks.register("jacocoTestReport", JacocoReport) { + dependsOn "test" -task jacocoTestReport(type: JacocoReport, dependsOn: 'test') { reports { - xml.enabled false - csv.enabled false - html.enabled true - html.destination file("${buildDir}/jacocoHtml") + xml.required.set(false) + csv.required.set(false) + html.required.set(true) + html.outputLocation.set(project.layout.buildDirectory.dir("jacocoHtml")) } } // adds checkstyle task to existing check task afterEvaluate { - if (project.tasks.getByName("check")) { - check.dependsOn('checkstyleMain') - check.dependsOn('spotbugsMain') + if (tasks.named("check")) { + check.dependsOn("checkstyleMain") + check.dependsOn("spotbugsMain") } -} +} \ No newline at end of file diff --git a/gradle/quality.gradle b/gradle/quality.gradle index a91b5a9c..1136c9d2 100644 --- a/gradle/quality.gradle +++ b/gradle/quality.gradle @@ -14,28 +14,27 @@ spotbugs { includeFilter = file("$rootDir/tools/findbugs/findbugs.xml") } -tasks.withType(Checkstyle) { +tasks.withType(Checkstyle).configureEach { reports { - xml.enabled false - html.enabled true + xml.required.set(false) + html.required.set(true) } } -spotbugsMain { - reports { - html { - enabled = true - destination = file("$buildDir/reports/spotbugs/main/spotbugs.html") - stylesheet = 'fancy-hist.xsl' +afterEvaluate { + tasks.matching { it.class.name == "com.github.spotbugs.snom.SpotBugsTask" }.configureEach { + reports { + html.required.set(true) + html.stylesheet = 'fancy-hist.xsl' + html.outputLocation.set(file("$buildDir/reports/spotbugs/${name}/spotbugs.html")) } } -} -spotbugsTest { - enabled = false -} -afterEvaluate { - if (project.tasks.findByPath("spotbugsIntegTest") != null) { + spotbugsTest{ + enabled = false + } + + if (tasks.findByName("spotbugsIntegTest") != null) { spotbugsIntegTest { enabled = false } From f285843974f51d3d9e667f09dfdf2a9fd86266a2 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 10:54:14 -0300 Subject: [PATCH 03/38] build: update agp from 4.2.2 to 7.4.2 --- examples/rollbar-android/build.gradle | 5 ++--- rollbar-android/build.gradle | 5 ++--- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/examples/rollbar-android/build.gradle b/examples/rollbar-android/build.gradle index 9eb389f4..3eb8f151 100644 --- a/examples/rollbar-android/build.gradle +++ b/examples/rollbar-android/build.gradle @@ -4,15 +4,14 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.4.2' } } apply plugin: 'com.android.application' android { - compileSdkVersion 33 - buildToolsVersion "30.0.3" + compileSdkVersion = 33 defaultConfig { applicationId "com.rollbar.example.android" minSdkVersion 21 diff --git a/rollbar-android/build.gradle b/rollbar-android/build.gradle index 786d82fd..90b4b5bb 100644 --- a/rollbar-android/build.gradle +++ b/rollbar-android/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:4.2.2' + classpath 'com.android.tools.build:gradle:7.4.2' } } @@ -18,8 +18,7 @@ apply from: "$rootDir/gradle/release.gradle" apply from: "$rootDir/gradle/android.quality.gradle" android { - compileSdkVersion 33 - buildToolsVersion '30.0.3' // Going above here requires bumping the AGP to version 4+ + compileSdkVersion = 33 defaultConfig { minSdkVersion 21 From 383623a74f2d1cf7b0f1a75826f658e535bbdcb4 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 10:54:36 -0300 Subject: [PATCH 04/38] build: update scala from 2.12.4 to 2.13.14 --- examples/rollbar-scala/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rollbar-scala/build.gradle b/examples/rollbar-scala/build.gradle index 4a4c1818..89f2d281 100644 --- a/examples/rollbar-scala/build.gradle +++ b/examples/rollbar-scala/build.gradle @@ -20,5 +20,5 @@ applicationDefaultJvmArgs = [ dependencies { implementation project(":rollbar-java") - implementation "org.scala-lang:scala-library:2.12.4" + implementation "org.scala-lang:scala-library:2.13.14" } From 05719e4bb5b95f8eeb2944b079755dbce5035e52 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 10:59:33 -0300 Subject: [PATCH 05/38] build: update spring boot and spring dependency management --- examples/rollbar-spring-boot-webmvc/build.gradle | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/examples/rollbar-spring-boot-webmvc/build.gradle b/examples/rollbar-spring-boot-webmvc/build.gradle index 7a9ed4c3..81a9ac1d 100644 --- a/examples/rollbar-spring-boot-webmvc/build.gradle +++ b/examples/rollbar-spring-boot-webmvc/build.gradle @@ -1,6 +1,6 @@ plugins { - id 'org.springframework.boot' version '2.0.0.RELEASE' - id 'io.spring.dependency-management' version '1.0.9.RELEASE' + id 'org.springframework.boot' version '2.7.12' + id 'io.spring.dependency-management' version '1.0.15.RELEASE' id 'java' } From 10173082d09f56578693dabcb952dcee8ff3005c Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 11:00:07 -0300 Subject: [PATCH 06/38] build: update revapi from 1.4.4 to 1.8.0 --- build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build.gradle b/build.gradle index 0e5e4a53..ea2b757e 100644 --- a/build.gradle +++ b/build.gradle @@ -8,7 +8,7 @@ buildscript { classpath "de.marcphilipp.gradle:nexus-publish-plugin:0.4.0" classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.2" classpath "com.github.spotbugs.snom:spotbugs-gradle-plugin:4.8.0" - classpath "com.palantir.gradle.revapi:gradle-revapi:1.4.4" + classpath "com.palantir.gradle.revapi:gradle-revapi:1.8.0" } } From 4fcc6124489db03fe5d1152f79c2b0704baf2519 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 22 Jul 2025 11:01:01 -0300 Subject: [PATCH 07/38] build: update nebula integration testing plugin from 3.4.0 to 10.0.1 --- rollbar-java/build.gradle | 57 ++++++++++++++------------- rollbar-reactive-streams/build.gradle | 28 ++++++------- 2 files changed, 44 insertions(+), 41 deletions(-) diff --git a/rollbar-java/build.gradle b/rollbar-java/build.gradle index 40c7cada..0f9c3008 100644 --- a/rollbar-java/build.gradle +++ b/rollbar-java/build.gradle @@ -5,32 +5,35 @@ buildscript { } } dependencies { - classpath "com.netflix.nebula:nebula-project-plugin:3.4.0" - } - configurations.classpath { - resolutionStrategy.force 'com.netflix.nebula:nebula-gradle-interop:2.3.0' + classpath "com.netflix.nebula:nebula-project-plugin:10.0.1" } } -apply plugin: "nebula.integtest" +apply plugin: 'com.netflix.nebula.integtest' configurations { integTestArtifacts + integTestRuntime { + extendsFrom configurations.integTestImplementation + canBeConsumed = true + canBeResolved = true + } } dependencies { api project(':rollbar-api') - api group: 'org.slf4j', name: 'slf4j-api', version: '1.7.25' + api 'org.slf4j:slf4j-api:1.7.25' compileOnly 'com.google.code.findbugs:jsr305:3.0.2' - testImplementation group: 'com.google.code.gson', name: 'gson', version: '2.8.6' + testImplementation 'com.google.code.gson:gson:2.8.6' - integTestImplementation group: 'com.github.tomakehurst', name: 'wiremock', version: '2.27.0' - integTestImplementation group: 'com.google.code.gson', name: 'gson', version: '2.8.2' + integTestImplementation 'com.github.tomakehurst:wiremock:2.27.0' + integTestImplementation 'com.google.code.gson:gson:2.8.2' } +def VERSION_NAME = project.version ?: 'unspecified' /** * This task will create a version property that is statically referenced when populating the * `notifier` section of the payload. It helps when users shade and / or relocate the @@ -38,17 +41,16 @@ dependencies { * The task creates a Java class instead of a text resource, since dynamically loaded resources * are not as reliable under relocation as a strongly typed bytecode reference to a compiled class. */ -task createVersionClass() { - ext.set("OUTPUT_DIR", [buildDir.getAbsolutePath(), 'src', 'generated', 'main'].join(File.separator)) +task createVersionClass { + ext.OUTPUT_DIR = new File(buildDir, "src/generated/main") - outputs.dir(ext.OUTPUT_DIR) + outputs.dir(ext.OUTPUT_DIR) doLast { - def pkg = ["com", "rollbar", "notifier", "provider", "notifier"]; - - def pkgName = pkg.join("."); - def pkgPath = "${ext.OUTPUT_DIR}${File.separator}${pkg.join(File.separator)}" - def escapedVersion = VERSION_NAME.replace('\\', '\\\\').replace('"', '\\"'); + def pkg = ['com', 'rollbar', 'notifier', 'provider', 'notifier'] + def pkgName = pkg.join('.') + def pkgPath = new File(ext.OUTPUT_DIR.absolutePath + File.separator + pkg.join(File.separator)) + def escapedVersion = VERSION_NAME.replace('\\', '\\\\').replace('"', '\\"') def classText = """package ${pkgName}; @@ -59,24 +61,24 @@ class VersionHelperResources { } """ - new File(pkgPath).mkdirs() - def classFile = new File(pkgPath, 'VersionHelperResources.java').newWriter() - try { - classFile << classText - } finally { - classFile.close() + pkgPath.mkdirs() + def classFile = new File(pkgPath, 'VersionHelperResources.java') + classFile.withWriter { writer -> + writer << classText } } } sourceSets { main { - java.srcDirs += project.tasks.createVersionClass.ext.OUTPUT_DIR + java { + srcDir createVersionClass.ext.OUTPUT_DIR + } } } -project.tasks.compileJava.dependsOn(project.tasks.createVersionClass); -project.tasks.checkstyleMain.dependsOn(project.tasks.createVersionClass); +tasks.compileJava.dependsOn(createVersionClass) +tasks.checkstyleMain.dependsOn(createVersionClass) test { // This helps us test the VersionHelper class since there's no jar manifest available when @@ -85,9 +87,10 @@ test { } // The 'java-test-fixtures' plugin is not getting along with 'nebula.integtest', so we'll use this instead -task integTestJar(type: Jar, dependsOn: project.tasks.integTestClasses) { +task integTestJar(type: Jar) { archiveClassifier.set('integtest') from sourceSets.integTest.output + dependsOn tasks.integTestClasses } artifacts { diff --git a/rollbar-reactive-streams/build.gradle b/rollbar-reactive-streams/build.gradle index 716ab256..3e588465 100644 --- a/rollbar-reactive-streams/build.gradle +++ b/rollbar-reactive-streams/build.gradle @@ -1,18 +1,18 @@ buildscript { repositories { - maven { - url "https://plugins.gradle.org/m2/" - } + gradlePluginPortal() + mavenCentral() } dependencies { - classpath "com.netflix.nebula:nebula-project-plugin:3.4.0" - } - configurations.classpath { - resolutionStrategy.force 'com.netflix.nebula:nebula-gradle-interop:2.3.0' + classpath 'com.netflix.nebula:nebula-project-plugin:10.0.1' } } -apply plugin: "nebula.integtest" +apply plugin: 'com.netflix.nebula.integtest' + +repositories { + mavenCentral() +} dependencies { api project(':rollbar-java') @@ -33,17 +33,17 @@ dependencies { testImplementation(project(path: ':rollbar-java', configuration: 'integTestRuntime')) testImplementation(project(path: ':rollbar-java', configuration: 'integTestArtifacts')) - integTestImplementation group: 'com.github.tomakehurst', name: 'wiremock-jre8', version: '2.27.2' - integTestImplementation group: 'com.google.code.gson', name: 'gson', version: '2.8.2' + integTestImplementation 'com.github.tomakehurst:wiremock-jre8:2.27.2' + integTestImplementation 'com.google.code.gson:gson:2.8.2' } // The reactive streams TCK tests use TestNG -task tckTest(type: Test) { +tasks.register("tckTest", Test) { useTestNG() } -project.tasks.check.dependsOn(tckTest) +check.dependsOn("tckTest") -integrationTest { - dependsOn project(':rollbar-java').tasks.integTestJar +tasks.named("integrationTest").configure { + dependsOn project(':rollbar-java').tasks.named("integTestJar") } From ac0cf7b7b3eff094b3227090e60eeed1b5de2bfa Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 26 Jul 2025 18:05:07 -0300 Subject: [PATCH 08/38] build: bumpt agp from 7.4.2 to 8.6.0 --- examples/rollbar-android/build.gradle | 3 ++- rollbar-android/build.gradle | 3 ++- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/examples/rollbar-android/build.gradle b/examples/rollbar-android/build.gradle index 3eb8f151..d81db593 100644 --- a/examples/rollbar-android/build.gradle +++ b/examples/rollbar-android/build.gradle @@ -4,13 +4,14 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.6.0' } } apply plugin: 'com.android.application' android { + namespace 'com.rollbar.examples.android' compileSdkVersion = 33 defaultConfig { applicationId "com.rollbar.example.android" diff --git a/rollbar-android/build.gradle b/rollbar-android/build.gradle index 90b4b5bb..4d509946 100644 --- a/rollbar-android/build.gradle +++ b/rollbar-android/build.gradle @@ -4,7 +4,7 @@ buildscript { mavenCentral() } dependencies { - classpath 'com.android.tools.build:gradle:7.4.2' + classpath 'com.android.tools.build:gradle:8.6.0' } } @@ -18,6 +18,7 @@ apply from: "$rootDir/gradle/release.gradle" apply from: "$rootDir/gradle/android.quality.gradle" android { + namespace 'com.rollbar.android' compileSdkVersion = 33 defaultConfig { From a011bad6229a3194fb1e0240fd2514a628d10740 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 26 Jul 2025 18:06:24 -0300 Subject: [PATCH 09/38] build: add vanniktech plugin (skip Android for the moment because agp is not applied yet) --- build.gradle | 12 +-- gradle/release.gradle | 194 ++++++++---------------------------------- 2 files changed, 37 insertions(+), 169 deletions(-) diff --git a/build.gradle b/build.gradle index ea2b757e..36c0b47e 100644 --- a/build.gradle +++ b/build.gradle @@ -5,22 +5,12 @@ buildscript { } } dependencies { - classpath "de.marcphilipp.gradle:nexus-publish-plugin:0.4.0" - classpath "io.codearte.gradle.nexus:gradle-nexus-staging-plugin:0.21.2" + classpath "com.vanniktech:gradle-maven-publish-plugin:0.33.0" classpath "com.github.spotbugs.snom:spotbugs-gradle-plugin:4.8.0" classpath "com.palantir.gradle.revapi:gradle-revapi:1.8.0" } } -apply plugin: 'io.codearte.nexus-staging' -nexusStaging { - packageGroup = GROUP - username = System.getenv('NEXUS_USERNAME') - password = System.getenv('NEXUS_PASSWORD') - numberOfRetries = 180 - delayBetweenRetriesInMillis = 3000 -} - allprojects { version VERSION_NAME diff --git a/gradle/release.gradle b/gradle/release.gradle index aef0d97d..cb84e556 100644 --- a/gradle/release.gradle +++ b/gradle/release.gradle @@ -1,179 +1,57 @@ apply plugin: 'signing' apply plugin: 'maven-publish' -apply plugin: "de.marcphilipp.nexus-publish" -nexusPublishing { - repositories { - sonatype { - clientTimeout = Duration.ofMinutes(5) - connectTimeout = Duration.ofMinutes(5) - } - } -} -afterEvaluate { - if (project.parent != null && !project.parent.name.equals("examples") && !project.name.contains('examples')) { - if (!project.hasProperty('android')) { - publishing { - task sourcesJar(type: Jar, dependsOn: classes) { - archiveClassifier.set('sources') - from sourceSets.main.allSource - } - - task javadocJar(type: Jar, dependsOn: javadoc) { - archiveClassifier.set('javadoc') - from javadoc.destinationDir - } +group = GROUP +version = VERSION_NAME - publications { - maven(MavenPublication) { - // Applies the component for the release build variant. - from components.java +afterEvaluate { + if(project.parent == null || project.parent.name.equals("examples") || project.name.contains('examples') || project.name.contains('android')) {//TODO PUBLISH ANDROID MODULE + return + } - groupId GROUP - version VERSION_NAME + apply plugin: 'com.vanniktech.maven.publish' - artifact sourcesJar - artifact javadocJar + mavenPublishing { + coordinates(GROUP,POM_ARTIFACT_ID,VERSION_NAME) - pom { - versionMapping { - usage('api') { - fromResolutionOf('runtimeClasspath') - } - usage('java-runtime') { - fromResolutionResult() - } - } - name = POM_NAME - description = POM_DESCRIPTION - url = POM_URL + pom { + name.set(POM_NAME) + description.set(POM_DESCRIPTION) + url.set(POM_URL) - scm { - url = POM_SCM_URL - connection = POM_SCM_CONNECTION - developerConnection = POM_SCM_DEV_CONNECTION - } - licenses { - license { - name = POM_LICENCE_NAME - url = POM_LICENCE_URL - distribution = POM_LICENCE_DIST - } - } - developers { - developer { - id = 'rokob' - name = 'Andrew Weiss' - } - developer { - id = 'basoko' - name = 'David Basoco' - } - developer { - id = 'diegov' - name = 'Diego Veralli' - } - } - } - } + licenses { + license { + name.set(POM_LICENCE_NAME) + url.set(POM_LICENCE_URL) + distribution.set(POM_LICENCE_DIST) } } - signing { - required true - useInMemoryPgpKeys( - findProperty("signingKey") ?: System.getenv("RELEASE_GPG_PRIVATE_KEY"), - findProperty("signingPassword") ?: System.getenv("RELEASE_GPG_PRIVATE_KEY_PASSPHRASE")) - sign publishing.publications.maven - } - } - - if (project.hasProperty("android")) { - publishing { - task androidSourcesJar(type: Jar) { - archiveClassifier.set('sources') - from android.sourceSets.main.java.srcDirs + developers { + developer { + id.set("rokob") + name.set("Andrew Weiss") } - - task androidJavadocs(type: Javadoc) { - source = android.sourceSets.main.java.srcDirs - classpath += project.files(android.getBootClasspath().join(File.pathSeparator)) - android.libraryVariants.all { variant -> - if (variant.name == 'release') { - owner.classpath += variant.javaCompileProvider.get().classpath - } - } - exclude '**/R.html', '**/R.*.html', '**/index.html' + developer { + id.set("basoko") + name.set("David Basoco") } - - task androidJavadocsJar(type: Jar, dependsOn: androidJavadocs) { - archiveClassifier.set('javadoc') - from androidJavadocs.destinationDir - } - - task androidClassJar(type: Jar) { - from 'build/intermediates/classes/release/' + developer { + id.set("diegov") + name.set("Diego Veralli") } + } - publications { - release(MavenPublication) { - from components.release - - groupId GROUP - version VERSION_NAME - - artifact androidSourcesJar - artifact androidJavadocsJar - - pom { - versionMapping { - usage('api') { - fromResolutionOf('runtimeClasspath') - } - usage('java-runtime') { - fromResolutionResult() - } - } - - name = POM_NAME - description = POM_DESCRIPTION - url = POM_URL - - scm { - url = POM_SCM_URL - connection = POM_SCM_CONNECTION - developerConnection = POM_SCM_DEV_CONNECTION - } - licenses { - license { - name = POM_LICENCE_NAME - url = POM_LICENCE_URL - distribution = POM_LICENCE_DIST - } - } - developers { - developer { - id = 'rokob' - name = 'Andrew Weiss' - } - developer { - id = 'basoko' - name = 'David Basoco' - } - } - } - } - } - signing { - required true - useInMemoryPgpKeys( - findProperty("signingKey") ?: System.getenv("RELEASE_GPG_PRIVATE_KEY"), - findProperty("signingPassword") ?: System.getenv("RELEASE_GPG_PRIVATE_KEY_PASSPHRASE")) - sign publishing.publications.release - } + scm { + url.set(POM_SCM_URL) + connection.set(POM_SCM_CONNECTION) + developerConnection.set(POM_SCM_DEV_CONNECTION) } } + + publishToMavenCentral() + signAllPublications() } } From 8ab37d84d0479ae0c8cc50107e1f5e2b1b21597f Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Aug 2025 00:41:29 -0300 Subject: [PATCH 10/38] build: update build.gradle groovy to kotlin --- build.gradle | 74 ------------------------------------------------ build.gradle.kts | 59 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 59 insertions(+), 74 deletions(-) delete mode 100644 build.gradle create mode 100644 build.gradle.kts diff --git a/build.gradle b/build.gradle deleted file mode 100644 index 36c0b47e..00000000 --- a/build.gradle +++ /dev/null @@ -1,74 +0,0 @@ -buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "com.vanniktech:gradle-maven-publish-plugin:0.33.0" - classpath "com.github.spotbugs.snom:spotbugs-gradle-plugin:4.8.0" - classpath "com.palantir.gradle.revapi:gradle-revapi:1.8.0" - } -} - -allprojects { - version VERSION_NAME - - repositories { - google() - mavenCentral() - } -} - -subprojects { project -> - if (!project.name.contains('android') && !project.parent.name.equals("examples") && !project.name.contains('examples')) { - apply plugin: 'java-library' - - apply from: "$rootDir/gradle/release.gradle" - - apply from: "$rootDir/gradle/quality.gradle" - - apply from: "$rootDir/gradle/compatibility.gradle" - - repositories { - mavenCentral() - } - - jar { - manifest { - attributes( - "Implementation-Title": project.name, - "Implementation-Version": VERSION_NAME - ) - } - } - - dependencies { - testImplementation group: 'junit', name: 'junit', version: '4.13.2' - testImplementation group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' - testImplementation group: 'org.mockito', name: 'mockito-core', version: '3.8.0' - } - - compileJava { - if (JavaVersion.current().isJava9Compatible()) { - options.release = 8 - } else { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - } - - compileTestJava { - if (JavaVersion.current().isJava9Compatible()) { - options.release = 8 - } else { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - } - } -} - -wrapper { - gradleVersion = '6.9.4' -} diff --git a/build.gradle.kts b/build.gradle.kts new file mode 100644 index 00000000..bc66efe7 --- /dev/null +++ b/build.gradle.kts @@ -0,0 +1,59 @@ +plugins { + alias(rollbarlibs.plugins.vanniktech) apply false + alias(rollbarlibs.plugins.spotbugs) apply false + alias(rollbarlibs.plugins.revapi) apply false + id("com.rollbar.conventions.release") apply false +} + +val versionName = rootProject.extra["VERSION_NAME"] as String + +allprojects { + version = versionName + + repositories { + google() + mavenCentral() + } +} + +subprojects { + val isExample = name.contains("examples") || parent?.name == "examples" + val isAndroid = name.contains("android") + + if (!isExample && !isAndroid) { + apply(plugin = "java-library") + apply(plugin = "com.rollbar.conventions.release") + apply(from = "$rootDir/gradle/quality.gradle") + apply(from = "$rootDir/gradle/compatibility.gradle") + + repositories { + mavenCentral() + } + + tasks.withType().configureEach { + manifest { + attributes( + mapOf( + "Implementation-Title" to project.name, + "Implementation-Version" to versionName + ) + ) + } + } + + dependencies { + add("testImplementation", "junit:junit:4.13.2") + add("testImplementation", "org.hamcrest:hamcrest-all:1.3") + add("testImplementation", "org.mockito:mockito-core:3.8.0") + } + + tasks.withType().configureEach { + if (JavaVersion.current().isJava9Compatible) { + options.release.set(8) + } else { + sourceCompatibility = JavaVersion.VERSION_1_8.toString() + targetCompatibility = JavaVersion.VERSION_1_8.toString() + } + } + } +} \ No newline at end of file From bcc5eb02009018dd541a426b3f7438930ac0493d Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Aug 2025 00:44:48 -0300 Subject: [PATCH 11/38] build: add version catalog and update settings.gradle to kotlin --- gradle/rollbarlibs.versions.toml | 19 +++++++++ settings.gradle | 35 ----------------- settings.gradle.kts | 67 ++++++++++++++++++++++++++++++++ 3 files changed, 86 insertions(+), 35 deletions(-) create mode 100644 gradle/rollbarlibs.versions.toml delete mode 100644 settings.gradle create mode 100644 settings.gradle.kts diff --git a/gradle/rollbarlibs.versions.toml b/gradle/rollbarlibs.versions.toml new file mode 100644 index 00000000..e0cf7483 --- /dev/null +++ b/gradle/rollbarlibs.versions.toml @@ -0,0 +1,19 @@ +[versions] +kotlin = "1.9.22" +agp = "8.6.0" +vanniktech = "0.34.0" +spotbugs = "4.8.0" +revapi = "1.8.0" + +[plugins] +kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +vanniktech = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech" } +spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugs" } +revapi = { id = "com.palantir.revapi", version.ref = "revapi" } +android-library = { id = "com.android.library", version.ref = "agp" } +java-library = { id = "java-library" } + +[libraries] +junit = { group = "junit", name = "junit", version = "4.13.2" } +hamcrest = { group = "org.hamcrest", name = "hamcrest-all", version = "1.3" } +mockito = { group = "org.mockito", name = "mockito-core", version = "3.8.0" } \ No newline at end of file diff --git a/settings.gradle b/settings.gradle deleted file mode 100644 index adfeeca4..00000000 --- a/settings.gradle +++ /dev/null @@ -1,35 +0,0 @@ -rootProject.name="rollbar-java-sdk" - -include ":rollbar-api", - ":rollbar-java", - ":rollbar-web", - ":rollbar-jakarta-web", - ":rollbar-log4j2", - ":rollbar-logback", - ":rollbar-spring-webmvc", - ":rollbar-spring6-webmvc", - ":rollbar-spring-boot-webmvc", - ":rollbar-spring-boot3-webmvc", - ":rollbar-struts2", - ":rollbar-reactive-streams", - ":rollbar-reactive-streams-reactor", - ":examples:rollbar-java", - ":examples:rollbar-web", - ":examples:rollbar-scala", - ":examples:rollbar-log4j2", - ":examples:rollbar-logback", - ":examples:rollbar-spring-webmvc", - ":examples:rollbar-spring-boot-webmvc", - ":examples:rollbar-struts2", - ":examples:rollbar-struts2-spring", - ":examples:rollbar-reactive-streams-reactor" - -def isJava8 = JavaVersion.current() == JavaVersion.VERSION_1_8 - -if (isJava8) { - println "Java 8 detected: excluding :rollbar-android and :examples:rollbar-android" -} else { - println "Java ${JavaVersion.current()} detected: including Android modules" - include ":rollbar-android", - ":examples:rollbar-android" -} diff --git a/settings.gradle.kts b/settings.gradle.kts new file mode 100644 index 00000000..982f138e --- /dev/null +++ b/settings.gradle.kts @@ -0,0 +1,67 @@ +rootProject.name="rollbar-java-sdk" + + +pluginManagement { + includeBuild("build-logic") + + plugins { + id("com.android.library") version "8.6.0" + } + + repositories { + gradlePluginPortal() + google() + mavenCentral() + } +} + +enableFeaturePreview("TYPESAFE_PROJECT_ACCESSORS") + +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } + + versionCatalogs { + create("rollbarlibs") { + from(files("gradle/rollbarlibs.versions.toml")) + } + } +} + + +include( + ":rollbar-api", + ":rollbar-java", + ":rollbar-web", + ":rollbar-jakarta-web", + ":rollbar-log4j2", + ":rollbar-logback", + ":rollbar-spring-webmvc", + ":rollbar-spring6-webmvc", + ":rollbar-spring-boot-webmvc", + ":rollbar-spring-boot3-webmvc", + ":rollbar-struts2", + ":rollbar-reactive-streams", + ":rollbar-reactive-streams-reactor", + ":examples:rollbar-java", + ":examples:rollbar-web", + ":examples:rollbar-scala", + ":examples:rollbar-log4j2", + ":examples:rollbar-logback", + ":examples:rollbar-spring-webmvc", + ":examples:rollbar-spring-boot-webmvc", + ":examples:rollbar-struts2", + ":examples:rollbar-struts2-spring", + ":examples:rollbar-reactive-streams-reactor" +) + +val isJava8 = JavaVersion.current() == JavaVersion.VERSION_1_8 + +if (isJava8) { + println("Java 8 detected: excluding :rollbar-android and :examples:rollbar-android") +} else { + println("Java ${JavaVersion.current()} detected: including Android modules") + include(":rollbar-android", ":examples:rollbar-android") +} From 622c136457ee6e54c2d15b762df658b6c977d7b7 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Aug 2025 01:29:43 -0300 Subject: [PATCH 12/38] build: replace release.gradle with publish convention plugin --- build-logic/conventions/build.gradle.kts | 23 ++++++++ .../src/main/kotlin/RollbarPublishPlugin.kt | 56 ++++++++++++++++++ build-logic/settings.gradle.kts | 10 ++++ gradle/release.gradle | 57 ------------------- 4 files changed, 89 insertions(+), 57 deletions(-) create mode 100644 build-logic/conventions/build.gradle.kts create mode 100644 build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt create mode 100644 build-logic/settings.gradle.kts delete mode 100644 gradle/release.gradle diff --git a/build-logic/conventions/build.gradle.kts b/build-logic/conventions/build.gradle.kts new file mode 100644 index 00000000..f0034f1b --- /dev/null +++ b/build-logic/conventions/build.gradle.kts @@ -0,0 +1,23 @@ +plugins { + `kotlin-dsl` +} + +group = "com.rollbar.buildlogic" + +repositories { + gradlePluginPortal() + mavenCentral() +} + +dependencies { + implementation("com.vanniktech:gradle-maven-publish-plugin:0.34.0") +} + +gradlePlugin { + plugins { + create("rollbar-release-plugin") { + id = "com.rollbar.conventions.release" + implementationClass = "RollbarPublishPlugin" + } + } +} diff --git a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt new file mode 100644 index 00000000..e9b7e94c --- /dev/null +++ b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt @@ -0,0 +1,56 @@ +import com.vanniktech.maven.publish.MavenPublishBaseExtension +import org.gradle.api.Plugin +import org.gradle.api.Project + +class RollbarPublishPlugin : Plugin { + override fun apply(project: Project) { + + project.pluginManager.withPlugin("com.android.library") { + //TODO apply vanniktech plugin + } + + project.plugins.withId("java-library") { + project.plugins.apply("com.vanniktech.maven.publish") + + project.extensions.configure(MavenPublishBaseExtension::class.java) { + pom { + name.set(project.findProperty("POM_NAME") as String) + description.set(project.findProperty("POM_DESCRIPTION") as String) + url.set(project.findProperty("POM_URL") as String) + + licenses { + license { + name.set(project.findProperty("POM_LICENCE_NAME") as String) + url.set(project.findProperty("POM_LICENCE_URL") as String) + distribution.set(project.findProperty("POM_LICENCE_DIST") as String) + } + } + + developers { + developer { + id.set("rokob") + name.set("Andrew Weiss") + } + developer { + id.set("basoko") + name.set("David Basoco") + } + developer { + id.set("diegov") + name.set("Diego Veralli") + } + } + + scm { + url.set(project.findProperty("POM_SCM_URL") as String) + connection.set(project.findProperty("POM_SCM_CONNECTION") as String) + developerConnection.set(project.findProperty("POM_SCM_DEV_CONNECTION") as String) + } + } + + publishToMavenCentral() + signAllPublications() + } + } + } +} diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts new file mode 100644 index 00000000..a2069735 --- /dev/null +++ b/build-logic/settings.gradle.kts @@ -0,0 +1,10 @@ +dependencyResolutionManagement { + repositories { + google() + mavenCentral() + } +} + +rootProject.name = "build-logic" + +include(":conventions") diff --git a/gradle/release.gradle b/gradle/release.gradle deleted file mode 100644 index cb84e556..00000000 --- a/gradle/release.gradle +++ /dev/null @@ -1,57 +0,0 @@ -apply plugin: 'signing' -apply plugin: 'maven-publish' - - -group = GROUP -version = VERSION_NAME - -afterEvaluate { - if(project.parent == null || project.parent.name.equals("examples") || project.name.contains('examples') || project.name.contains('android')) {//TODO PUBLISH ANDROID MODULE - return - } - - apply plugin: 'com.vanniktech.maven.publish' - - mavenPublishing { - coordinates(GROUP,POM_ARTIFACT_ID,VERSION_NAME) - - pom { - name.set(POM_NAME) - description.set(POM_DESCRIPTION) - url.set(POM_URL) - - licenses { - license { - name.set(POM_LICENCE_NAME) - url.set(POM_LICENCE_URL) - distribution.set(POM_LICENCE_DIST) - } - } - - developers { - developer { - id.set("rokob") - name.set("Andrew Weiss") - } - developer { - id.set("basoko") - name.set("David Basoco") - } - developer { - id.set("diegov") - name.set("Diego Veralli") - } - } - - scm { - url.set(POM_SCM_URL) - connection.set(POM_SCM_CONNECTION) - developerConnection.set(POM_SCM_DEV_CONNECTION) - } - } - - publishToMavenCentral() - signAllPublications() - } -} - From 8588ba9148d9d22092f99dffb4cb48d0e2049125 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Aug 2025 01:31:05 -0300 Subject: [PATCH 13/38] build: update android build.gradle to kotlin --- rollbar-android/build.gradle | 55 -------------------------------- rollbar-android/build.gradle.kts | 43 +++++++++++++++++++++++++ 2 files changed, 43 insertions(+), 55 deletions(-) delete mode 100644 rollbar-android/build.gradle create mode 100644 rollbar-android/build.gradle.kts diff --git a/rollbar-android/build.gradle b/rollbar-android/build.gradle deleted file mode 100644 index 4d509946..00000000 --- a/rollbar-android/build.gradle +++ /dev/null @@ -1,55 +0,0 @@ -buildscript { - repositories { - google() - mavenCentral() - } - dependencies { - classpath 'com.android.tools.build:gradle:8.6.0' - } -} - -repositories { - google() - mavenCentral() -} - -apply plugin: 'com.android.library' -apply from: "$rootDir/gradle/release.gradle" -apply from: "$rootDir/gradle/android.quality.gradle" - -android { - namespace 'com.rollbar.android' - compileSdkVersion = 33 - - defaultConfig { - minSdkVersion 21 - // FIXME: Pending further discussion - //noinspection ExpiredTargetSdkVersion - targetSdkVersion 33 - consumerProguardFiles 'proguard-rules.pro' - manifestPlaceholders = [notifierVersion: VERSION_NAME] - } - - buildTypes { - release { - testCoverageEnabled false - } - debug { - testCoverageEnabled true - } - } - - compileOptions { - sourceCompatibility JavaVersion.VERSION_1_8 - targetCompatibility JavaVersion.VERSION_1_8 - } -} - -dependencies { - api project(':rollbar-java') - - testImplementation group: 'junit', name: 'junit', version: '4.12' - testImplementation group: 'org.hamcrest', name: 'hamcrest-all', version: '1.3' - testImplementation group: 'org.mockito', name: 'mockito-core', version: '2.28.2' - androidTestImplementation "org.mockito:mockito-android:+" -} diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts new file mode 100644 index 00000000..fa74ec0b --- /dev/null +++ b/rollbar-android/build.gradle.kts @@ -0,0 +1,43 @@ +plugins { + id("com.android.library") version "8.6.0" + //id("com.rollbar.conventions.release") //TODO: AGP not applied, don't know why +} + +apply(from = "$rootDir/gradle/android.quality.gradle") //TODO: Update as convention plugin + +android { + namespace = "com.rollbar.android" + compileSdk = 33 + + defaultConfig { + minSdk = 21 + targetSdk = 33 + consumerProguardFiles("proguard-rules.pro") + manifestPlaceholders["notifierVersion"] = project.property("VERSION_NAME") as String + } + + buildTypes { + getByName("release") { + enableUnitTestCoverage = false + enableAndroidTestCoverage = false + } + getByName("debug") { + enableUnitTestCoverage = true + enableAndroidTestCoverage = true + } + } + + compileOptions { + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 + } +} + +dependencies { + api(project(":rollbar-java")) + + testImplementation("junit:junit:4.12") + testImplementation("org.hamcrest:hamcrest-all:1.3") + testImplementation("org.mockito:mockito-core:2.28.2") + androidTestImplementation("org.mockito:mockito-android:+") +} \ No newline at end of file From 450a81a531b2393d92e68cf39ac564d031a31be8 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Aug 2025 02:10:15 -0300 Subject: [PATCH 14/38] build: update ci --- .github/workflows/ci.yml | 55 +++++++++++++++++++++++++++++----------- settings.gradle.kts | 5 ++-- 2 files changed, 43 insertions(+), 17 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 2272a299..ff937bed 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -33,7 +33,7 @@ jobs: matrix: # Must upgrade Gradle before we can go past Java 15 here. # https://docs.gradle.org/current/userguide/compatibility.html - java: [ 8, 11 ] + java: [ 11, 17 ] steps: - uses: actions/checkout@v4 @@ -60,7 +60,7 @@ jobs: echo ANDROID_SDK_ROOT: ${ANDROID_SDK_ROOT} - name: Build - run: ./gradlew clean build + run: ./gradlew clean build --no-daemon - name: Upload build reports if: always() @@ -70,6 +70,37 @@ jobs: path: | **/build/reports/* + build-android: + runs-on: ubuntu-22.04 + name: Build Android module with Java 17 + needs: [ validation ] + steps: + - uses: actions/checkout@v4 + - name: Fetch git tags + run: ./.github/scripts/fetch_to_tag.sh + + - name: Set up Java 17 + uses: actions/setup-java@v4 + with: + java-version: 17 + distribution: 'zulu' + cache: 'gradle' + + - name: Install Android SDK + run: | + ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "platforms;android-33" "build-tools;34.0.0" + + - name: Build Android module + run: ./gradlew :rollbar-android:build + + - name: Upload Android build reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: android-java17-build-reports + path: | + **/build/reports/* + release: runs-on: ubuntu-22.04 name: Release @@ -77,27 +108,21 @@ jobs: # faster and have less duplicated Yaml, it would not be possible to check # for all matrix results before publishing if this were just another step # in that job. - needs: [ build ] + needs: [ build, build-android ] steps: - uses: actions/checkout@v4 - - name: Set up Java 11 for the Android SDK Manager - uses: actions/setup-java@v1 - with: - java-version: 11 - - - name: Install Android SDK - run: | - echo "Android SDK Manager version: `${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --version`" - ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "platforms;android-27" "build-tools;28.0.3" - - - name: Set up Java 8 for the build + - name: Set up Java 17 for Android uses: actions/setup-java@v4 with: - java-version: 8 + java-version: 17 distribution: 'zulu' cache: 'gradle' + - name: Install Android SDK + run: | + ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "platforms;android-33" "build-tools;34.0.0" + - name: Release env: RELEASE_GPG_PRIVATE_KEY: ${{ secrets.RELEASE_GPG_PRIVATE_KEY }} diff --git a/settings.gradle.kts b/settings.gradle.kts index 982f138e..b56b7aee 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -58,9 +58,10 @@ include( ) val isJava8 = JavaVersion.current() == JavaVersion.VERSION_1_8 +val isJava11 = JavaVersion.current() == JavaVersion.VERSION_11 -if (isJava8) { - println("Java 8 detected: excluding :rollbar-android and :examples:rollbar-android") +if (isJava8 || isJava11) { + println("Java 8 or 11 detected: excluding :rollbar-android and :examples:rollbar-android") } else { println("Java ${JavaVersion.current()} detected: including Android modules") include(":rollbar-android", ":examples:rollbar-android") From c4d7192f9124815a5527da63455a643709d86757 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 4 Aug 2025 02:17:54 -0300 Subject: [PATCH 15/38] build: skip Android quality check for now --- rollbar-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts index fa74ec0b..912863b5 100644 --- a/rollbar-android/build.gradle.kts +++ b/rollbar-android/build.gradle.kts @@ -3,7 +3,7 @@ plugins { //id("com.rollbar.conventions.release") //TODO: AGP not applied, don't know why } -apply(from = "$rootDir/gradle/android.quality.gradle") //TODO: Update as convention plugin +//apply(from = "$rootDir/gradle/android.quality.gradle") //TODO: Update as convention plugin android { namespace = "com.rollbar.android" From eacfdb92843cb363ef6429a6d043cdc59501292d Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 11 Aug 2025 00:54:59 -0300 Subject: [PATCH 16/38] build: register agp in root build.gradle.kts to prevent agp not found from vanniktech --- .../src/main/kotlin/RollbarPublishPlugin.kt | 75 ++++++++++--------- build.gradle.kts | 59 ++++++++------- gradle/rollbarlibs.versions.toml | 6 +- rollbar-android/build.gradle.kts | 4 +- 4 files changed, 76 insertions(+), 68 deletions(-) diff --git a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt index e9b7e94c..f36eee98 100644 --- a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt +++ b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt @@ -6,51 +6,56 @@ class RollbarPublishPlugin : Plugin { override fun apply(project: Project) { project.pluginManager.withPlugin("com.android.library") { - //TODO apply vanniktech plugin + applyPlugin(project) } project.plugins.withId("java-library") { - project.plugins.apply("com.vanniktech.maven.publish") - - project.extensions.configure(MavenPublishBaseExtension::class.java) { - pom { - name.set(project.findProperty("POM_NAME") as String) - description.set(project.findProperty("POM_DESCRIPTION") as String) - url.set(project.findProperty("POM_URL") as String) - - licenses { - license { - name.set(project.findProperty("POM_LICENCE_NAME") as String) - url.set(project.findProperty("POM_LICENCE_URL") as String) - distribution.set(project.findProperty("POM_LICENCE_DIST") as String) - } - } + applyPlugin(project) + } + + } + + private fun applyPlugin(project: Project) { + project.plugins.apply("com.vanniktech.maven.publish") + + project.extensions.configure(MavenPublishBaseExtension::class.java) { + pom { + name.set(project.findProperty("POM_NAME") as String) + description.set(project.findProperty("POM_DESCRIPTION") as String) + url.set(project.findProperty("POM_URL") as String) - developers { - developer { - id.set("rokob") - name.set("Andrew Weiss") - } - developer { - id.set("basoko") - name.set("David Basoco") - } - developer { - id.set("diegov") - name.set("Diego Veralli") - } + licenses { + license { + name.set(project.findProperty("POM_LICENCE_NAME") as String) + url.set(project.findProperty("POM_LICENCE_URL") as String) + distribution.set(project.findProperty("POM_LICENCE_DIST") as String) } + } - scm { - url.set(project.findProperty("POM_SCM_URL") as String) - connection.set(project.findProperty("POM_SCM_CONNECTION") as String) - developerConnection.set(project.findProperty("POM_SCM_DEV_CONNECTION") as String) + developers { + developer { + id.set("rokob") + name.set("Andrew Weiss") + } + developer { + id.set("basoko") + name.set("David Basoco") + } + developer { + id.set("diegov") + name.set("Diego Veralli") } } - publishToMavenCentral() - signAllPublications() + scm { + url.set(project.findProperty("POM_SCM_URL") as String) + connection.set(project.findProperty("POM_SCM_CONNECTION") as String) + developerConnection.set(project.findProperty("POM_SCM_DEV_CONNECTION") as String) + } } + + publishToMavenCentral() + signAllPublications() } } } diff --git a/build.gradle.kts b/build.gradle.kts index bc66efe7..4a3b5db4 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -1,4 +1,5 @@ plugins { + alias(rollbarlibs.plugins.androidLibrary) apply false alias(rollbarlibs.plugins.vanniktech) apply false alias(rollbarlibs.plugins.spotbugs) apply false alias(rollbarlibs.plugins.revapi) apply false @@ -20,40 +21,42 @@ subprojects { val isExample = name.contains("examples") || parent?.name == "examples" val isAndroid = name.contains("android") - if (!isExample && !isAndroid) { - apply(plugin = "java-library") - apply(plugin = "com.rollbar.conventions.release") - apply(from = "$rootDir/gradle/quality.gradle") - apply(from = "$rootDir/gradle/compatibility.gradle") + if (isExample || isAndroid) { + return@subprojects + } - repositories { - mavenCentral() - } + apply(plugin = "java-library") + apply(plugin = "com.rollbar.conventions.release") + apply(from = "$rootDir/gradle/quality.gradle") + apply(from = "$rootDir/gradle/compatibility.gradle") - tasks.withType().configureEach { - manifest { - attributes( - mapOf( - "Implementation-Title" to project.name, - "Implementation-Version" to versionName - ) + repositories { + mavenCentral() + } + + tasks.withType().configureEach { + manifest { + attributes( + mapOf( + "Implementation-Title" to project.name, + "Implementation-Version" to versionName ) - } + ) } + } - dependencies { - add("testImplementation", "junit:junit:4.13.2") - add("testImplementation", "org.hamcrest:hamcrest-all:1.3") - add("testImplementation", "org.mockito:mockito-core:3.8.0") - } + dependencies { + add("testImplementation", "junit:junit:4.13.2") + add("testImplementation", "org.hamcrest:hamcrest-all:1.3") + add("testImplementation", "org.mockito:mockito-core:3.8.0") + } - tasks.withType().configureEach { - if (JavaVersion.current().isJava9Compatible) { - options.release.set(8) - } else { - sourceCompatibility = JavaVersion.VERSION_1_8.toString() - targetCompatibility = JavaVersion.VERSION_1_8.toString() - } + tasks.withType().configureEach { + if (JavaVersion.current().isJava9Compatible) { + options.release.set(8) + } else { + sourceCompatibility = JavaVersion.VERSION_1_8.toString() + targetCompatibility = JavaVersion.VERSION_1_8.toString() } } } \ No newline at end of file diff --git a/gradle/rollbarlibs.versions.toml b/gradle/rollbarlibs.versions.toml index e0cf7483..24558484 100644 --- a/gradle/rollbarlibs.versions.toml +++ b/gradle/rollbarlibs.versions.toml @@ -6,12 +6,12 @@ spotbugs = "4.8.0" revapi = "1.8.0" [plugins] -kotlin-android = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } +kotlinAndroid = { id = "org.jetbrains.kotlin.android", version.ref = "kotlin" } vanniktech = { id = "com.vanniktech.maven.publish", version.ref = "vanniktech" } spotbugs = { id = "com.github.spotbugs", version.ref = "spotbugs" } revapi = { id = "com.palantir.revapi", version.ref = "revapi" } -android-library = { id = "com.android.library", version.ref = "agp" } -java-library = { id = "java-library" } +androidLibrary = { id = "com.android.library", version.ref = "agp" } +javaLibrary = { id = "java-library" } [libraries] junit = { group = "junit", name = "junit", version = "4.13.2" } diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts index 912863b5..12e1b16f 100644 --- a/rollbar-android/build.gradle.kts +++ b/rollbar-android/build.gradle.kts @@ -1,6 +1,6 @@ plugins { - id("com.android.library") version "8.6.0" - //id("com.rollbar.conventions.release") //TODO: AGP not applied, don't know why + id("com.android.library") + id("com.rollbar.conventions.release") } //apply(from = "$rootDir/gradle/android.quality.gradle") //TODO: Update as convention plugin From 3fbba5a448be60cd11c903f6d6e31fd724964643 Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 14 Aug 2025 03:01:16 -0300 Subject: [PATCH 17/38] build(rollbar-java): migrate build.gradle to Kotlin and fix failing CI --- rollbar-java/build.gradle | 98 ----------------------------------- rollbar-java/build.gradle.kts | 96 ++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 98 deletions(-) delete mode 100644 rollbar-java/build.gradle create mode 100644 rollbar-java/build.gradle.kts diff --git a/rollbar-java/build.gradle b/rollbar-java/build.gradle deleted file mode 100644 index 0f9c3008..00000000 --- a/rollbar-java/build.gradle +++ /dev/null @@ -1,98 +0,0 @@ -buildscript { - repositories { - maven { - url "https://plugins.gradle.org/m2/" - } - } - dependencies { - classpath "com.netflix.nebula:nebula-project-plugin:10.0.1" - } -} - -apply plugin: 'com.netflix.nebula.integtest' - -configurations { - integTestArtifacts - integTestRuntime { - extendsFrom configurations.integTestImplementation - canBeConsumed = true - canBeResolved = true - } -} - -dependencies { - api project(':rollbar-api') - - api 'org.slf4j:slf4j-api:1.7.25' - - compileOnly 'com.google.code.findbugs:jsr305:3.0.2' - - testImplementation 'com.google.code.gson:gson:2.8.6' - - integTestImplementation 'com.github.tomakehurst:wiremock:2.27.0' - integTestImplementation 'com.google.code.gson:gson:2.8.2' -} - -def VERSION_NAME = project.version ?: 'unspecified' -/** - * This task will create a version property that is statically referenced when populating the - * `notifier` section of the payload. It helps when users shade and / or relocate the - * `rollbar-java` classes, since in those cases we no longer have access to our jar manifest. - * The task creates a Java class instead of a text resource, since dynamically loaded resources - * are not as reliable under relocation as a strongly typed bytecode reference to a compiled class. - */ -task createVersionClass { - ext.OUTPUT_DIR = new File(buildDir, "src/generated/main") - - outputs.dir(ext.OUTPUT_DIR) - - doLast { - def pkg = ['com', 'rollbar', 'notifier', 'provider', 'notifier'] - def pkgName = pkg.join('.') - def pkgPath = new File(ext.OUTPUT_DIR.absolutePath + File.separator + pkg.join(File.separator)) - def escapedVersion = VERSION_NAME.replace('\\', '\\\\').replace('"', '\\"') - - def classText = """package ${pkgName}; - -class VersionHelperResources { - static String getVersion() { - return "${escapedVersion}"; - } -} -""" - - pkgPath.mkdirs() - def classFile = new File(pkgPath, 'VersionHelperResources.java') - classFile.withWriter { writer -> - writer << classText - } - } -} - -sourceSets { - main { - java { - srcDir createVersionClass.ext.OUTPUT_DIR - } - } -} - -tasks.compileJava.dependsOn(createVersionClass) -tasks.checkstyleMain.dependsOn(createVersionClass) - -test { - // This helps us test the VersionHelper class since there's no jar manifest available when - // running tests. - systemProperty 'ROLLBAR_IMPLEMENTATION_VERSION', VERSION_NAME -} - -// The 'java-test-fixtures' plugin is not getting along with 'nebula.integtest', so we'll use this instead -task integTestJar(type: Jar) { - archiveClassifier.set('integtest') - from sourceSets.integTest.output - dependsOn tasks.integTestClasses -} - -artifacts { - integTestArtifacts integTestJar -} diff --git a/rollbar-java/build.gradle.kts b/rollbar-java/build.gradle.kts new file mode 100644 index 00000000..12fa87a2 --- /dev/null +++ b/rollbar-java/build.gradle.kts @@ -0,0 +1,96 @@ +import java.io.File + +plugins { + id("com.netflix.nebula.integtest") version "10.0.1" +} + +val integTestArtifacts by configurations.creating +val integTestRuntime by configurations.creating { + extendsFrom(configurations["integTestImplementation"]) + isCanBeConsumed = true + isCanBeResolved = true +} + +dependencies { + api(project(":rollbar-api")) + api("org.slf4j:slf4j-api:1.7.25") + + compileOnly("com.google.code.findbugs:jsr305:3.0.2") + + testImplementation("com.google.code.gson:gson:2.8.6") + + "integTestImplementation"("com.github.tomakehurst:wiremock:2.27.0") + "integTestImplementation"("com.google.code.gson:gson:2.8.2") +} + +val versionName = project.version.toString().ifEmpty { "unspecified" } + +/** + * This task will create a version property that is statically referenced when populating the + * `notifier` section of the payload. It helps when users shade and / or relocate the + * `rollbar-java` classes, since in those cases we no longer have access to our jar manifest. + * The task creates a Java class instead of a text resource, since dynamically loaded resources + * are not as reliable under relocation as a strongly typed bytecode reference to a compiled class. + */ +val createVersionClass by tasks.registering { + val outputDir = layout.buildDirectory.dir("src/generated/main") + outputs.dir(outputDir) + + doLast { + val pkg = listOf("com", "rollbar", "notifier", "provider", "notifier") + val pkgName = pkg.joinToString(".") + val pkgPath = outputDir.get().asFile.resolve(pkg.joinToString(File.separator)) + val escapedVersion = versionName.replace("\\", "\\\\").replace("\"", "\\\"") + + val classText = """ + package $pkgName; + + class VersionHelperResources { + static String getVersion() { + return "$escapedVersion"; + } + } + """.trimIndent() + + pkgPath.mkdirs() + pkgPath.resolve("VersionHelperResources.java").writeText(classText) + } +} + +sourceSets { + named("main") { + java.srcDir(createVersionClass.map { it.outputs.files.singleFile }) + } +} + +tasks.named("compileJava") { + dependsOn(createVersionClass) +} + +tasks.named("checkstyleMain") { + dependsOn(createVersionClass) +} + +//Ensure sourcesJar runs after version class is created +tasks.withType().configureEach { + if (name == "sourcesJar") { + dependsOn(createVersionClass) + } +} + +tasks.test { + // This helps us test the VersionHelper class since there's no jar manifest available when + // running tests. + systemProperty("ROLLBAR_IMPLEMENTATION_VERSION", versionName) +} + +// The 'java-test-fixtures' plugin is not getting along with 'nebula.integtest', so we'll use this instead +val integTestJar by tasks.registering(Jar::class) { + archiveClassifier.set("integtest") + from(sourceSets["integTest"].output) + dependsOn(tasks.named("integTestClasses")) +} + +artifacts { + add("integTestArtifacts", integTestJar) +} From c0da9ca7cfa3677a4c2ab182dded36ad14d0727d Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 14 Aug 2025 03:29:45 -0300 Subject: [PATCH 18/38] build(rollbar-java): update canonical path for generated code --- rollbar-java/build.gradle.kts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/rollbar-java/build.gradle.kts b/rollbar-java/build.gradle.kts index 12fa87a2..c6bfc6f3 100644 --- a/rollbar-java/build.gradle.kts +++ b/rollbar-java/build.gradle.kts @@ -33,7 +33,7 @@ val versionName = project.version.toString().ifEmpty { "unspecified" } * are not as reliable under relocation as a strongly typed bytecode reference to a compiled class. */ val createVersionClass by tasks.registering { - val outputDir = layout.buildDirectory.dir("src/generated/main") + val outputDir = layout.buildDirectory.dir("generated/sources/version/java/main") outputs.dir(outputDir) doLast { @@ -63,7 +63,7 @@ sourceSets { } } -tasks.named("compileJava") { +tasks.withType().configureEach { dependsOn(createVersionClass) } @@ -71,7 +71,7 @@ tasks.named("checkstyleMain") { dependsOn(createVersionClass) } -//Ensure sourcesJar runs after version class is created +// Ensure sourcesJar runs after version class is created tasks.withType().configureEach { if (name == "sourcesJar") { dependsOn(createVersionClass) @@ -79,6 +79,7 @@ tasks.withType().configureEach { } tasks.test { + dependsOn(createVersionClass) // This helps us test the VersionHelper class since there's no jar manifest available when // running tests. systemProperty("ROLLBAR_IMPLEMENTATION_VERSION", versionName) From 210ef847eea0c30611a5982cd5b873356402a49a Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 14 Aug 2025 03:42:34 -0300 Subject: [PATCH 19/38] build(rollbar-java): declare inputs so Gradle knows when to rerun the task --- rollbar-java/build.gradle.kts | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/rollbar-java/build.gradle.kts b/rollbar-java/build.gradle.kts index c6bfc6f3..364c8c20 100644 --- a/rollbar-java/build.gradle.kts +++ b/rollbar-java/build.gradle.kts @@ -1,4 +1,5 @@ import java.io.File +import org.gradle.api.tasks.testing.Test plugins { id("com.netflix.nebula.integtest") version "10.0.1" @@ -36,6 +37,8 @@ val createVersionClass by tasks.registering { val outputDir = layout.buildDirectory.dir("generated/sources/version/java/main") outputs.dir(outputDir) + inputs.property("versionName", versionName) + doLast { val pkg = listOf("com", "rollbar", "notifier", "provider", "notifier") val pkgName = pkg.joinToString(".") @@ -63,7 +66,7 @@ sourceSets { } } -tasks.withType().configureEach { +tasks.named("compileJava") { dependsOn(createVersionClass) } @@ -71,14 +74,13 @@ tasks.named("checkstyleMain") { dependsOn(createVersionClass) } -// Ensure sourcesJar runs after version class is created tasks.withType().configureEach { if (name == "sourcesJar") { dependsOn(createVersionClass) } } -tasks.test { +tasks.named("test") { dependsOn(createVersionClass) // This helps us test the VersionHelper class since there's no jar manifest available when // running tests. From 91a316471fbaa8bbb986b311158fec9a2299becf Mon Sep 17 00:00:00 2001 From: chris Date: Thu, 14 Aug 2025 03:58:07 -0300 Subject: [PATCH 20/38] build: update mokito to 5.18.0 and fix Java tests --- build.gradle.kts | 2 +- rollbar-android/build.gradle.kts | 6 +++--- .../com/rollbar/notifier/filter/FilterPipelineTest.java | 2 +- .../notifier/transformer/TransformerPipelineTest.java | 2 +- 4 files changed, 6 insertions(+), 6 deletions(-) diff --git a/build.gradle.kts b/build.gradle.kts index 4a3b5db4..e96d3320 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -48,7 +48,7 @@ subprojects { dependencies { add("testImplementation", "junit:junit:4.13.2") add("testImplementation", "org.hamcrest:hamcrest-all:1.3") - add("testImplementation", "org.mockito:mockito-core:3.8.0") + add("testImplementation", "org.mockito:mockito-core:5.18.0") } tasks.withType().configureEach { diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts index 12e1b16f..9bab73b0 100644 --- a/rollbar-android/build.gradle.kts +++ b/rollbar-android/build.gradle.kts @@ -36,8 +36,8 @@ android { dependencies { api(project(":rollbar-java")) - testImplementation("junit:junit:4.12") + testImplementation("junit:junit:4.13.1") testImplementation("org.hamcrest:hamcrest-all:1.3") - testImplementation("org.mockito:mockito-core:2.28.2") - androidTestImplementation("org.mockito:mockito-android:+") + testImplementation("org.mockito:mockito-core:5.18.0") + androidTestImplementation("org.mockito:mockito-android:5.18.0") } \ No newline at end of file diff --git a/rollbar-java/src/test/java/com/rollbar/notifier/filter/FilterPipelineTest.java b/rollbar-java/src/test/java/com/rollbar/notifier/filter/FilterPipelineTest.java index 975713be..960792a3 100644 --- a/rollbar-java/src/test/java/com/rollbar/notifier/filter/FilterPipelineTest.java +++ b/rollbar-java/src/test/java/com/rollbar/notifier/filter/FilterPipelineTest.java @@ -22,7 +22,7 @@ public class FilterPipelineTest { @Rule - public MockitoRule rule = new MockitoJUnit().rule(); + public MockitoRule rule = MockitoJUnit.rule(); @Test public void shouldCallFiltersInOrderForPreProcess() { diff --git a/rollbar-java/src/test/java/com/rollbar/notifier/transformer/TransformerPipelineTest.java b/rollbar-java/src/test/java/com/rollbar/notifier/transformer/TransformerPipelineTest.java index add8205e..1065581b 100644 --- a/rollbar-java/src/test/java/com/rollbar/notifier/transformer/TransformerPipelineTest.java +++ b/rollbar-java/src/test/java/com/rollbar/notifier/transformer/TransformerPipelineTest.java @@ -17,7 +17,7 @@ public class TransformerPipelineTest { @Rule - public MockitoRule rule = new MockitoJUnit().rule(); + public MockitoRule rule = MockitoJUnit.rule(); @Test public void shouldCallTransformerInOrder() { From af3b327d43ef93d08caba5a2cb13392880c8eabc Mon Sep 17 00:00:00 2001 From: chris Date: Sun, 17 Aug 2025 23:40:01 -0300 Subject: [PATCH 21/38] test: fix failing test in Java 17 --- .../reactivestreams/notifier/RollbarTest.java | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java b/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java index 41c30c6d..4ecb3381 100644 --- a/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java +++ b/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java @@ -14,8 +14,11 @@ import com.rollbar.notifier.util.BodyFactory; import com.rollbar.reactivestreams.notifier.config.Config; import com.rollbar.reactivestreams.notifier.sender.Sender; + import java.util.HashMap; import java.util.Map; + +import org.apache.hc.core5.http.ConnectionClosedException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -76,7 +79,16 @@ public void shouldNotThrowExceptionWithEmptyConfig() { Throwable error = new RuntimeException("Something went wrong."); - Mono.from(sut.log(error, null, null, Level.ERROR)).block(); + Mono.from(sut.log(error, null, null, Level.ERROR)) + .onErrorResume(ex -> { + if (ex instanceof ConnectionClosedException) { + return Mono.empty(); + } else { + return Mono.error(ex); + } + } + ) + .block(); } @Test From 1223b17b5104145606dd77e3fb680609b88e5dc9 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 18 Aug 2025 19:15:33 -0300 Subject: [PATCH 22/38] build: use kotlin for rollbar-reactive-streams gradle, update testng to v7.10.2 and use mockito-core v5.13.0 --- rollbar-reactive-streams/build.gradle | 49 -------------------- rollbar-reactive-streams/build.gradle.kts | 55 +++++++++++++++++++++++ 2 files changed, 55 insertions(+), 49 deletions(-) delete mode 100644 rollbar-reactive-streams/build.gradle create mode 100644 rollbar-reactive-streams/build.gradle.kts diff --git a/rollbar-reactive-streams/build.gradle b/rollbar-reactive-streams/build.gradle deleted file mode 100644 index 3e588465..00000000 --- a/rollbar-reactive-streams/build.gradle +++ /dev/null @@ -1,49 +0,0 @@ -buildscript { - repositories { - gradlePluginPortal() - mavenCentral() - } - dependencies { - classpath 'com.netflix.nebula:nebula-project-plugin:10.0.1' - } -} - -apply plugin: 'com.netflix.nebula.integtest' - -repositories { - mavenCentral() -} - -dependencies { - api project(':rollbar-java') - api 'org.reactivestreams:reactive-streams:1.0.3' - compileOnly 'org.apache.httpcomponents.client5:httpclient5:5.0.3' - - testImplementation 'org.reactivestreams:reactive-streams-tck:1.0.3' - testImplementation 'org.testng:testng:7.4.0' - testImplementation 'org.mockito:mockito-testng:0.3.0' - testImplementation 'org.apache.httpcomponents.client5:httpclient5:5.0.3' - testImplementation 'org.apache.commons:commons-lang3:3.12.0' - testImplementation 'com.google.code.gson:gson:2.8.2' - - testImplementation platform('io.projectreactor:reactor-bom:2020.0.6') - testImplementation 'io.projectreactor:reactor-core' - - // We'll reuse some of the tests since we're providing compatible implementations - testImplementation(project(path: ':rollbar-java', configuration: 'integTestRuntime')) - testImplementation(project(path: ':rollbar-java', configuration: 'integTestArtifacts')) - - integTestImplementation 'com.github.tomakehurst:wiremock-jre8:2.27.2' - integTestImplementation 'com.google.code.gson:gson:2.8.2' -} - -// The reactive streams TCK tests use TestNG -tasks.register("tckTest", Test) { - useTestNG() -} - -check.dependsOn("tckTest") - -tasks.named("integrationTest").configure { - dependsOn project(':rollbar-java').tasks.named("integTestJar") -} diff --git a/rollbar-reactive-streams/build.gradle.kts b/rollbar-reactive-streams/build.gradle.kts new file mode 100644 index 00000000..5347f5ec --- /dev/null +++ b/rollbar-reactive-streams/build.gradle.kts @@ -0,0 +1,55 @@ +plugins { + id("com.netflix.nebula.integtest") version "10.0.1" +} + +repositories { + mavenCentral() + gradlePluginPortal() +} + +dependencies { + api(project(":rollbar-java")) + api("org.reactivestreams:reactive-streams:1.0.3") + compileOnly("org.apache.httpcomponents.client5:httpclient5:5.0.3") + + testImplementation("org.reactivestreams:reactive-streams-tck:1.0.4") + testImplementation("org.mockito:mockito-core:5.13.0") + testImplementation("org.testng:testng:7.10.2") + testImplementation("org.apache.httpcomponents.client5:httpclient5:5.0.3") + testImplementation("org.apache.commons:commons-lang3:3.12.0") + testImplementation("com.google.code.gson:gson:2.8.2") + + testImplementation(platform("io.projectreactor:reactor-bom:2020.0.6")) + testImplementation("io.projectreactor:reactor-core") + + // Reuse some of the tests since we're providing compatible implementations + testImplementation(project(path = ":rollbar-java", configuration = "integTestRuntime")) + testImplementation(project(path = ":rollbar-java", configuration = "integTestArtifacts")) + + integTestImplementation("com.github.tomakehurst:wiremock-jre8:2.27.2") + integTestImplementation("com.google.code.gson:gson:2.8.2") +} + +// The reactive streams TCK tests use TestNG +tasks.register("tckTest") { + useTestNG() +} + +tasks.withType().configureEach { + // For main sources: keep targeting Java 8 + if (name.contains("main", ignoreCase = true)) { + options.release.set(8) + } + // For test sources: bump to Java 11 + if (name.contains("test", ignoreCase = true)) { + options.release.set(11) + } +} + +tasks.named("check") { + dependsOn("tckTest") +} + +tasks.named("integrationTest") { + dependsOn(project(":rollbar-java").tasks.named("integTestJar")) +} From d517e1f2e8a7c093cd2b1b90d78da19d04094b13 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 18 Aug 2025 19:16:04 -0300 Subject: [PATCH 23/38] test: fix failing tests from mockito update --- .../sender/http/ApacheAsyncHttpTckTest.java | 19 +++++++++++++------ 1 file changed, 13 insertions(+), 6 deletions(-) diff --git a/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/sender/http/ApacheAsyncHttpTckTest.java b/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/sender/http/ApacheAsyncHttpTckTest.java index 1ceb0450..50b0e05a 100644 --- a/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/sender/http/ApacheAsyncHttpTckTest.java +++ b/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/sender/http/ApacheAsyncHttpTckTest.java @@ -4,10 +4,11 @@ import org.apache.hc.client5.http.async.methods.SimpleHttpResponse; import org.apache.hc.core5.concurrent.FutureCallback; import org.mockito.Mock; +import org.mockito.Mockito; +import org.mockito.MockitoAnnotations; +import org.mockito.MockitoSession; import org.mockito.quality.Strictness; import org.mockito.stubbing.Answer; -import org.mockito.testng.MockitoSettings; -import org.mockito.testng.MockitoTestNGListener; import org.reactivestreams.Publisher; import org.reactivestreams.tck.PublisherVerification; import org.reactivestreams.tck.TestEnvironment; @@ -24,19 +25,16 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.doAnswer; -// The reactivestreams TCK tests use TestNG but its class scanning doesn't work if the annotations are only -// present in the base class, we need at least one TestNG annotation on the derived class. @Test -@Listeners(MockitoTestNGListener.class) // The structure of the suite is that we just provide the publisher, and the TCK tests control the entire flow, // so we don't really care if they call our stubbed methods or not. -@MockitoSettings(strictness = Strictness.LENIENT) public class ApacheAsyncHttpTckTest extends PublisherVerification { @Mock private HttpAsyncClient client; private ScheduledExecutorService executor; private final String url = "ignored"; + private MockitoSession mockitoSession; public ApacheAsyncHttpTckTest() { super(new TestEnvironment(1000, 1000)); @@ -45,12 +43,21 @@ public ApacheAsyncHttpTckTest() { @BeforeMethod public void setUp() throws Exception { super.setUp(); + + mockitoSession = Mockito.mockitoSession() + .initMocks(this) + .strictness(Strictness.LENIENT) + .startMocking(); + executor = Executors.newSingleThreadScheduledExecutor(); } @AfterMethod public void tearDown() { executor.shutdown(); + if (mockitoSession != null) { + mockitoSession.finishMocking(); + } } @Override From 44bb8aa13f63b30ee834607a8b64ce28e151ba83 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 18 Aug 2025 21:43:53 -0300 Subject: [PATCH 24/38] build: add JVM flag for BlockHound test tasks on JDK 13+ --- rollbar-reactive-streams-reactor/build.gradle | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/rollbar-reactive-streams-reactor/build.gradle b/rollbar-reactive-streams-reactor/build.gradle index 332169cf..34910802 100644 --- a/rollbar-reactive-streams-reactor/build.gradle +++ b/rollbar-reactive-streams-reactor/build.gradle @@ -75,4 +75,9 @@ interleave { } } +test { + useJUnitPlatform() + jvmArgs '-XX:+AllowRedefinitionToAddDeleteMethods' +} + project.tasks.check.dependsOn(interleave) From c93f7113f0e15d081de8f672f1f67eaf2ddaaeb3 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 18 Aug 2025 21:53:57 -0300 Subject: [PATCH 25/38] build: add flag only in Java 17 --- rollbar-reactive-streams-reactor/build.gradle | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/rollbar-reactive-streams-reactor/build.gradle b/rollbar-reactive-streams-reactor/build.gradle index 34910802..1519f6b1 100644 --- a/rollbar-reactive-streams-reactor/build.gradle +++ b/rollbar-reactive-streams-reactor/build.gradle @@ -77,7 +77,9 @@ interleave { test { useJUnitPlatform() - jvmArgs '-XX:+AllowRedefinitionToAddDeleteMethods' + if (JavaVersion.current() == JavaVersion.VERSION_17) { + jvmArgs("-XX:+AllowRedefinitionToAddDeleteMethods") + } } project.tasks.check.dependsOn(interleave) From 139fe16fa25e949cd1dd99dcb7577f059d566a20 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 18 Aug 2025 22:09:25 -0300 Subject: [PATCH 26/38] test: fix failing test --- .../reactivestreams/notifier/RollbarTest.java | 20 +++++-------------- 1 file changed, 5 insertions(+), 15 deletions(-) diff --git a/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java b/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java index 4ecb3381..d5420784 100644 --- a/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java +++ b/rollbar-reactive-streams/src/test/java/com/rollbar/reactivestreams/notifier/RollbarTest.java @@ -5,9 +5,7 @@ import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.sameInstance; import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; +import static org.mockito.Mockito.*; import com.rollbar.api.payload.data.Level; import com.rollbar.notifier.sender.result.Response; @@ -18,7 +16,6 @@ import java.util.HashMap; import java.util.Map; -import org.apache.hc.core5.http.ConnectionClosedException; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -73,22 +70,15 @@ public void shouldDoNothingIfDisabled() { @Test public void shouldNotThrowExceptionWithEmptyConfig() { - Config config = withAccessToken("access_token").build(); + Sender mockSender = mock(Sender.class); + when(mockSender.send(any())).thenReturn(Mono.empty()); + Config config = withAccessToken("access_token").sender(mockSender).build(); Rollbar sut = new Rollbar(config); Throwable error = new RuntimeException("Something went wrong."); - Mono.from(sut.log(error, null, null, Level.ERROR)) - .onErrorResume(ex -> { - if (ex instanceof ConnectionClosedException) { - return Mono.empty(); - } else { - return Mono.error(ex); - } - } - ) - .block(); + Mono.from(sut.log(error, null, null, Level.ERROR)).block(); } @Test From f41060c946981def5c2cbbcc7d2168d9bbb56790 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 18 Aug 2025 22:20:58 -0300 Subject: [PATCH 27/38] build(android): remove package from manifests, is deprecated in AGP 8+ --- examples/rollbar-android/src/main/AndroidManifest.xml | 3 +-- rollbar-android/src/main/AndroidManifest.xml | 1 - 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/examples/rollbar-android/src/main/AndroidManifest.xml b/examples/rollbar-android/src/main/AndroidManifest.xml index 7a40e790..7da5aa4a 100644 --- a/examples/rollbar-android/src/main/AndroidManifest.xml +++ b/examples/rollbar-android/src/main/AndroidManifest.xml @@ -1,7 +1,6 @@ + xmlns:tools="http://schemas.android.com/tools"> diff --git a/rollbar-android/src/main/AndroidManifest.xml b/rollbar-android/src/main/AndroidManifest.xml index 9eb5a74b..26b04ec5 100644 --- a/rollbar-android/src/main/AndroidManifest.xml +++ b/rollbar-android/src/main/AndroidManifest.xml @@ -1,6 +1,5 @@ From c12acf8a7ad83aa9787397527fe9aac13a64a7a6 Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 19 Aug 2025 00:49:21 -0300 Subject: [PATCH 28/38] build(android-example): fix namespace misspelling --- examples/rollbar-android/build.gradle | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/examples/rollbar-android/build.gradle b/examples/rollbar-android/build.gradle index d81db593..0dc0cd68 100644 --- a/examples/rollbar-android/build.gradle +++ b/examples/rollbar-android/build.gradle @@ -11,7 +11,7 @@ buildscript { apply plugin: 'com.android.application' android { - namespace 'com.rollbar.examples.android' + namespace 'com.rollbar.example.android' compileSdkVersion = 33 defaultConfig { applicationId "com.rollbar.example.android" From 1f3749f3f06fa6e3687d919a3a1629f17e4e401a Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 19 Aug 2025 01:17:14 -0300 Subject: [PATCH 29/38] build: add Gradle JVM option to increase MetaspaceSize and heap in CI and locally --- gradle.properties | 1 + 1 file changed, 1 insertion(+) diff --git a/gradle.properties b/gradle.properties index 22599278..7e825590 100644 --- a/gradle.properties +++ b/gradle.properties @@ -2,6 +2,7 @@ VERSION_NAME=2.0.0 GROUP=com.rollbar android.useAndroidX=true +org.gradle.jvmargs=-Xmx2g -XX:MaxMetaspaceSize=512m -XX:+HeapDumpOnOutOfMemoryError -Dfile.encoding=UTF-8 POM_DESCRIPTION=For connecting your applications built on the JVM to Rollbar for Error Reporting POM_URL=https://github.com/rollbar/rollbar-java From 82db09a7f77465714cef73673b8cb820281f1dda Mon Sep 17 00:00:00 2001 From: chris Date: Tue, 19 Aug 2025 18:28:21 -0300 Subject: [PATCH 30/38] build: use Vanniktech plugin for release --- .github/scripts/release.sh | 12 ++++-------- .github/workflows/ci.yml | 19 ++++++++++++------- 2 files changed, 16 insertions(+), 15 deletions(-) diff --git a/.github/scripts/release.sh b/.github/scripts/release.sh index 2a5df64c..1899670c 100755 --- a/.github/scripts/release.sh +++ b/.github/scripts/release.sh @@ -38,13 +38,9 @@ elif [[ -z $VERSION ]]; then elif ! [[ $VERSION =~ $SEMVER_REGEX ]]; then echo "Skipping release. Bad version used." else - - if [[ ${BASH_REMATCH[5]} == 'SNAPSHOT' ]]; then - echo "Doing SNAPSHOT release..." - ./gradlew -Dorg.gradle.internal.http.socketTimeout=300000 -Dorg.gradle.internal.http.connectionTimeout=300000 publishToSonatype - else - echo "Doing release..." - ./gradlew -Dorg.gradle.internal.http.socketTimeout=300000 -Dorg.gradle.internal.http.connectionTimeout=300000 publishToSonatype closeAndReleaseRepository - fi + echo "Doing release with Vanniktech Maven Publish plugin..." + ./gradlew -Dorg.gradle.internal.http.socketTimeout=300000 \ + -Dorg.gradle.internal.http.connectionTimeout=300000 \ + publish echo "Release done!" fi diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index ff937bed..f80d4778 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -6,9 +6,9 @@ on: required: true RELEASE_GPG_PRIVATE_KEY_PASSPHRASE: required: true - NEXUS_USERNAME: + MAVENCENTRAL_USERNAME: required: true - NEXUS_PASSWORD: + MAVENCENTRAL_PASSWORD: required: true push: branches: [ master ] @@ -123,11 +123,16 @@ jobs: run: | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "platforms;android-33" "build-tools;34.0.0" + - name: Configure Gradle properties + run: | + mkdir -p ~/.gradle + cat <> ~/.gradle/gradle.properties + mavenCentralUsername=${{ secrets.MAVENCENTRAL_USERNAME }} + mavenCentralPassword=${{ secrets.MAVENCENTRAL_PASSWORD }} + signing.password=${{ secrets.RELEASE_GPG_PRIVATE_KEY_PASSPHRASE }} + signing.key=${{ secrets.RELEASE_GPG_PRIVATE_KEY }} + EOF + - name: Release - env: - RELEASE_GPG_PRIVATE_KEY: ${{ secrets.RELEASE_GPG_PRIVATE_KEY }} - RELEASE_GPG_PRIVATE_KEY_PASSPHRASE: ${{ secrets.RELEASE_GPG_PRIVATE_KEY_PASSPHRASE }} - NEXUS_USERNAME: ${{ secrets.NEXUS_USERNAME }} - NEXUS_PASSWORD: ${{ secrets.NEXUS_PASSWORD }} run: | ./.github/scripts/release.sh From 149dfe948956feac44d4e2a2770eb765b5663a3d Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 25 Aug 2025 18:32:58 -0300 Subject: [PATCH 31/38] build: fix release missing coordinates and add android.quality.gradle --- .../conventions/src/main/kotlin/RollbarPublishPlugin.kt | 7 ++++++- build.gradle.kts | 8 ++++++-- rollbar-android/build.gradle.kts | 3 +-- 3 files changed, 13 insertions(+), 5 deletions(-) diff --git a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt index f36eee98..8aa3f7d1 100644 --- a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt +++ b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt @@ -19,6 +19,12 @@ class RollbarPublishPlugin : Plugin { project.plugins.apply("com.vanniktech.maven.publish") project.extensions.configure(MavenPublishBaseExtension::class.java) { + coordinates( + groupId = project.findProperty("GROUP") as String, + artifactId = project.name, + version = project.findProperty("VERSION_NAME") as String, + ) + pom { name.set(project.findProperty("POM_NAME") as String) description.set(project.findProperty("POM_DESCRIPTION") as String) @@ -55,7 +61,6 @@ class RollbarPublishPlugin : Plugin { } publishToMavenCentral() - signAllPublications() } } } diff --git a/build.gradle.kts b/build.gradle.kts index e96d3320..986bbc74 100644 --- a/build.gradle.kts +++ b/build.gradle.kts @@ -21,12 +21,16 @@ subprojects { val isExample = name.contains("examples") || parent?.name == "examples" val isAndroid = name.contains("android") - if (isExample || isAndroid) { + if (isExample) { return@subprojects } - apply(plugin = "java-library") apply(plugin = "com.rollbar.conventions.release") + if (isAndroid) { + return@subprojects + } + + apply(plugin = "java-library") apply(from = "$rootDir/gradle/quality.gradle") apply(from = "$rootDir/gradle/compatibility.gradle") diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts index 9bab73b0..1cb0dd75 100644 --- a/rollbar-android/build.gradle.kts +++ b/rollbar-android/build.gradle.kts @@ -1,9 +1,8 @@ plugins { id("com.android.library") - id("com.rollbar.conventions.release") } -//apply(from = "$rootDir/gradle/android.quality.gradle") //TODO: Update as convention plugin +apply(from = "$rootDir/gradle/android.quality.gradle") android { namespace = "com.rollbar.android" From 3d66a7bf6309d610943c3a5941c4ab69723ad694 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 27 Aug 2025 19:06:45 -0300 Subject: [PATCH 32/38] build: skip android.quality.gradle for now --- rollbar-android/build.gradle.kts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/rollbar-android/build.gradle.kts b/rollbar-android/build.gradle.kts index 1cb0dd75..781aea60 100644 --- a/rollbar-android/build.gradle.kts +++ b/rollbar-android/build.gradle.kts @@ -2,7 +2,7 @@ plugins { id("com.android.library") } -apply(from = "$rootDir/gradle/android.quality.gradle") +//apply(from = "$rootDir/gradle/android.quality.gradle") TODO: use the plugin android { namespace = "com.rollbar.android" From 425e02ed0026b5dcb26bc4a1c5b178347f5e9518 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 27 Aug 2025 19:26:31 -0300 Subject: [PATCH 33/38] doc: update CHANGELOG for v 2.1.0-alpha.1 --- CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9d0fb7eb..b8a9730c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,15 @@ # Change Log +# 2.1.0-alpha.1 + +### Build +- Solve security issues in native agent [#328](https://github.com/rollbar/rollbar-java/pull/328) +- Bump android target sdk to 33 [#339](https://github.com/rollbar/rollbar-java/pull/339) + +### Feat +- Add threads information to payload [#327](https://github.com/rollbar/rollbar-java/pull/327) +- Add ANR report [#323](https://github.com/rollbar/rollbar-java/pull/323) + # 2.0.0 - Switching to full release From 35def2135cdae58b9246d56e2675205513959c01 Mon Sep 17 00:00:00 2001 From: chris Date: Wed, 27 Aug 2025 19:39:26 -0300 Subject: [PATCH 34/38] update version to 2.1.0-alpha.1 and run release from branch to test publishing --- .github/scripts/release.sh | 8 ++++---- gradle.properties | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/.github/scripts/release.sh b/.github/scripts/release.sh index 1899670c..8184d5cf 100755 --- a/.github/scripts/release.sh +++ b/.github/scripts/release.sh @@ -29,10 +29,10 @@ EXPECTED_REF="refs/heads/${BRANCH}" if [[ "$GITHUB_REPOSITORY" != "$REPO" ]]; then echo "Skipping release: wrong repository. Expected '$REPO' but was '$GITHUB_REPOSITORY'." -elif [[ "$IS_PULL_REQUEST" != "false" ]]; then - echo "Skipping release. It was pull request." -elif [[ "$GITHUB_REF" != "$EXPECTED_REF" ]]; then - echo "Skipping release. Expected '$EXPECTED_REF' but was '$GITHUB_REF'." +#elif [[ "$IS_PULL_REQUEST" != "false" ]]; then +# echo "Skipping release. It was pull request." +#elif [[ "$GITHUB_REF" != "$EXPECTED_REF" ]]; then +# echo "Skipping release. Expected '$EXPECTED_REF' but was '$GITHUB_REF'." elif [[ -z $VERSION ]]; then echo "Skipping release. Version value not found." elif ! [[ $VERSION =~ $SEMVER_REGEX ]]; then diff --git a/gradle.properties b/gradle.properties index 7e825590..d057ee92 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=2.0.0 +VERSION_NAME=2.1.0-alpha.1 GROUP=com.rollbar android.useAndroidX=true From 3c0d18f04db44f0fb24f7ede76b06520e31f5422 Mon Sep 17 00:00:00 2001 From: chris Date: Sat, 6 Sep 2025 22:04:24 -0300 Subject: [PATCH 35/38] build: fix signing publication --- build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt | 1 + 1 file changed, 1 insertion(+) diff --git a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt index 8aa3f7d1..0ccf5b15 100644 --- a/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt +++ b/build-logic/conventions/src/main/kotlin/RollbarPublishPlugin.kt @@ -61,6 +61,7 @@ class RollbarPublishPlugin : Plugin { } publishToMavenCentral() + signAllPublications() } } } From 707b7b5b4e88886f57731bb3474690e43506ab40 Mon Sep 17 00:00:00 2001 From: chris Date: Mon, 15 Sep 2025 16:09:51 -0300 Subject: [PATCH 36/38] build: update signing --- .github/workflows/ci.yml | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index f80d4778..9be2f8a1 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -123,14 +123,19 @@ jobs: run: | ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager "platforms;android-33" "build-tools;34.0.0" - - name: Configure Gradle properties + - name: Import GPG key file run: | mkdir -p ~/.gradle + echo "${{ secrets.RELEASE_GPG_SECRING_BASE_64 }}" | base64 --decode > ~/.gradle/secring.gpg + + - name: Configure Gradle properties + run: | cat <> ~/.gradle/gradle.properties mavenCentralUsername=${{ secrets.MAVENCENTRAL_USERNAME }} mavenCentralPassword=${{ secrets.MAVENCENTRAL_PASSWORD }} signing.password=${{ secrets.RELEASE_GPG_PRIVATE_KEY_PASSPHRASE }} - signing.key=${{ secrets.RELEASE_GPG_PRIVATE_KEY }} + signing.keyId=${{ secrets.RELEASE_GPG_KEY_ID }} + signing.secretKeyRingFile=/home/runner/.gradle/secring.gpg EOF - name: Release From da9020633feefb787dcd99ac321c47e21c459337 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 19 Sep 2025 02:41:29 -0300 Subject: [PATCH 37/38] revert: do not release from this PR branch --- .github/scripts/release.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/.github/scripts/release.sh b/.github/scripts/release.sh index 8184d5cf..1899670c 100755 --- a/.github/scripts/release.sh +++ b/.github/scripts/release.sh @@ -29,10 +29,10 @@ EXPECTED_REF="refs/heads/${BRANCH}" if [[ "$GITHUB_REPOSITORY" != "$REPO" ]]; then echo "Skipping release: wrong repository. Expected '$REPO' but was '$GITHUB_REPOSITORY'." -#elif [[ "$IS_PULL_REQUEST" != "false" ]]; then -# echo "Skipping release. It was pull request." -#elif [[ "$GITHUB_REF" != "$EXPECTED_REF" ]]; then -# echo "Skipping release. Expected '$EXPECTED_REF' but was '$GITHUB_REF'." +elif [[ "$IS_PULL_REQUEST" != "false" ]]; then + echo "Skipping release. It was pull request." +elif [[ "$GITHUB_REF" != "$EXPECTED_REF" ]]; then + echo "Skipping release. Expected '$EXPECTED_REF' but was '$GITHUB_REF'." elif [[ -z $VERSION ]]; then echo "Skipping release. Version value not found." elif ! [[ $VERSION =~ $SEMVER_REGEX ]]; then From b61764f46c655b3db75e858d5bf1b8a6a153d618 Mon Sep 17 00:00:00 2001 From: chris Date: Fri, 19 Sep 2025 02:42:05 -0300 Subject: [PATCH 38/38] fix: publish without manual confirmation in maven central --- .github/scripts/release.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/.github/scripts/release.sh b/.github/scripts/release.sh index 1899670c..9ef5e032 100755 --- a/.github/scripts/release.sh +++ b/.github/scripts/release.sh @@ -39,8 +39,6 @@ elif ! [[ $VERSION =~ $SEMVER_REGEX ]]; then echo "Skipping release. Bad version used." else echo "Doing release with Vanniktech Maven Publish plugin..." - ./gradlew -Dorg.gradle.internal.http.socketTimeout=300000 \ - -Dorg.gradle.internal.http.connectionTimeout=300000 \ - publish + ./gradlew publishAndReleaseToMavenCentral --no-daemon --stacktrace echo "Release done!" fi