diff --git a/.github/workflows/java_compatibility_check.yaml b/.github/workflows/java_compatibility_check.yaml new file mode 100644 index 0000000000..a0ab4e83d5 --- /dev/null +++ b/.github/workflows/java_compatibility_check.yaml @@ -0,0 +1,46 @@ +# Copyright 2022 Google LLC +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# Github action job to test core java library features on +# downstream client libraries before they are released. +on: + pull_request: +name: Java 8 compatibility check +jobs: + java8-compatibility-check: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + - uses: actions/setup-java@v4 + with: + java-version: 11 + distribution: temurin + cache: maven + - name: Install Maven modules to local Maven repository + run: | + mvn install -B -ntp -T 1C -DskipTests -Dclirr.skip -Dcheckstyle.skip -Denforcer.skip + - name: Check Java 8 compatibility for class files + shell: bash + run: | + find . -type f -name "*.class" -path "*/classes/*" \ + -not -path "*/grpc-*/*" \ + -not -path "*/proto-*/*" \ + -not -path "*/gapic-generator-java/*" -print |\ + while IFS= read -r class_file; do + version=$(javap -v "${class_file}" | grep "major version" | cut -d ' ' -f 5) + if [[ "${version}" != "52" ]]; then + echo "${class_file} is not compatible with Java 8." + exit 1 + fi + done + echo "All class files are compatible with Java 8." \ No newline at end of file