Skip to content

Merge pull request #9 from ElliotBadinger/codex/refactor-and-migrate-… #159

Merge pull request #9 from ElliotBadinger/codex/refactor-and-migrate-…

Merge pull request #9 from ElliotBadinger/codex/refactor-and-migrate-… #159

Workflow file for this run

name: Cross-Platform CI
on:
push:
branches:
- '**'
pull_request:
branches:
- main
- master
- develop
- 'refactor/**'
env:
# Optimized Gradle settings for faster builds
GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx4g -Dorg.gradle.daemon=true -Dorg.gradle.parallel=true -Dorg.gradle.caching=true"
JAVA_TOOL_OPTIONS: "-Xmx4g"
jobs:
# Fast compilation check - fail fast approach
quick-check:
name: Quick Compile Check
runs-on: ubuntu-latest
outputs:
cache-key: ${{ steps.gradle-cache.outputs.cache-hit }}
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Cache Gradle dependencies
id: gradle-cache
uses: actions/cache@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
.gradle/
build/
*/build/
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Bootstrap Android SDK (Tier 0)
env:
TERM: dumb
run: bash scripts/agent/healthcheck.sh --tier 0
- name: Quick Compile Test (Fail Fast)
run: ./gradlew compileDebugKotlin compileDebugJava --stacktrace
# Optimized Android build - parallel execution
android-build:
name: Android Build
runs-on: ubuntu-latest
needs: quick-check
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Restore Gradle Cache
uses: actions/cache/restore@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
.gradle/
build/
*/build/
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Bootstrap Android SDK (Tier 0)
env:
TERM: dumb
run: bash scripts/agent/healthcheck.sh --tier 0
- name: Accept Android SDK Licenses
run: yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses || true
- name: Build All Android Modules (Parallel)
run: ./gradlew :SaidIt:assembleDebug :core:assembleDebug :audio:assembleDebug :domain:build :data:build :features:recorder:build --stacktrace --parallel --build-cache
# Optimized unit testing
test:
name: Unit Tests
runs-on: ubuntu-latest
needs: quick-check
strategy:
fail-fast: false # Continue other tests even if one module fails
matrix:
module: [domain, core, data, features:recorder, SaidIt] # SaidIt tests restored - MockK issues fixed, some Robolectric tests may fail
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Restore Gradle Cache
uses: actions/cache/restore@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
.gradle/
build/
*/build/
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Bootstrap Android SDK (Tier 0)
env:
TERM: dumb
run: bash scripts/agent/healthcheck.sh --tier 0
- name: Accept Android SDK Licenses
run: yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses || true
- name: Run ${{ matrix.module }} Tests
id: run-tests
continue-on-error: true # Allow the workflow to continue if tests fail
run: ./gradlew :${{ matrix.module }}:test --stacktrace --build-cache
- name: Upload Test Results
uses: actions/upload-artifact@v4
if: always()
with:
name: test-results-${{ matrix.module == 'features:recorder' && 'features-recorder' || matrix.module }}
path: "**/build/reports/tests/"
if-no-files-found: ignore
# Optimized lint job - only run after build succeeds
lint:
name: Android Lint
runs-on: ubuntu-latest
needs: android-build # Only run lint after successful build
if: success() # Only run if previous jobs succeeded
steps:
- name: Checkout
uses: actions/checkout@v4
- name: Setup JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
cache: gradle
- name: Restore Gradle Cache
uses: actions/cache/restore@v4
with:
path: |
~/.gradle/caches
~/.gradle/wrapper
.gradle/
build/
*/build/
key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties', 'gradle/libs.versions.toml') }}
restore-keys: |
${{ runner.os }}-gradle-
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Make gradlew executable
run: chmod +x ./gradlew
- name: Bootstrap Android SDK (Tier 0)
env:
TERM: dumb
run: bash scripts/agent/healthcheck.sh --tier 0
- name: Accept Android SDK Licenses
run: yes | $ANDROID_HOME/cmdline-tools/latest/bin/sdkmanager --licenses || true
- name: Run Android Lint (Parallel)
run: ./gradlew :SaidIt:lint :core:lint :audio:lint --stacktrace --parallel --build-cache
- name: Upload Lint Results
uses: actions/upload-artifact@v4
if: always()
with:
name: lint-results
path: "**/build/reports/lint-results*.html"
if-no-files-found: ignore