diff --git a/.github/fetch_to_tag.sh b/.github/scripts/fetch_to_tag.sh similarity index 100% rename from .github/fetch_to_tag.sh rename to .github/scripts/fetch_to_tag.sh diff --git a/.github/release.sh b/.github/scripts/release.sh similarity index 94% rename from .github/release.sh rename to .github/scripts/release.sh index d4530784..2a5df64c 100755 --- a/.github/release.sh +++ b/.github/scripts/release.sh @@ -38,8 +38,6 @@ elif [[ -z $VERSION ]]; then elif ! [[ $VERSION =~ $SEMVER_REGEX ]]; then echo "Skipping release. Bad version used." else - # Gradle needs the absolute path to the secring - export GPG_KEY_LOCATION="$(realpath "$GPG_KEY_LOCATION")" if [[ ${BASH_REMATCH[5]} == 'SNAPSHOT' ]]; then echo "Doing SNAPSHOT release..." diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6fd5b607..b47fd1b0 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -1,130 +1,110 @@ name: rollbar-java CI on: + workflow_call: + secrets: + RELEASE_GPG_PRIVATE_KEY: + required: true + RELEASE_GPG_PRIVATE_KEY_PASSPHRASE: + required: true + NEXUS_USERNAME: + required: true + NEXUS_PASSWORD: + required: true push: - branches: [master] + branches: [ master ] pull_request: - branches: [master] + branches: [ master ] + jobs: + validation: + name: Gradle wrapper validation + runs-on: ubuntu-20.04 + steps: + - uses: actions/checkout@v4 + - uses: gradle/actions/wrapper-validation@v3 + build: runs-on: ubuntu-20.04 - name: Java ${{ matrix.java }} + name: Build with Java ${{ matrix.java }} + needs: [ validation ] strategy: + fail-fast: false matrix: - java: [8, 11] + # Must upgrade Gradle before we can go past Java 15 here. + # https://docs.gradle.org/current/userguide/compatibility.html + java: [ 8, 11 ] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - name: Fetch git tags - run: ./.github/fetch_to_tag.sh - - # Our build uses JDK7's rt.jar to make sure the artifact is fully - # compatible with Java 7, so we let this action set Java 7 up for us - # and we store its JAVA_HOME - - name: Set up Java 7 - uses: actions/setup-java@v1 - with: - java-version: 7 + run: ./.github/scripts/fetch_to_tag.sh - - name: Capture JDK7_HOME - run: echo "export JDK7_HOME=\"$JAVA_HOME\"" > ~/.jdk7_home - - - name: Set up Java 17 (needed for Spring Boot 3) - uses: actions/setup-java@v1 - with: - java-version: 17 - - - name: Capture JDK17_HOME - run: echo "export JDK17_HOME=\"$JAVA_HOME\"" > ~/.jdk17_home - - # This is the JDK that'll run the build - name: Set up Java ${{ matrix.java }} - uses: actions/setup-java@v1 + uses: actions/setup-java@v4 with: java-version: ${{ matrix.java }} + distribution: 'zulu' + cache: 'gradle' - - name: Cache Gradle packages - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-${{ matrix.java }}-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle-${{ matrix.java }}- + # gradle/actions/setup-gradle@v3 might offer better caching and other benefits through better integration. + # https://github.com/gradle/actions/blob/main/docs/setup-gradle.md - name: Environment info run: | ./gradlew --version - echo ANDROID_SDK_ROOT: ${ANDROID_SDK_ROOT} - ${ANDROID_SDK_ROOT}/tools/bin/sdkmanager --version echo JAVA_HOME: ${JAVA_HOME} java -version javac -version + echo ANDROID_HOME: ${ANDROID_HOME} + echo ANDROID_SDK_ROOT: ${ANDROID_SDK_ROOT} - name: Build - run: 'source ~/.jdk7_home && ./gradlew clean build' - - - name: Check - run: 'source ~/.jdk7_home && ./gradlew clean check' + run: ./gradlew clean build - - name: Cleanup Gradle cache - # Recommended by https://docs.github.com/en/actions/guides/building-and-testing-java-with-gradle - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties + - name: Upload build reports + if: always() + uses: actions/upload-artifact@v4 + with: + name: java-${{ matrix.java }}-build-reports + path: | + **/build/reports/* release: runs-on: ubuntu-20.04 + name: Release # It would be nice to run this as part of the build job, since it would be # 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 ] steps: - - uses: actions/checkout@v2 + - uses: actions/checkout@v4 - - name: Set up Java 7 - uses: actions/setup-java@v1 + - name: Set up Java 11 for the Android SDK Manager + uses: actions/setup-java@v4 with: - java-version: 7 + java-version: 11 + distribution: 'zulu' + cache: 'gradle' - - name: Capture JDK7_HOME - run: echo "export JDK7_HOME=\"$JAVA_HOME\"" > ~/.jdk7_home + - 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;30.0.3" - - name: Set up Java 8 - uses: actions/setup-java@v1 + - name: Set up Java 8 for the build + uses: actions/setup-java@v4 with: java-version: 8 - - - name: Cache Gradle packages - uses: actions/cache@v2 - with: - path: | - ~/.gradle/caches - ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-8-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} - restore-keys: | - ${{ runner.os }}-gradle-8- + distribution: 'zulu' + cache: 'gradle' - name: Release env: - SECRING_GPG_IV: ${{ secrets.SECRING_GPG_IV }} - SECRING_GPG_KEY: ${{ secrets.SECRING_GPG_KEY }} - GPG_KEY_ID: ${{ secrets.GPG_KEY_ID }} - GPG_PASSPHRASE: ${{ secrets.GPG_PASSPHRASE }} - ENCRYPTED_GPG_KEY_LOCATION: ./.github/secring.gpg.enc - GPG_KEY_LOCATION: ./.github/secring.gpg + 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: | - if test "$GITHUB_REPOSITORY" = "rollbar/rollbar-java" -a "$GITHUB_BASE_REF" = ""; then - openssl enc -aes-256-cbc -K "$SECRING_GPG_KEY" -iv "$SECRING_GPG_IV" -in "$ENCRYPTED_GPG_KEY_LOCATION" -out "$GPG_KEY_LOCATION" -d - fi && - source ~/.jdk7_home && - ./.github/release.sh - - - name: Cleanup Gradle cache - run: | - rm -f ~/.gradle/caches/modules-2/modules-2.lock - rm -f ~/.gradle/caches/modules-2/gc.properties + ./gradlew -Dorg.gradle.internal.http.socketTimeout=300000 -Dorg.gradle.internal.http.connectionTimeout=300000 publishToSonatype diff --git a/.github/workflows/gradle-wrapper-validation.yml b/.github/workflows/gradle-wrapper-validation.yml deleted file mode 100644 index 0bde8aec..00000000 --- a/.github/workflows/gradle-wrapper-validation.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: "Validate Gradle Wrapper" -on: [push, pull_request] - -jobs: - validation: - name: "Gradle wrapper validation" - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2 - - uses: gradle/wrapper-validation-action@v1 diff --git a/build.gradle b/build.gradle index 850d1cc2..67f5e7c1 100644 --- a/build.gradle +++ b/build.gradle @@ -27,14 +27,11 @@ allprojects { repositories { google() mavenCentral() - jcenter() } } subprojects { project -> - if (!project.name.contains('android') && - !project.parent.name.equals("examples") && - !project.name.contains('examples')) { + if (!project.name.contains('android') && !project.parent.name.equals("examples") && !project.name.contains('examples')) { apply plugin: 'java-library' apply from: "$rootDir/gradle/release.gradle" @@ -63,23 +60,16 @@ subprojects { project -> } compileJava { - if (JavaVersion.current().compareTo(JavaVersion.VERSION_1_9) >= 0) { - // Use the --release javac flag, available since JDK9, which is equivalent to setting - // the source, target, and bootstrap classpath, and catches all usages of stdlib - // features not available in the target version. - options.release = 7 + if (JavaVersion.current().isJava9Compatible()) { + options.release = 8 } else { - sourceCompatibility = JavaVersion.VERSION_1_7 - targetCompatibility = JavaVersion.VERSION_1_7 - } - - if (System.env.JDK7_HOME) { - options.bootstrapClasspath = files("${System.env.JDK7_HOME}/jre/lib/rt.jar") + sourceCompatibility = JavaVersion.VERSION_1_8 + targetCompatibility = JavaVersion.VERSION_1_8 } } compileTestJava { - if (JavaVersion.current().compareTo(JavaVersion.VERSION_1_9) >= 0) { + if (JavaVersion.current().isJava9Compatible()) { options.release = 8 } else { sourceCompatibility = JavaVersion.VERSION_1_8 diff --git a/examples/rollbar-android/build.gradle b/examples/rollbar-android/build.gradle index 825993a1..41e42406 100644 --- a/examples/rollbar-android/build.gradle +++ b/examples/rollbar-android/build.gradle @@ -2,10 +2,9 @@ buildscript { repositories { google() mavenCentral() - jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.2' + classpath 'com.android.tools.build:gradle:4.2.2' } } @@ -13,10 +12,12 @@ apply plugin: 'com.android.application' android { compileSdkVersion 27 - buildToolsVersion "28.0.3" + buildToolsVersion "30.0.3" defaultConfig { applicationId "com.rollbar.example.android" minSdkVersion 16 + // FIXME: Pending further discussion + //noinspection ExpiredTargetSdkVersion targetSdkVersion 27 versionCode 1 versionName "1.0" diff --git a/examples/rollbar-spring-boot3-webmvc/build.gradle b/examples/rollbar-spring-boot3-webmvc/build.gradle index 2e3128e6..7be0c15b 100644 --- a/examples/rollbar-spring-boot3-webmvc/build.gradle +++ b/examples/rollbar-spring-boot3-webmvc/build.gradle @@ -6,7 +6,11 @@ plugins { group = 'com.rollbar.example' version = VERSION_NAME -sourceCompatibility = '17' + +java { + sourceCompatibility = JavaVersion.VERSION_17 + targetCompatibility = JavaVersion.VERSION_17 +} repositories { mavenLocal() diff --git a/examples/rollbar-spring-webmvc/build.gradle b/examples/rollbar-spring-webmvc/build.gradle index 9595f322..34337a90 100644 --- a/examples/rollbar-spring-webmvc/build.gradle +++ b/examples/rollbar-spring-webmvc/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/examples/rollbar-struts2-spring/build.gradle b/examples/rollbar-struts2-spring/build.gradle index b36b349d..f324e8b8 100755 --- a/examples/rollbar-struts2-spring/build.gradle +++ b/examples/rollbar-struts2-spring/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/examples/rollbar-struts2/build.gradle b/examples/rollbar-struts2/build.gradle index 0590ea86..caa90366 100755 --- a/examples/rollbar-struts2/build.gradle +++ b/examples/rollbar-struts2/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/examples/rollbar-web/build.gradle b/examples/rollbar-web/build.gradle index 8dead54f..ea6e8263 100755 --- a/examples/rollbar-web/build.gradle +++ b/examples/rollbar-web/build.gradle @@ -1,6 +1,6 @@ buildscript { repositories { - jcenter() + mavenCentral() } dependencies { diff --git a/gradle.properties b/gradle.properties index 16e928be..f9e38dea 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ -VERSION_NAME=1.10.1-SNAPSHOT +VERSION_NAME=1.10.2-SNAPSHOT-2024070701 GROUP=com.rollbar POM_DESCRIPTION=For connecting your applications built on the JVM to Rollbar for Error Reporting diff --git a/gradle/release.gradle b/gradle/release.gradle index c1e150c6..aef0d97d 100644 --- a/gradle/release.gradle +++ b/gradle/release.gradle @@ -1,8 +1,7 @@ apply plugin: 'signing' apply plugin: 'maven-publish' - - apply plugin: "de.marcphilipp.nexus-publish" + nexusPublishing { repositories { sonatype { @@ -12,16 +11,6 @@ nexusPublishing { } } -gradle.taskGraph.whenReady { taskGraph -> - if (taskGraph.allTasks.any { it instanceof Sign }) { - allprojects { - ext."signing.keyId" = System.getenv("GPG_KEY_ID") - ext."signing.secretKeyRingFile" = System.getenv("GPG_KEY_LOCATION") - ext."signing.password" = System.getenv("GPG_PASSPHRASE") - } - } -} - afterEvaluate { if (project.parent != null && !project.parent.name.equals("examples") && !project.name.contains('examples')) { if (!project.hasProperty('android')) { @@ -93,6 +82,9 @@ afterEvaluate { 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 } } @@ -147,7 +139,7 @@ afterEvaluate { name = POM_NAME description = POM_DESCRIPTION url = POM_URL - + scm { url = POM_SCM_URL connection = POM_SCM_CONNECTION @@ -175,6 +167,9 @@ afterEvaluate { } 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 } } diff --git a/rollbar-android/build.gradle b/rollbar-android/build.gradle index 12e7a868..7a155de4 100644 --- a/rollbar-android/build.gradle +++ b/rollbar-android/build.gradle @@ -2,16 +2,15 @@ buildscript { repositories { google() mavenCentral() - jcenter() } dependencies { - classpath 'com.android.tools.build:gradle:3.6.2' + classpath 'com.android.tools.build:gradle:4.2.2' } } repositories { google() - jcenter() + mavenCentral() } apply plugin: 'com.android.library' @@ -20,10 +19,12 @@ apply from: "$rootDir/gradle/android.quality.gradle" android { compileSdkVersion 27 - buildToolsVersion '28.0.3' + buildToolsVersion '30.0.3' // Going above here requires bumping the AGP to version 4+ defaultConfig { minSdkVersion 16 + // FIXME: Pending further discussion + //noinspection ExpiredTargetSdkVersion targetSdkVersion 27 consumerProguardFiles 'proguard-rules.pro' manifestPlaceholders = [notifierVersion: VERSION_NAME] diff --git a/rollbar-android/src/main/AndroidManifest.xml b/rollbar-android/src/main/AndroidManifest.xml index 48596ed4..9eb5a74b 100644 --- a/rollbar-android/src/main/AndroidManifest.xml +++ b/rollbar-android/src/main/AndroidManifest.xml @@ -4,9 +4,9 @@ android:versionCode="1" android:versionName="1.0" > + + - - \ No newline at end of file diff --git a/rollbar-reactive-streams-reactor/build.gradle b/rollbar-reactive-streams-reactor/build.gradle index f7dc5aac..332169cf 100644 --- a/rollbar-reactive-streams-reactor/build.gradle +++ b/rollbar-reactive-streams-reactor/build.gradle @@ -34,18 +34,6 @@ dependencies { } } -compileJava { - if (JavaVersion.current() >= JavaVersion.VERSION_1_9) { - options.release = 8 - } else { - sourceCompatibility = JavaVersion.VERSION_1_8 - targetCompatibility = JavaVersion.VERSION_1_8 - } - - // Unset this since it's been set to Java 7's rt.jar by the parent project - options.bootstrapClasspath = null -} - test { // Our core suite uses Junit 5 to take advantage of reactor's Blockhound verification. useJUnitPlatform()