Add support for ECH on Android 37 #7721
Workflow file for this run
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| name: build | |
| on: | |
| push: | |
| branches: | |
| - master | |
| pull_request: | |
| types: [opened, labeled, unlabeled, synchronize] | |
| permissions: | |
| contents: read | |
| env: | |
| GRADLE_OPTS: "-Xmx4g -Dorg.gradle.daemon=false -Dkotlin.incremental=false" | |
| concurrency: | |
| group: ${{ github.workflow }}-${{ github.ref }} | |
| cancel-in-progress: true | |
| jobs: | |
| publish: | |
| runs-on: ubuntu-latest | |
| if: github.repository == 'square/okhttp' && github.ref == 'refs/heads/master' | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Upload Artifacts | |
| run: ./gradlew clean publish --stacktrace | |
| env: | |
| ORG_GRADLE_PROJECT_mavenCentralUsername: ${{ secrets.SONATYPE_CENTRAL_USERNAME }} | |
| ORG_GRADLE_PROJECT_mavenCentralPassword: ${{ secrets.SONATYPE_CENTRAL_PASSWORD }} | |
| ORG_GRADLE_PROJECT_signingInMemoryKey: ${{ secrets.GPG_SECRET_KEY }} | |
| ORG_GRADLE_PROJECT_signingInMemoryKeyPassword: ${{ secrets.GPG_SECRET_PASSPHRASE }} | |
| validation: | |
| name: "Validation" | |
| runs-on: ubuntu-latest | |
| steps: | |
| - uses: actions/checkout@v6 | |
| - uses: gradle/actions/wrapper-validation@v5 | |
| - name: Validate Renovate | |
| uses: rinchsan/renovate-config-validator@v0.2.1 | |
| with: | |
| pattern: '.github/renovate.json' | |
| checks: | |
| permissions: | |
| checks: write # for mikepenz/action-junit-report | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: | | |
| 11 | |
| 21 | |
| - uses: graalvm/setup-graalvm@v1 | |
| with: | |
| distribution: 'graalvm' | |
| java-version: 25 | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| native-image-job-reports: true | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Checks | |
| run: ./gradlew check -PgraalBuild=true -x jvmTest -x test -x allTests -x java9Test | |
| jvm: | |
| permissions: | |
| checks: write # for mikepenz/action-junit-report | |
| runs-on: ubuntu-latest | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| java-version: | |
| - 8 | |
| - 11 | |
| - 17 | |
| - 21 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: | | |
| ${{ matrix.java-version }} | |
| 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests -Ptest.java.version=${{ matrix.java-version }} | |
| - name: Publish Test Report | |
| if: github.repository == 'square/okhttp' && github.ref == 'refs/heads/master' && matrix.java-version == '11' | |
| uses: mikepenz/action-junit-report@v6 | |
| with: | |
| report_paths: '**/build/test-results/*/TEST-*.xml' | |
| check_name: OpenJDK 11 Test Report | |
| - name: Publish Test Results | |
| uses: EnricoMi/publish-unit-test-result-action@v2 | |
| if: github.repository == 'square/okhttp' && github.ref == 'refs/heads/master' && matrix.java-version == '11' | |
| with: | |
| files: | | |
| **/build/test-results/*/TEST-*.xml | |
| openjdk8alpn: | |
| runs-on: ubuntu-latest | |
| if: github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'jdkversions') | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Install Old JDK 8 | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'zulu' | |
| java-version: 8.0.242 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests -Ptest.java.version=8 -Pokhttp.platform=jdk8alpn -Palpn.boot.version=8.1.13.v20181017 -Dorg.gradle.java.installations.paths=/opt/hostedtoolcache/Java_Adopt_jdk/8.0.242-8.1/x64 | |
| providers: | |
| runs-on: ubuntu-latest | |
| if: github.ref == 'refs/heads/master' || contains(github.event.pull_request.labels.*.name, 'providers') | |
| strategy: | |
| matrix: | |
| include: | |
| - provider: openjsse | |
| java-version: 8 | |
| - provider: bouncycastle | |
| java-version: 21 | |
| - provider: corretto | |
| java-version: 21 | |
| - provider: conscrypt | |
| java-version: 21 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: | | |
| ${{ matrix.java-version }} | |
| 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests -Pokhttp.platform=${{ matrix.provider }} -Ptest.java.version=${{ matrix.java-version }} | |
| openjdklatest: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDKs | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: | | |
| 11 | |
| 17 | |
| 24 | |
| - name: Allow incompatible JVM versions | |
| run: | | |
| echo 'kotlin.jvm.target.validation.mode=ignore' >> ./gradle.properties | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests -Ptest.java.version=24 | |
| openjdkearlyaccess: | |
| runs-on: ubuntu-latest | |
| if: false # https://youtrack.jetbrains.com/issue/KTOR-8489 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: | | |
| 11 | |
| 17 | |
| 25-ea | |
| - name: Allow incompatible JVM versions | |
| run: | | |
| echo 'kotlin.jvm.target.validation.mode=ignore' >> ./gradle.properties | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests -Ptest.java.version=25 | |
| testwindows: | |
| runs-on: windows-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests | |
| graal: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - uses: graalvm/setup-graalvm@v1 | |
| with: | |
| distribution: 'graalvm' | |
| java-version: 25 | |
| github-token: ${{ secrets.GITHUB_TOKEN }} | |
| native-image-job-reports: true | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Build okcurl | |
| run: ./gradlew okcurl:nativeBuild | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run native-image tests | |
| run: ./gradlew -PgraalBuild=true native-image-tests:nativeTest | |
| android: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| strategy: | |
| fail-fast: false | |
| matrix: | |
| include: | |
| - api-level: 21 | |
| arch: x86 | |
| target: default | |
| - api-level: 23 | |
| arch: x86 | |
| target: default | |
| - api-level: 29 | |
| arch: x86 | |
| target: default | |
| - api-level: 34 | |
| arch: x86_64 | |
| target: default | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Enable KVM group perms | |
| # https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/ | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - name: Verify KVM | |
| run: | | |
| sudo apt-get install -y cpu-checker | |
| kvm-ok || echo "KVM is not accelerated" | |
| kvm-ok || exit 1 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Gradle cache | |
| run: ./gradlew :android-test:test | |
| - name: AVD System Image Cache | |
| uses: actions/cache@v5 | |
| id: avd-cache | |
| with: | |
| key: avd-${{ runner.os }}-${{ matrix.api-level }}-${{ matrix.target }}-${{ matrix.arch }} | |
| path: | | |
| ~/.android/avd/* | |
| ~/.android/adb* | |
| # Added the actual system image path | |
| ${{ env.ANDROID_HOME }}/system-images/android-${{ matrix.api-level }} | |
| - name: Create AVD and generate snapshot for caching | |
| if: steps.avd-cache.outputs.cache-hit != 'true' | |
| uses: reactivecircus/android-emulator-runner@v2 | |
| with: | |
| api-level: ${{ matrix.api-level }} | |
| force-avd-creation: false | |
| target: ${{ matrix.target }} | |
| arch: ${{ matrix.arch }} | |
| emulator-boot-timeout: 1200 | |
| # No window, no audio, and use swiftshader for headless environments | |
| emulator-options: > | |
| -no-window | |
| -gpu swiftshader_indirect | |
| -noaudio | |
| -no-boot-anim | |
| -camera-back none | |
| -memory 2048 | |
| disable-animations: true | |
| script: echo "Generated AVD snapshot for caching." | |
| - name: Run Tests | |
| uses: reactivecircus/android-emulator-runner@v2 | |
| with: | |
| api-level: ${{ matrix.api-level }} | |
| target: ${{ matrix.target }} | |
| arch: ${{ matrix.arch }} | |
| emulator-boot-timeout: 1200 | |
| # Match the snapshot creation options. The action default includes -no-snapshot, | |
| # which forces a slow cold boot. | |
| emulator-options: > | |
| -no-window | |
| -gpu swiftshader_indirect | |
| -noaudio | |
| -no-boot-anim | |
| -camera-back none | |
| -memory 2048 | |
| script: ./gradlew -PandroidBuild=true connectedCheck | |
| env: | |
| API_LEVEL: ${{ matrix.api-level }} | |
| - name: Build Release App | |
| run: ./gradlew android-test-app:lint android-test-app:assembleRelease | |
| android37: | |
| runs-on: ubuntu-latest | |
| timeout-minutes: 30 | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd | |
| - name: Configure JDK | |
| uses: actions/setup-java@be666c2fcd27ec809703dec50e508c2fdc7f6654 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Enable KVM group perms | |
| # https://github.blog/changelog/2023-02-23-hardware-accelerated-android-virtualization-on-actions-windows-and-linux-larger-hosted-runners/ | |
| run: | | |
| echo 'KERNEL=="kvm", GROUP="kvm", MODE="0666", OPTIONS+="static_node=kvm"' | sudo tee /etc/udev/rules.d/99-kvm4all.rules | |
| sudo udevadm control --reload-rules | |
| sudo udevadm trigger --name-match=kvm | |
| - name: Verify KVM | |
| run: | | |
| sudo apt-get install -y cpu-checker | |
| kvm-ok || echo "KVM is not accelerated" | |
| kvm-ok || exit 1 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@0723195856401067f7a2779048b490ace7a47d7c | |
| - name: Gradle cache | |
| run: ./gradlew :android-test:test | |
| - name: Run Android 37 Tests | |
| run: | | |
| SDKMANAGER="$(find "$ANDROID_HOME/cmdline-tools" -path '*/bin/sdkmanager' | sort | tail -n 1)" | |
| AVDMANAGER="$(find "$ANDROID_HOME/cmdline-tools" -path '*/bin/avdmanager' | sort | tail -n 1)" | |
| ADB="$ANDROID_HOME/platform-tools/adb" | |
| EMULATOR="$ANDROID_HOME/emulator/emulator" | |
| export ANDROID_AVD_HOME="$HOME/.android/avd" | |
| mkdir -p "$ANDROID_AVD_HOME" | |
| yes | "$SDKMANAGER" --licenses > /dev/null | |
| "$SDKMANAGER" --install \ | |
| 'build-tools;36.0.0' \ | |
| platform-tools \ | |
| 'platforms;android-37.0' \ | |
| emulator \ | |
| 'system-images;android-37.0;google_apis_playstore_ps16k;x86_64' \ | |
| --channel=0 > /dev/null | |
| printf 'no\n' | "$AVDMANAGER" create avd \ | |
| --force \ | |
| --name test \ | |
| --package 'system-images;android-37.0;google_apis_playstore_ps16k;x86_64' | |
| "$AVDMANAGER" list avd | |
| "$EMULATOR" \ | |
| -port 5554 \ | |
| -avd test \ | |
| -no-window \ | |
| -gpu swiftshader_indirect \ | |
| -no-snapshot \ | |
| -noaudio \ | |
| -no-boot-anim \ | |
| -camera-back none \ | |
| -memory 4096 & | |
| "$ADB" -s emulator-5554 wait-for-device | |
| timeout 1200 bash -c 'until [[ "$("$1" -s emulator-5554 shell getprop sys.boot_completed | tr -d "\r")" == "1" ]]; do sleep 2; done' -- "$ADB" | |
| timeout 300 bash -c 'until "$1" -s emulator-5554 shell service check input | grep -q "found"; do sleep 2; done' -- "$ADB" | |
| timeout 300 bash -c 'until "$1" -s emulator-5554 shell service check package | grep -q "found"; do sleep 2; done' -- "$ADB" | |
| timeout 300 bash -c 'until "$1" -s emulator-5554 shell service check activity | grep -q "found"; do sleep 2; done' -- "$ADB" | |
| "$ADB" -s emulator-5554 shell getprop ro.build.version.sdk | |
| "$ADB" -s emulator-5554 shell getprop ro.build.version.release | |
| ./gradlew -PandroidBuild=true connectedCheck | |
| env: | |
| API_LEVEL: 37.0 | |
| - name: Stop Android 37 Emulator | |
| if: always() | |
| run: | | |
| "$ANDROID_HOME/platform-tools/adb" -s emulator-5554 emu kill || true | |
| loom: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: | | |
| 21 | |
| 24 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Run Tests | |
| run: ./gradlew test allTests -Pokhttp.platform=loom -Ptest.java.version=24 -PcontainerTests=true | |
| maven: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 21 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Publish local snapshot | |
| run: ./gradlew publishToMavenLocal | |
| - name: Run maven test | |
| working-directory: ./maven-tests | |
| run: ./mvnw -q verify | |
| java9_modules: | |
| runs-on: ubuntu-latest | |
| steps: | |
| - name: Checkout | |
| uses: actions/checkout@v6 | |
| - name: Configure JDK | |
| uses: actions/setup-java@v5 | |
| with: | |
| distribution: 'temurin' | |
| java-version: 24 | |
| - name: Setup Gradle | |
| uses: gradle/actions/setup-gradle@v5 | |
| - name: Test module-tests | |
| run: ./gradlew module-tests:test -PokhttpModuleTests=true | |
| - name: Run with Jlink | |
| run: ./gradlew module-tests:imageRun -PokhttpModuleTests=true |