name: Android App CI on: push: branches: [ main, develop ] paths: - 'apps/android/**' - 'build.gradle.kts' - 'settings.gradle.kts' - 'gradlew' - 'gradle/**' pull_request: branches: [ main ] paths: - 'apps/android/**' - 'build.gradle.kts' - 'settings.gradle.kts' - 'gradlew' - 'gradle/**' env: GRADLE_OPTS: "-Dorg.gradle.jvmargs=-Xmx2048m -Dorg.gradle.daemon=false" jobs: test: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Cache Gradle packages uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Run tests run: ./gradlew :apps:android:androidApp:testDebugUnitTest - name: Upload test results uses: actions/upload-artifact@v4 if: always() with: name: android-test-results path: | apps/android/androidApp/build/reports/tests/ apps/android/androidApp/build/test-results/ build: needs: test runs-on: ubuntu-latest strategy: matrix: build-type: [debug, release] steps: - name: Checkout uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Cache Gradle packages uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Build Android App (${{ matrix.build-type }}) run: | if [ "${{ matrix.build-type }}" = "release" ]; then ./gradlew :apps:android:androidApp:assembleRelease ./gradlew :apps:android:androidApp:bundleRelease else ./gradlew :apps:android:androidApp:assembleDebug fi - name: Sign APK (Release) if: matrix.build-type == 'release' run: | # For now, use debug signing for demo purposes # In production, this would use proper release signing echo "Using debug signing for demo release" - name: Upload APK artifacts uses: actions/upload-artifact@v4 with: name: corestate-android-${{ matrix.build-type }} path: | apps/android/androidApp/build/outputs/apk/${{ matrix.build-type }}/*.apk apps/android/androidApp/build/outputs/bundle/${{ matrix.build-type }}/*.aab lint: runs-on: ubuntu-latest steps: - name: Checkout uses: actions/checkout@v4 - name: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Cache Gradle packages uses: actions/cache@v4 with: path: | ~/.gradle/caches ~/.gradle/wrapper key: ${{ runner.os }}-gradle-${{ hashFiles('**/*.gradle*', '**/gradle-wrapper.properties') }} restore-keys: | ${{ runner.os }}-gradle- - name: Grant execute permission for gradlew run: chmod +x gradlew - name: Run Android Lint run: ./gradlew :apps:android:androidApp:lintDebug - name: Upload lint results uses: actions/upload-artifact@v4 if: always() with: name: android-lint-results path: apps/android/androidApp/build/reports/lint-results-debug.html