diff --git a/.github/workflows/CI.yml b/.github/workflows/CI.yml index 9dcbe7f..0f0922a 100644 --- a/.github/workflows/CI.yml +++ b/.github/workflows/CI.yml @@ -6,45 +6,22 @@ env: GRADLE_OPTS: -Dorg.gradle.daemon=false -Dkotlin.incremental=false -Dorg.gradle.jvmargs="-XX:+HeapDumpOnOutOfMemoryError -XX:MetaspaceSize=1g" jobs: - build: + check: strategy: fail-fast: false matrix: os: [ macos-latest, ubuntu-latest, windows-latest ] java-version: [ 11, 19 ] - runs-on: ${{ matrix.os }} - steps: - - name: Checkout Repo - uses: actions/checkout@v3 + - name: Checkout Repository + uses: actions/checkout@v4 - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 - - - name: Setup Caches [ Gradle Wrapper ] - uses: actions/cache@v1 - with: - path: ~/.gradle/wrapper - key: ${{ runner.os }}-gradle-wrapper-${{ hashFiles('gradle/wrapper/gradle-wrapper.*') }} - restore-keys: ${{ runner.os }}-gradle-wrapper- - - - name: Setup Caches [ Konan ] - uses: actions/cache@v1 - with: - path: ~/.konan - key: ${{ runner.os }}-konan-${{ hashFiles('**/*.gradle.kts') }}-${{ hashFiles('gradle/libs.versions.toml') }} - restore-keys: ${{ runner.os }}-konan- - - - name: Setup Caches [ Gradle Caches ] - uses: actions/cache@v1 - with: - path: ~/.gradle/caches - key: ${{ runner.os }}-gradle-caches-${{ hashFiles('**/*.gradle.kts') }}-${{ hashFiles('gradle/libs.versions.toml') }} - restore-keys: ${{ runner.os }}-gradle-caches- + uses: gradle/actions/wrapper-validation@v3 - name: Setup JDK - uses: actions/setup-java@v3.4.0 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: ${{ matrix.java-version }} @@ -54,46 +31,84 @@ jobs: run: > ./gradlew apiCheck --stacktrace - - name: Run macOS Tests + - name: Run macOS Tests [ Java 11 ] + if: matrix.os == 'macos-latest' && matrix.java-version == 11 + run: > + ./gradlew check --stacktrace + -PKMP_TARGETS="IOS_ARM64,IOS_X64,IOS_SIMULATOR_ARM64,JS,JVM,WASM_JS,WASM_WASI" + + - name: Run macOS Tests [ Java 19 ] if: matrix.os == 'macos-latest' && matrix.java-version == 19 run: > ./gradlew check --stacktrace - -PKMP_TARGETS="IOS_ARM64,IOS_X64,IOS_SIMULATOR_ARM64,JVM,MACOS_ARM64,MACOS_X64,TVOS_ARM64,TVOS_X64,TVOS_SIMULATOR_ARM64,WATCHOS_ARM32,WATCHOS_ARM64,WATCHOS_DEVICE_ARM64,WATCHOS_X64,WATCHOS_SIMULATOR_ARM64" + -PKMP_TARGETS="JVM,MACOS_ARM64,MACOS_X64,TVOS_ARM64,TVOS_X64,TVOS_SIMULATOR_ARM64,WATCHOS_ARM32,WATCHOS_ARM64,WATCHOS_DEVICE_ARM64,WATCHOS_X64,WATCHOS_SIMULATOR_ARM64" - - name: Run macOS Java11 Tests - if: matrix.os == 'macos-latest' && matrix.java-version == 11 + - name: Run Linux Tests [ Java 11 ] + if: matrix.os == 'ubuntu-latest' && matrix.java-version == 11 run: > ./gradlew check --stacktrace -PKMP_TARGETS="JS,JVM,WASM_JS,WASM_WASI" - - name: Run Linux Tests + - name: Run Linux Tests [ Java 19 ] if: matrix.os == 'ubuntu-latest' && matrix.java-version == 19 run: > ./gradlew check --stacktrace -PKMP_TARGETS="ANDROID,ANDROID_ARM32,ANDROID_ARM64,ANDROID_X64,ANDROID_X86,JVM,LINUX_ARM64,LINUX_X64" - - name: Run Linux Java11 Tests - if: matrix.os == 'ubuntu-latest' && matrix.java-version == 11 + - name: Run Windows Tests [ Java 11 ] + if: matrix.os == 'windows-latest' && matrix.java-version == 11 run: > ./gradlew check --stacktrace - -PKMP_TARGETS="JS,JVM,WASM_JS,WASM_WASI" + -PKMP_TARGETS="JS,JVM,MINGW_X64,WASM_JS,WASM_WASI" - - name: Run Windows Tests - if: matrix.os == 'windows-latest' && matrix.java-version == 11 + - name: Upload Test Reports + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: test-report-${{ matrix.os }}-java${{ matrix.java-version }} + path: '**/build/reports/tests/**' + retention-days: 1 + + benchmark: + strategy: + fail-fast: false + matrix: + os: [ macos-latest, ubuntu-latest, windows-latest ] + target: [ jvm, js, wasmJs, nativeHost ] + runs-on: ${{ matrix.os }} + steps: + - name: Checkout Repository + uses: actions/checkout@v4 + + - name: Validate Gradle Wrapper + uses: gradle/actions/wrapper-validation@v3 + + - name: Setup JDK + uses: actions/setup-java@v4 + with: + distribution: 'zulu' + java-version: 11 + + - name: Run Benchmark run: > - ./gradlew check --stacktrace - -PKMP_TARGETS="JVM,JS,MINGW_X64,WASM_JS,WASM_WASI" + ./gradlew ${{ matrix.target }}Benchmark + -PKMP_TARGETS="JVM,JS,LINUX_ARM64,LINUX_X64,MACOS_ARM64,MACOS_X64,MINGW_X64,WASM_JS,WASM_WASI" - emulator: - runs-on: ubuntu-latest + - name: Upload Benchmark Reports + uses: actions/upload-artifact@v4 + with: + name: benchmark-report-${{ matrix.os }}-${{ matrix.target }} + path: '**/build/reports/benchmarks/**' + android-check: strategy: fail-fast: false matrix: - api-level: [ 15, 23, 29 ] + api-level: [ 15, 21, 23, 24, 29 ] + runs-on: ubuntu-latest steps: - - name: Checkout Repo - uses: actions/checkout@v3 + - name: Checkout Repository + uses: actions/checkout@v4 - name: Enable KVM run: | @@ -102,19 +117,25 @@ jobs: sudo udevadm trigger --name-match=kvm - name: Validate Gradle Wrapper - uses: gradle/wrapper-validation-action@v1 + uses: gradle/actions/wrapper-validation@v3 - name: Setup JDK - uses: actions/setup-java@v3.11.0 + uses: actions/setup-java@v4 with: distribution: 'zulu' java-version: 17 - - name: Build - uses: gradle/gradle-build-action@v2 - - name: Run Android Instrumented Tests uses: reactivecircus/android-emulator-runner@v2 with: + emulator-boot-timeout: 300 # 5 minutes api-level: ${{ matrix.api-level }} script: ./gradlew :test-android:connectedCheck -PKMP_TARGETS="ANDROID,JVM" + + - name: Upload Test Reports + uses: actions/upload-artifact@v4 + if: ${{ always() }} + with: + name: test-report-android-${{ matrix.api-level }} + path: '**/build/reports/androidTests/**' + retention-days: 1