Skip to content

ci(android): add pipelines with BrowserStack integration #1

ci(android): add pipelines with BrowserStack integration

ci(android): add pipelines with BrowserStack integration #1

name: Android CPP CI
on:
push:
branches: [ main ]
paths:
- 'android-cpp/**'
- '.github/workflows/android-cpp-ci.yml'
pull_request:
branches: [ main ]
paths:
- 'android-cpp/**'
- '.github/workflows/android-cpp-ci.yml'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
lint-and-test:
name: Lint and Unit Tests
runs-on: ubuntu-latest
timeout-minutes: 15
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Setup NDK
run: |
echo "y" | sdkmanager "ndk;26.1.10909125"
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/26.1.10909125" >> $GITHUB_ENV
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Create .env file
run: |
echo "DITTO_APP_ID=test_app_id" > .env
echo "DITTO_PLAYGROUND_TOKEN=test_playground_token" >> .env
echo "DITTO_AUTH_URL=https://auth.example.com" >> .env
echo "DITTO_WEBSOCKET_URL=wss://websocket.example.com" >> .env
- name: Cache Gradle dependencies
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: Run lint
working-directory: android-cpp/QuickStartTasksCPP
run: ./gradlew lintDebug
- name: Run unit tests
working-directory: android-cpp/QuickStartTasksCPP
run: ./gradlew test
- name: Upload lint results
if: always()
uses: actions/upload-artifact@v4
with:
name: android-cpp-lint-results
path: |
android-cpp/QuickStartTasksCPP/app/build/reports/lint-results-debug.html
android-cpp/QuickStartTasksCPP/app/build/reports/lint-results-debug.xml
- name: Upload test results
if: always()
uses: actions/upload-artifact@v4
with:
name: android-cpp-test-results
path: |
android-cpp/QuickStartTasksCPP/app/build/reports/tests/
android-cpp/QuickStartTasksCPP/app/build/test-results/
build:
name: Build APK
runs-on: ubuntu-latest
needs: lint-and-test
timeout-minutes: 25
steps:
- name: Checkout code
uses: actions/checkout@v4
- name: Set up JDK 17
uses: actions/setup-java@v4
with:
java-version: '17'
distribution: 'temurin'
- name: Setup Android SDK
uses: android-actions/setup-android@v3
- name: Setup NDK
run: |
echo "y" | sdkmanager "ndk;26.1.10909125"
echo "ANDROID_NDK_HOME=$ANDROID_SDK_ROOT/ndk/26.1.10909125" >> $GITHUB_ENV
- name: Setup Gradle
uses: gradle/actions/setup-gradle@v3
- name: Create .env file
run: |
echo "DITTO_APP_ID=${{ secrets.DITTO_APP_ID || 'test_app_id' }}" > .env
echo "DITTO_PLAYGROUND_TOKEN=${{ secrets.DITTO_PLAYGROUND_TOKEN || 'test_playground_token' }}" >> .env
echo "DITTO_AUTH_URL=${{ secrets.DITTO_AUTH_URL || 'https://auth.example.com' }}" >> .env
echo "DITTO_WEBSOCKET_URL=${{ secrets.DITTO_WEBSOCKET_URL || 'wss://websocket.example.com' }}" >> .env
- name: Cache Gradle dependencies
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: Build Debug APK
working-directory: android-cpp/QuickStartTasksCPP
run: ./gradlew assembleDebug
- name: Build Test APK
working-directory: android-cpp/QuickStartTasksCPP
run: ./gradlew assembleDebugAndroidTest
- name: Upload APK artifacts
uses: actions/upload-artifact@v4
with:
name: android-cpp-apks
path: |
android-cpp/QuickStartTasksCPP/app/build/outputs/apk/debug/app-debug.apk
android-cpp/QuickStartTasksCPP/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk