Skip to content

Update GitHub Actions for new secrets and branch #8107

Update GitHub Actions for new secrets and branch

Update GitHub Actions for new secrets and branch #8107

Workflow file for this run

name: build
on:
push:
branches:
- main
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/main'
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Configure JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- 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 }}
validation:
name: "Validation"
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v7
- uses: gradle/actions/wrapper-validation@v6
- 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@v7
- 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@v6
- 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@v7
- 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@v6
- 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/main' && 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/main' && matrix.java-version == '11'
with:
files: |
**/build/test-results/*/TEST-*.xml
openjdk8alpn:
runs-on: ubuntu-latest
if: github.ref == 'refs/heads/main' || contains(github.event.pull_request.labels.*.name, 'jdkversions')
steps:
- name: Checkout
uses: actions/checkout@v7
- 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@v6
- 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/main' || 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@v7
- 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@v6
- 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@v7
- 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@v6
- 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@v7
- 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@v6
- name: Run Tests
run: ./gradlew test allTests -Ptest.java.version=25
testwindows:
runs-on: windows-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Configure JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Run Tests
run: ./gradlew test allTests
graal:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- 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@v6
- name: Build okcurl
run: ./gradlew okcurl:nativeBuild
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Run native-image tests
run: ./gradlew -PgraalBuild=true native-image-tests:nativeTest
android:
runs-on: ubuntu-latest
timeout-minutes: 30
# The pre-release API 37 emulator image is still maturing, so let the entry marked
# experimental fail without blocking the build until the image is stable on CI.
continue-on-error: ${{ matrix.experimental || false }}
# No window, no audio, and dynamic GPU/memory for headless environments. Shared by both
# emulator steps below: the emulator only restores a cached snapshot when the boot options
# are identical, and the action's default includes -no-snapshot (a slow cold boot).
env:
EMULATOR_OPTIONS: >-
-no-window
-gpu ${{ matrix.gpu || 'swiftshader_indirect' }}
-noaudio
-no-boot-anim
-camera-back none
-memory ${{ matrix.memory || '2048' }}
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
# API 37 only ships 16 KB page-size images; playstore_ps16k resolves to
# google_apis_playstore_ps16k. Quoted so YAML keeps the ".0".
- api-level: "37.0"
arch: x86_64
target: playstore_ps16k
# API 37 needs more headroom than the other levels.
memory: 4096
gpu: auto
# Pre-release emulator image; allowed to fail (see continue-on-error above).
experimental: true
steps:
- name: Checkout
uses: actions/checkout@v7
- 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
# The runner image ships an outdated avdmanager that writes target=android-0
# into the AVD root ini for minor-versioned packages (android-37.x); the
# emulator clamps that to API 3 and skips the Vulkan/GLDirectMem auto-enable,
# which previously had to be worked around with -feature GLDirectMem.
- name: Update SDK cmdline-tools
id: cmdline-tools
run: |
SDK="${ANDROID_HOME:-${ANDROID_SDK_ROOT:-/usr/local/lib/android/sdk}}"
yes | "$SDK/cmdline-tools/latest/bin/sdkmanager" --install "cmdline-tools;latest" > /dev/null
# sdkmanager won't overwrite the preinstalled dir; it installs to latest-2.
if [ -d "$SDK/cmdline-tools/latest-2" ]; then
rm -rf "$SDK/cmdline-tools/latest"
mv "$SDK/cmdline-tools/latest-2" "$SDK/cmdline-tools/latest"
fi
"$SDK/cmdline-tools/latest/bin/avdmanager" list device > /dev/null
# --version prints a trailing blank line; grab the numeric line.
echo "version=$("$SDK/cmdline-tools/latest/bin/sdkmanager" --version 2>/dev/null | grep -Eo '^[0-9][0-9.]*' | head -1)" >> "$GITHUB_OUTPUT"
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Warm the Gradle cache
# Build the instrumentation APK to warm the cache, but don't run the Robolectric unit
# tests (`:android-test:test`) here: they fetch the android-all artifact and can take
# ~30 min.
run: ./gradlew :android-test:assembleDebugAndroidTest
- name: AVD System Image Cache
uses: actions/cache@v6
id: avd-cache
with:
# Keyed on the cmdline-tools version: AVDs created by an older avdmanager
# (broken target=android-0 root ini) are invalidated automatically.
key: avd-${{ runner.os }}-${{ matrix.api-level }}-${{ matrix.target }}-${{ matrix.arch }}-tools${{ steps.cmdline-tools.outputs.version }}
path: |
~/.android/avd/*
~/.android/adb*
${{ 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: 120
emulator-options: ${{ env.EMULATOR_OPTIONS }}
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: 120
emulator-options: ${{ env.EMULATOR_OPTIONS }}
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
loom:
runs-on: ubuntu-latest
steps:
- name: Checkout
uses: actions/checkout@v7
- name: Configure JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: |
21
24
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- 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@v7
- name: Configure JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 21
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- 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@v7
- name: Configure JDK
uses: actions/setup-java@v5
with:
distribution: 'temurin'
java-version: 24
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v6
- name: Test module-tests
run: ./gradlew module-tests:test -PokhttpModuleTests=true
- name: Run with Jlink
run: ./gradlew module-tests:imageRun -PokhttpModuleTests=true