Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
40 changes: 18 additions & 22 deletions .github/workflows/android-cpp-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -7,16 +7,10 @@ name: Android C++ CI

on:
pull_request:
branches:
- main
- 'sdk-*'
paths:
- 'android-cpp/**'
- '.github/workflows/android-cpp-ci.yml'
push:
branches:
- main
- 'sdk-*'
paths:
- 'android-cpp/**'
- '.github/workflows/android-cpp-ci.yml'
Expand Down Expand Up @@ -130,7 +124,7 @@ jobs:
android-cpp/QuickStartTasksCPP/app/build/outputs/apk/release/app-release-unsigned.apk
retention-days: 1

browserstack-appium-test:
browserstack:
name: BrowserStack Device Testing
runs-on: ubuntu-latest
needs: [build]
Expand Down Expand Up @@ -160,13 +154,18 @@ jobs:
distribution: 'temurin'
java-version: '17'

- name: BrowserStack Env Setup
uses: 'browserstack/github-actions/setup-env@master'
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
build-name: 'CI Build #${{ github.run_number }}'
project-name: 'QuickStart Android C++'

- name: Upload APK to BrowserStack
id: upload
run: |
CREDS="${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}"

APP_RESPONSE=$(curl -u "$CREDS" \
APP_RESPONSE=$(curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/upload" \
-F "file=@android-cpp/QuickStartTasksCPP/app/build/outputs/apk/release/app-release-unsigned.apk" \
-F "custom_id=ditto-android-cpp-appium-app")
Expand All @@ -182,13 +181,10 @@ jobs:
- name: Execute Appium tests on BrowserStack
id: test
working-directory: android-cpp/QuickStartTasksCPP/appium-test
run: |
export BROWSERSTACK_USERNAME="${{ secrets.BROWSERSTACK_USERNAME }}"
export BROWSERSTACK_ACCESS_KEY="${{ secrets.BROWSERSTACK_ACCESS_KEY }}"
export BROWSERSTACK_APP_URL="${{ steps.upload.outputs.app_url }}"
export GITHUB_TEST_DOC_ID="${{ steps.seed_task.outputs.document-title }}"

../gradlew test --console=plain --no-daemon
env:
BROWSERSTACK_APP_URL: ${{ steps.upload.outputs.app_url }}
GITHUB_TEST_DOC_ID: ${{ steps.seed_task.outputs.document-title }}
run: ../gradlew test --console=plain --no-daemon

- name: Upload test artifacts
if: always()
Expand All @@ -202,7 +198,7 @@ jobs:
summary:
name: CI Report
runs-on: ubuntu-latest
needs: [browserstack-appium-test]
needs: [browserstack]
if: always()

steps:
Expand All @@ -214,7 +210,7 @@ jobs:
# Overall status
if [[ "${{ needs.lint.result }}" == "success" && \
"${{ needs.build.result }}" == "success" && \
"${{ needs.browserstack-appium-test.result }}" == "success" ]]; then
"${{ needs.browserstack.result }}" == "success" ]]; then
echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY
else
echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY
Expand All @@ -225,14 +221,14 @@ jobs:
echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| Build | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| BrowserStack Tests | ${{ needs.browserstack-appium-test.result == 'success' && '✅ Passed' || (needs.browserstack-appium-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| BrowserStack Tests | ${{ needs.browserstack.result == 'success' && '✅ Passed' || (needs.browserstack.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# BrowserStack link
if [[ "${{ needs.browserstack-appium-test.result }}" != "skipped" ]]; then
if [[ "${{ needs.browserstack.result }}" != "skipped" ]]; then
echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Android+C%2B%2B&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY
echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=QuickStart+Android+C%2B%2B&build=CI+Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Tested Device:**" >> $GITHUB_STEP_SUMMARY
echo "- Google Pixel 7 (Android 13.0)" >> $GITHUB_STEP_SUMMARY
Expand Down
36 changes: 21 additions & 15 deletions .github/workflows/android-java-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@ name: Android Java CI

on:
push:
branches: [ main ]
paths:
paths:
- 'android-java/**'
- '.github/workflows/android-java-ci.yml'
pull_request:
branches: [ main ]
paths:
- 'android-java/**'
- '.github/workflows/android-java-ci.yml'
Expand Down Expand Up @@ -105,7 +103,7 @@ jobs:
android-java/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk
retention-days: 1

browserstack-test:
browserstack:
name: BrowserStack Device Testing
runs-on: ubuntu-latest
needs: [build]
Expand All @@ -128,11 +126,19 @@ jobs:
with:
name: android-apks-${{ github.run_number }}
path: android-java/app/build/outputs/apk/


- name: BrowserStack Env Setup
uses: 'browserstack/github-actions/setup-env@master'
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
build-name: 'CI Build #${{ github.run_number }}'
project-name: 'QuickStart Android Java'

- name: Upload APKs to BrowserStack
id: upload
run: |
CREDS="${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}"
CREDS="$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY"

# Upload app APK
echo "📱 Uploading app APK to BrowserStack..."
Expand Down Expand Up @@ -191,7 +197,7 @@ jobs:
# Create test execution request
TITLE="${{ steps.seed_task.outputs.document-title }}"

BUILD_RESPONSE=$(curl -s -u '${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}' \
BUILD_RESPONSE=$(curl -s -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
-X POST 'https://api-cloud.browserstack.com/app-automate/espresso/v2/build' \
-H 'Content-Type: application/json' \
-d '{
Expand All @@ -203,8 +209,8 @@ jobs:
"Google Pixel 6-12.0",
"OnePlus 9-11.0"
],
"project": "Ditto Android Java",
"buildName": "Build #${{ github.run_number }}",
"project": "QuickStart Android Java",
"buildName": "CI Build #${{ github.run_number }}",
"buildTag": "${{ github.ref_name }}",
"deviceLogs": true,
"video": true,
Expand Down Expand Up @@ -242,7 +248,7 @@ jobs:

echo "⏳ Waiting for test execution to complete..."
while [ $ELAPSED -lt $MAX_WAIT_TIME ]; do
RESPONSE=$(curl -s -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
RESPONSE=$(curl -s -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
"https://api-cloud.browserstack.com/app-automate/espresso/v2/builds/$BUILD_ID")

STATUS=$(echo "$RESPONSE" | jq -r .status)
Expand All @@ -267,7 +273,7 @@ jobs:
done

# Get final results
FINAL_RESULT=$(curl -s -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
FINAL_RESULT=$(curl -s -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
"https://api-cloud.browserstack.com/app-automate/espresso/v2/builds/$BUILD_ID")

echo "📋 Final results:"
Expand Down Expand Up @@ -304,7 +310,7 @@ jobs:
summary:
name: CI Report
runs-on: ubuntu-latest
needs: [browserstack-test]
needs: [browserstack]
if: always()

steps:
Expand All @@ -316,7 +322,7 @@ jobs:
# Overall status
if [[ "${{ needs.lint.result }}" == "success" && \
"${{ needs.build.result }}" == "success" && \
"${{ needs.browserstack-test.result }}" == "success" ]]; then
"${{ needs.browserstack.result }}" == "success" ]]; then
echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY
else
echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY
Expand All @@ -331,10 +337,10 @@ jobs:
echo "" >> $GITHUB_STEP_SUMMARY

# BrowserStack link
if [[ "${{ needs.browserstack-test.result }}" != "skipped" ]]; then
if [[ "${{ needs.browserstack.result }}" != "skipped" ]]; then
echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Android+Java&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY
echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=QuickStart+Android+Java&build=CI+Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Tested Devices:**" >> $GITHUB_STEP_SUMMARY
echo "- Google Pixel 8 (Android 14)" >> $GITHUB_STEP_SUMMARY
Expand Down
46 changes: 25 additions & 21 deletions .github/workflows/android-kotlin-ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,10 @@ name: Android Kotlin CI

on:
push:
branches: [ main ]
paths:
paths:
- 'android-kotlin/**'
- '.github/workflows/android-kotlin-ci.yml'
pull_request:
branches: [ main ]
paths:
- 'android-kotlin/**'
- '.github/workflows/android-kotlin-ci.yml'
Expand Down Expand Up @@ -120,7 +118,7 @@ jobs:
path: android-kotlin/QuickStartTasks/app/build/reports/
retention-days: 1

browserstack-test:
browserstack:
name: BrowserStack Device Testing
runs-on: ubuntu-latest
needs: [build]
Expand All @@ -143,22 +141,28 @@ jobs:
with:
name: android-apks-${{ github.run_number }}
path: android-kotlin/QuickStartTasks/app/build/outputs/apk/


- name: BrowserStack Env Setup
uses: 'browserstack/github-actions/setup-env@master'
with:
username: ${{ secrets.BROWSERSTACK_USERNAME }}
access-key: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
build-name: 'CI Build #${{ github.run_number }}'
project-name: 'QuickStart Android Kotlin'

- name: Upload APKs to BrowserStack
id: upload
run: |
CREDS="${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}"

# 1. Upload AUT (app-debug.apk)
APP_UPLOAD_RESPONSE=$(curl -u "$CREDS" \
APP_UPLOAD_RESPONSE=$(curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/espresso/v2/app" \
-F "file=@android-kotlin/QuickStartTasks/app/build/outputs/apk/debug/app-debug.apk" \
-F "custom_id=ditto-android-kotlin-app")
APP_URL=$(echo "$APP_UPLOAD_RESPONSE" | jq -r .app_url)
echo "app_url=$APP_URL" >> "$GITHUB_OUTPUT"

# 2. Upload Espresso test-suite (app-debug-androidTest.apk)
TEST_UPLOAD_RESPONSE=$(curl -u "$CREDS" \
TEST_UPLOAD_RESPONSE=$(curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/espresso/v2/test-suite" \
-F "file=@android-kotlin/QuickStartTasks/app/build/outputs/apk/androidTest/debug/app-debug-androidTest.apk" \
-F "custom_id=ditto-android-kotlin-test")
Expand Down Expand Up @@ -188,7 +192,7 @@ jobs:
# Create test execution request with instrumentationOptions (correct approach for Android)
TITLE="${{ steps.seed_task.outputs.document-title }}"

BUILD_RESPONSE=$(curl -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
BUILD_RESPONSE=$(curl -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
-X POST "https://api-cloud.browserstack.com/app-automate/espresso/v2/build" \
-H "Content-Type: application/json" \
-d "{
Expand All @@ -200,8 +204,8 @@ jobs:
\"Google Pixel 6-12.0\",
\"OnePlus 9-11.0\"
],
\"project\": \"Ditto Android Kotlin\",
\"buildName\": \"Build #${{ github.run_number }}\",
\"project\": \"QuickStart Android Kotlin\",
\"buildName\": \"CI Build #${{ github.run_number }}\",
\"buildTag\": \"${{ github.ref_name }}\",
\"deviceLogs\": true,
\"video\": true,
Expand Down Expand Up @@ -240,9 +244,9 @@ jobs:
MAX_WAIT_TIME=1800 # 30 minutes
CHECK_INTERVAL=30 # Check every 30 seconds
ELAPSED=0

while [ $ELAPSED -lt $MAX_WAIT_TIME ]; do
BUILD_STATUS_RESPONSE=$(curl -s -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
BUILD_STATUS_RESPONSE=$(curl -s -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
"https://api-cloud.browserstack.com/app-automate/espresso/v2/builds/$BUILD_ID")

BUILD_STATUS=$(echo "$BUILD_STATUS_RESPONSE" | jq -r .status)
Expand All @@ -267,9 +271,9 @@ jobs:
sleep $CHECK_INTERVAL
ELAPSED=$((ELAPSED + CHECK_INTERVAL))
done

# Get final results
FINAL_RESULT=$(curl -s -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
FINAL_RESULT=$(curl -s -u "$BROWSERSTACK_USERNAME:$BROWSERSTACK_ACCESS_KEY" \
"https://api-cloud.browserstack.com/app-automate/espresso/v2/builds/$BUILD_ID")

echo "Final build result:"
Expand Down Expand Up @@ -301,7 +305,7 @@ jobs:
summary:
name: CI Report
runs-on: ubuntu-latest
needs: [browserstack-test]
needs: [browserstack]
if: always()

steps:
Expand All @@ -313,7 +317,7 @@ jobs:
# Overall status
if [[ "${{ needs.lint.result }}" == "success" && \
"${{ needs.build.result }}" == "success" && \
"${{ needs.browserstack-test.result }}" == "success" ]]; then
"${{ needs.browserstack.result }}" == "success" ]]; then
echo "**Overall Status:** ✅ All checks passed" >> $GITHUB_STEP_SUMMARY
else
echo "**Overall Status:** ❌ Failed" >> $GITHUB_STEP_SUMMARY
Expand All @@ -324,14 +328,14 @@ jobs:
echo "|-----|--------|" >> $GITHUB_STEP_SUMMARY
echo "| Lint | ${{ needs.lint.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| Build and Test | ${{ needs.build.result == 'success' && '✅ Passed' || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| BrowserStack Tests | ${{ needs.browserstack-test.result == 'success' && '✅ Passed' || (needs.browserstack-test.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "| BrowserStack Tests | ${{ needs.browserstack.result == 'success' && '✅ Passed' || (needs.browserstack.result == 'skipped' && '⏭️ Skipped') || '❌ Failed' }} |" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY

# BrowserStack link
if [[ "${{ needs.browserstack-test.result }}" != "skipped" ]]; then
if [[ "${{ needs.browserstack.result }}" != "skipped" ]]; then
echo "### BrowserStack Session" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=Ditto+Android+Kotlin&build=Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY
echo "🤖 [View Test Results](https://app-automate.browserstack.com/builds?project=QuickStart+Android+Kotlin&build=CI+Build+%23${{ github.run_number }})" >> $GITHUB_STEP_SUMMARY
echo "" >> $GITHUB_STEP_SUMMARY
echo "**Tested Devices:**" >> $GITHUB_STEP_SUMMARY
echo "- Google Pixel 8 (Android 14)" >> $GITHUB_STEP_SUMMARY
Expand Down
Loading
Loading