mirror of
https://github.com/square/okhttp.git
synced 2026-10-24 07:59:29 +03:00
495 lines
17 KiB
YAML
495 lines
17 KiB
YAML
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 == 'lysine-dev/okhttp' && github.ref == 'refs/heads/main'
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
- uses: gradle/actions/wrapper-validation@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
- name: Validate Renovate
|
|
uses: rinchsan/renovate-config-validator@8cf44ae5646f111f838a03ac7ebd4e1c1f9be983 # v0.2.1
|
|
with:
|
|
pattern: '.github/renovate.json5'
|
|
|
|
checks:
|
|
permissions:
|
|
checks: write # for mikepenz/action-junit-report
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: |
|
|
11
|
|
21
|
|
|
|
- uses: graalvm/setup-graalvm@27b360dbb857524eaf0b4c4cef364d38e5b4f173 # v1.6.7
|
|
with:
|
|
distribution: 'graalvm'
|
|
java-version: 25
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
native-image-job-reports: true
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: |
|
|
${{ matrix.java-version }}
|
|
21
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- name: Run Tests
|
|
run: ./gradlew test allTests -Ptest.java.version=${{ matrix.java-version }}
|
|
|
|
- name: Publish Test Report
|
|
if: github.repository == 'lysine-dev/okhttp' && github.ref == 'refs/heads/main' && matrix.java-version == '11'
|
|
uses: mikepenz/action-junit-report@6ef3fdcfcd5f0b5d14df3e659ef19b8c6820f93d # v6.6.1
|
|
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@7622c5bf3d112a72ab4fa3951c2aa5723d8ab92d # v2.25.0
|
|
if: github.repository == 'lysine-dev/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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Install Old JDK 8
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'zulu'
|
|
java-version: 8.0.242
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: |
|
|
${{ matrix.java-version }}
|
|
21
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDKs
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
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@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
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@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- name: Run Tests
|
|
run: ./gradlew test allTests -Ptest.java.version=25
|
|
|
|
testwindows:
|
|
runs-on: windows-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- name: Run Tests
|
|
run: ./gradlew test allTests
|
|
|
|
graal:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- uses: graalvm/setup-graalvm@27b360dbb857524eaf0b4c4cef364d38e5b4f173 # v1.6.7
|
|
with:
|
|
distribution: 'graalvm'
|
|
java-version: 25
|
|
github-token: ${{ secrets.GITHUB_TOKEN }}
|
|
native-image-job-reports: true
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- name: Build okcurl
|
|
run: ./gradlew okcurl:nativeBuild
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
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@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@55cc8345863c7cc4c66a329aec7e433d2d1c52a9 # v6.1.0
|
|
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@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
|
|
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@a421e43855164a8197daf9d8d40fe71c6996bb0d # v2.38.0
|
|
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
|
|
|
|
maven:
|
|
runs-on: ubuntu-latest
|
|
|
|
steps:
|
|
- name: Checkout
|
|
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 21
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- 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@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
|
|
- name: Configure JDK
|
|
uses: actions/setup-java@b843ebf9b913146b38da2eaa7aeddf76074ae1ad # v6.1.0
|
|
with:
|
|
distribution: 'temurin'
|
|
java-version: 24
|
|
|
|
- name: Setup Gradle
|
|
uses: gradle/actions/setup-gradle@3f5f9adaf7d9fecd50b5935e54106014257a94e6 # v6.4.0
|
|
|
|
- name: Test module-tests
|
|
run: ./gradlew module-tests:test -PokhttpModuleTests=true
|
|
|
|
- name: Run with Jlink
|
|
run: ./gradlew module-tests:imageRun -PokhttpModuleTests=true
|