From 20da203611a14c46c6d2809b5ccb8950b7e68f17 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 14:49:50 -0400 Subject: [PATCH 01/12] ci: java8 build with java11 compilation --- .github/workflows/ci.yaml | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index ba06ae58f..a03878b3e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -5,21 +5,38 @@ on: pull_request: name: ci jobs: - units: + units-java11: runs-on: ubuntu-latest - strategy: - matrix: - java: [8, 11] steps: - - uses: actions/checkout@v2 - - uses: actions/setup-java@v1 + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 with: - java-version: ${{ matrix.java }} + java-version: 11 + distribution: zulu - run: java -version - run: .kokoro/build.sh env: JOB_TYPE: test - + units-java8: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v3 + - uses: actions/setup-java@v3 + with: + java-version: 8 + distribution: zulu + - run: java -version + - run: which java + - uses: actions/setup-java@v3 + with: + java-version: 11 + distribution: zulu + - run: java -version + - run: which java + - run: printenv + - run: .kokoro/build.sh + env: + JOB_TYPE: test bazel: runs-on: ubuntu-latest # Not using a container. The ubuntu-latest has Bazel 4.2 installed as of From cb7d86b79866b4059ca9593681858686ca1c2f48 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 14:59:08 -0400 Subject: [PATCH 02/12] ci: build script to distinguish JDK 11 and JDK 8 --- .github/workflows/ci.yaml | 2 ++ .kokoro/build.sh | 25 ++++++++++++++++++++++--- 2 files changed, 24 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index a03878b3e..6442451bb 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -27,12 +27,14 @@ jobs: distribution: zulu - run: java -version - run: which java + - run: export JAVA8_HOME=${JAVA_HOME} - uses: actions/setup-java@v3 with: java-version: 11 distribution: zulu - run: java -version - run: which java + - run: export JAVA11_HOME=${JAVA_HOME} - run: printenv - run: .kokoro/build.sh env: diff --git a/.kokoro/build.sh b/.kokoro/build.sh index b386de565..93b4b5582 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -19,8 +19,27 @@ scriptDir=$(realpath $(dirname "${BASH_SOURCE[0]}")) # cd to the parent directory, i.e. the root of the git repo cd ${scriptDir}/.. -# Print out Java -java -version echo $JOB_TYPE -./gradlew build publishToMavenLocal +function setJava() { + export JAVA_HOME=$1 + export PATH=${JAVA_HOME}/bin:$PATH +} + +# GraalVM dependencies require to compiling the classes in JDK 11 or higher +if [ ! -z "${JAVA11_HOME}" ]; then + setJava "${JAVA11_HOME}" +fi + +echo "Compiling using Java:" +java -version +./gradlew build -x test + +# We ensure the generated class files are compatible with Java 8 +if [ ! -z "${JAVA8_HOME}" ]; then + setJava "${JAVA8_HOME}" +fi + +echo "Running tests using Java:" +java -version +./gradlew build publishToMavenLocal -x compileJava From a4b2a4b677ff18c02f59bd47ed20490f3613222f Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 15:04:33 -0400 Subject: [PATCH 03/12] ci: using GITHUB_ENV https://docs.github.com/en/actions/using-workflows/workflow-commands-for-github-actions#setting-an-environment-variable --- .github/workflows/ci.yaml | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 6442451bb..d98b057e4 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -25,16 +25,12 @@ jobs: with: java-version: 8 distribution: zulu - - run: java -version - - run: which java - - run: export JAVA8_HOME=${JAVA_HOME} + - run: echo "JAVA8_HOME=${JAVA_HOME}" >> $GITHUB_ENV - uses: actions/setup-java@v3 with: java-version: 11 distribution: zulu - - run: java -version - - run: which java - - run: export JAVA11_HOME=${JAVA_HOME} + - run: echo "JAVA11_HOME=${JAVA_HOME}" >> $GITHUB_ENV - run: printenv - run: .kokoro/build.sh env: From 76e9219be024d3524123470dbe78fd017a94656f Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 15:11:24 -0400 Subject: [PATCH 04/12] build: javac to take '--release 8' flag --- build.gradle | 2 ++ 1 file changed, 2 insertions(+) diff --git a/build.gradle b/build.gradle index f07221b0c..c8ae7f7e2 100644 --- a/build.gradle +++ b/build.gradle @@ -104,6 +104,8 @@ configure(javaProjects) { tasks.withType(JavaCompile) { options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation' + // This flag is only available in JDK 9+ + options.compilerArgs.addAll(['--release', '8']) } // Dependencies From c4c69997b1b9aa637ca8d10ab5fd043dfbfa00c9 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 15:17:59 -0400 Subject: [PATCH 05/12] build: compileTestJava in Java11 --- .kokoro/build.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 93b4b5582..85ffd28e0 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -33,7 +33,8 @@ fi echo "Compiling using Java:" java -version -./gradlew build -x test +echo +./gradlew compileJava compileTestJava # We ensure the generated class files are compatible with Java 8 if [ ! -z "${JAVA8_HOME}" ]; then @@ -42,4 +43,6 @@ fi echo "Running tests using Java:" java -version -./gradlew build publishToMavenLocal -x compileJava +echo +./gradlew build publishToMavenLocal \ + --exclude-task compileJava --exclude-task compileTestJava From 83527ad225d872635077b5daa12ea62db46860e2 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 15:24:17 -0400 Subject: [PATCH 06/12] ci: job name to align required checks --- .github/workflows/ci.yaml | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index d98b057e4..f2f001270 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -6,6 +6,7 @@ on: name: ci jobs: units-java11: + name: "units (11)" runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 @@ -18,6 +19,7 @@ jobs: env: JOB_TYPE: test units-java8: + name: "units (8)" runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 From 709fc91af796a786f40cd47e8acbdd87a991e7ff Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 15:28:57 -0400 Subject: [PATCH 07/12] deps: trying new GraalVM SDK 22.1.0 --- dependencies.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.properties b/dependencies.properties index e12ad32e3..7b2b41885 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -71,7 +71,7 @@ maven.com_google_http_client_google_http_client_gson=com.google.http-client:goog maven.org_codehaus_mojo_animal_sniffer_annotations=org.codehaus.mojo:animal-sniffer-annotations:1.18 maven.javax_annotation_javax_annotation_api=javax.annotation:javax.annotation-api:1.3.2 maven.org_graalvm_nativeimage_svm=org.graalvm.nativeimage:svm:22.0.0.2 -maven.org_graalvm_sdk=org.graalvm.sdk:graal-sdk:21.3.2 +maven.org_graalvm_sdk=org.graalvm.sdk:graal-sdk:22.1.0 # Testing maven artifacts maven.junit_junit=junit:junit:4.13.2 From a377d1dc2c4b522328231b964286a6b8d659f717 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Wed, 4 May 2022 15:48:35 -0400 Subject: [PATCH 08/12] build: not running javadoc in Java 8 --- .kokoro/build.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 85ffd28e0..48315e158 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -34,7 +34,7 @@ fi echo "Compiling using Java:" java -version echo -./gradlew compileJava compileTestJava +./gradlew compileJava compileTestJava javadoc # We ensure the generated class files are compatible with Java 8 if [ ! -z "${JAVA8_HOME}" ]; then @@ -45,4 +45,5 @@ echo "Running tests using Java:" java -version echo ./gradlew build publishToMavenLocal \ - --exclude-task compileJava --exclude-task compileTestJava + --exclude-task compileJava --exclude-task compileTestJava \ + --exclude-task javadoc From 19ca743cc6f516641d1edc2cfeb1c0f1edb818a2 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Thu, 5 May 2022 09:39:24 -0400 Subject: [PATCH 09/12] ci: use JDK 11 for release, targeting Java 8 --- .kokoro/release/common.cfg | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.kokoro/release/common.cfg b/.kokoro/release/common.cfg index 8c2ae059b..1c6c3ab6d 100644 --- a/.kokoro/release/common.cfg +++ b/.kokoro/release/common.cfg @@ -9,7 +9,7 @@ build_file: "gax-java/.kokoro/trampoline.sh" # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" - value: "gcr.io/cloud-devrel-kokoro-resources/java8" + value: "gcr.io/cloud-devrel-kokoro-resources/java11" } before_action { From 852bdcec137e82568f17af27acbab7c59f3aae58 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Tue, 10 May 2022 12:25:29 -0400 Subject: [PATCH 10/12] deps: reverted GraalVM version --- dependencies.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/dependencies.properties b/dependencies.properties index 7b2b41885..e12ad32e3 100644 --- a/dependencies.properties +++ b/dependencies.properties @@ -71,7 +71,7 @@ maven.com_google_http_client_google_http_client_gson=com.google.http-client:goog maven.org_codehaus_mojo_animal_sniffer_annotations=org.codehaus.mojo:animal-sniffer-annotations:1.18 maven.javax_annotation_javax_annotation_api=javax.annotation:javax.annotation-api:1.3.2 maven.org_graalvm_nativeimage_svm=org.graalvm.nativeimage:svm:22.0.0.2 -maven.org_graalvm_sdk=org.graalvm.sdk:graal-sdk:22.1.0 +maven.org_graalvm_sdk=org.graalvm.sdk:graal-sdk:21.3.2 # Testing maven artifacts maven.junit_junit=junit:junit:4.13.2 From 636c5e5b64918572e3fed34a6387bcc49cee9b20 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Tue, 10 May 2022 12:25:40 -0400 Subject: [PATCH 11/12] docs: added source code comments --- .github/workflows/ci.yaml | 2 ++ .kokoro/build.sh | 5 ++++- .kokoro/release/common.cfg | 1 + README.md | 5 ++++- build.gradle | 4 +++- 5 files changed, 14 insertions(+), 3 deletions(-) diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index f2f001270..249574f05 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -23,6 +23,8 @@ jobs: runs-on: ubuntu-latest steps: - uses: actions/checkout@v3 + # Java 8 tests uses JDK 11 to compile and JDK 8 to run tests. See .kokoro/ + # build.sh for the setup. - uses: actions/setup-java@v3 with: java-version: 8 diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 48315e158..8eb7840a8 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -26,7 +26,10 @@ function setJava() { export PATH=${JAVA_HOME}/bin:$PATH } -# GraalVM dependencies require to compiling the classes in JDK 11 or higher +# This project requires compiling the classes in JDK 11 or higher for GraalVM +# classes. Compiling this project with Java 8 or earlier would fail with "class +# file has wrong version 55.0, should be 53.0" and "unrecognized --release 8 +# option" (set in build.gradle). if [ ! -z "${JAVA11_HOME}" ]; then setJava "${JAVA11_HOME}" fi diff --git a/.kokoro/release/common.cfg b/.kokoro/release/common.cfg index 1c6c3ab6d..e86574d51 100644 --- a/.kokoro/release/common.cfg +++ b/.kokoro/release/common.cfg @@ -9,6 +9,7 @@ build_file: "gax-java/.kokoro/trampoline.sh" # Configure the docker image for kokoro-trampoline. env_vars: { key: "TRAMPOLINE_IMAGE" + # We use JDK 11 to produce Java 8-compatible artifacts value: "gcr.io/cloud-devrel-kokoro-resources/java11" } diff --git a/README.md b/README.md index e39f3de75..e87af9fbf 100644 --- a/README.md +++ b/README.md @@ -56,7 +56,10 @@ libraryDependencies += "com.google.api" % "gax-grpc" % "2.8.1" Java Versions ------------- -Java 7 or above is required for using this library. +Java 8 or above is required for using this library. + +To build this project, JDK 11 or above is required. The build produces Java +bytecode targeted for Java 8. Contributing ------------ diff --git a/build.gradle b/build.gradle index c8ae7f7e2..cf41ec2bd 100644 --- a/build.gradle +++ b/build.gradle @@ -104,7 +104,9 @@ configure(javaProjects) { tasks.withType(JavaCompile) { options.compilerArgs << '-Xlint:unchecked' << '-Xlint:deprecation' - // This flag is only available in JDK 9+ + // This flag is only available in JDK 9+. This flag ensures the generated + // bytecode is compatible with Java 8. (targetCompatibility = 1.8 is not + // sufficient) options.compilerArgs.addAll(['--release', '8']) } From cd24fe5abcb45f5979109ff63396ef484d32c901 Mon Sep 17 00:00:00 2001 From: Tomo Suzuki Date: Tue, 10 May 2022 15:04:30 -0400 Subject: [PATCH 12/12] ci: fail build if Java 8 is not specified for junit-java8 --- .kokoro/build.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/.kokoro/build.sh b/.kokoro/build.sh index 8eb7840a8..9c25171ab 100755 --- a/.kokoro/build.sh +++ b/.kokoro/build.sh @@ -46,6 +46,16 @@ fi echo "Running tests using Java:" java -version + +if [ "${GITHUB_JOB}" == "units-java8" ]; then + java -version 2>&1 | grep -q 'openjdk version "1.8.' + MATCH=$? # 0 if the output has the match + if [ "$MATCH" != "0" ]; then + echo "Please specify JDK 8 for Java 8 tests" + exit 1 + fi +fi + echo ./gradlew build publishToMavenLocal \ --exclude-task compileJava --exclude-task compileTestJava \