name: CI on: push: branches: [master, main] pull_request: branches: [master, main] concurrency: group: ci-${{ github.workflow }}-${{ github.ref }} cancel-in-progress: true jobs: build: runs-on: macos-latest # macOS for combined Android + iOS build timeout-minutes: 30 steps: - uses: actions/checkout@v4 - uses: actions/setup-java@v4 with: distribution: 'temurin' java-version: '21' - uses: gradle/actions/setup-gradle@v4 with: cache-read-only: ${{ github.ref != 'refs/heads/master' && github.ref != 'refs/heads/main' }} - name: Cache Kotlin/Native (konan) uses: actions/cache@v4 with: path: ~/.konan key: konan-${{ runner.os }}-${{ hashFiles('gradle/libs.versions.toml', 'chart-realtime/build.gradle.kts') }} restore-keys: konan-${{ runner.os }}- - name: Library — Android compile run: ./gradlew :chart-realtime:compileReleaseKotlinAndroid --stacktrace - name: Library — iOS arm64 compile run: ./gradlew :chart-realtime:compileKotlinIosArm64 --stacktrace - name: Library — iOS sim arm64 compile run: ./gradlew :chart-realtime:compileKotlinIosSimulatorArm64 --stacktrace - name: Library — iOS sim tests (canonical gate) run: ./gradlew :chart-realtime:iosSimulatorArm64Test --stacktrace - name: Library — assembleRelease run: ./gradlew :chart-realtime:assembleRelease --stacktrace - name: ABI check run: ./gradlew :chart-realtime:apiCheck --stacktrace - name: App — assembleDebug run: ./gradlew :app:assembleDebug --stacktrace - name: Maven publish dry-run run: ./gradlew :chart-realtime:publishToMavenLocal --stacktrace - name: Upload XCFramework artifact if: github.event_name == 'push' && (github.ref == 'refs/heads/master' || github.ref == 'refs/heads/main') uses: actions/upload-artifact@v4 with: name: ChartRealtime-XCFramework path: chart-realtime/build/XCFrameworks/release/ChartRealtime.xcframework retention-days: 14 - name: Upload test report on failure if: failure() uses: actions/upload-artifact@v4 with: name: test-report-${{ github.run_id }} path: chart-realtime/build/reports/tests/ retention-days: 7