Skip to content

Add support for ECH on Android 37 #7721

Add support for ECH on Android 37

Add support for ECH on Android 37 #7721

Workflow file for this run

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