Update GitHub Actions for new secrets and branch #8107
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: | |
| - 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 |