# Objective
- Android 14 is now supported by Browserstack and Bevy works on it, so
add it 🎉
## Solution
- Add test in CI on Android 14 / Pixel 8
		
	
			
		
			
				
	
	
		
			140 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
			
		
		
	
	
			140 lines
		
	
	
		
			4.3 KiB
		
	
	
	
		
			YAML
		
	
	
	
	
	
name: Daily Jobs
 | 
						|
 | 
						|
on:
 | 
						|
  schedule:
 | 
						|
    - cron:  '0 12 * * *'
 | 
						|
  workflow_dispatch:
 | 
						|
 | 
						|
env:
 | 
						|
  CARGO_TERM_COLOR: always
 | 
						|
  NIGHTLY_TOOLCHAIN: nightly
 | 
						|
 | 
						|
jobs:
 | 
						|
  build-for-iOS:
 | 
						|
    if: github.repository == 'bevyengine/bevy'
 | 
						|
    runs-on: macos-latest
 | 
						|
    timeout-minutes: 30
 | 
						|
    steps:
 | 
						|
      - uses: actions/checkout@v4
 | 
						|
 | 
						|
      - uses: dtolnay/rust-toolchain@stable
 | 
						|
 | 
						|
      - name: Add iOS targets
 | 
						|
        run: rustup target add aarch64-apple-ios x86_64-apple-ios
 | 
						|
 | 
						|
      - name: Build app for iOS
 | 
						|
        run: |
 | 
						|
          cd examples/mobile
 | 
						|
          make xcodebuild-iphone
 | 
						|
          mkdir Payload
 | 
						|
          mv build/Build/Products/Debug-iphoneos/bevy_mobile_example.app Payload
 | 
						|
          zip -r bevy_mobile_example.zip Payload
 | 
						|
          mv bevy_mobile_example.zip bevy_mobile_example.ipa          
 | 
						|
 | 
						|
      - name: Upload to Browser Stack
 | 
						|
        run: |
 | 
						|
          curl -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
 | 
						|
            -X POST "https://api-cloud.browserstack.com/app-automate/upload" \
 | 
						|
            -F "file=@examples/mobile/bevy_mobile_example.ipa" \
 | 
						|
            -F "custom_id=$GITHUB_RUN_ID"          
 | 
						|
 | 
						|
  build-for-Android:
 | 
						|
    if: github.repository == 'bevyengine/bevy'
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    timeout-minutes: 30
 | 
						|
    steps:
 | 
						|
      - uses: actions/checkout@v4
 | 
						|
 | 
						|
      - uses: dtolnay/rust-toolchain@stable
 | 
						|
 | 
						|
      - name: Add Android targets
 | 
						|
        run: rustup target add aarch64-linux-android armv7-linux-androideabi
 | 
						|
 | 
						|
      - name: Install Cargo APK
 | 
						|
        run: cargo install --force cargo-apk
 | 
						|
 | 
						|
      - name: Build app for Android
 | 
						|
        run: ANDROID_NDK_ROOT=$ANDROID_NDK_LATEST_HOME cargo apk build --package bevy_mobile_example
 | 
						|
        env: 
 | 
						|
          # This will reduce the APK size from 1GB to ~200MB
 | 
						|
          CARGO_PROFILE_DEV_DEBUG: false
 | 
						|
 | 
						|
      - name: Upload to Browser Stack
 | 
						|
        run: |
 | 
						|
          curl -u "${{ secrets.BROWSERSTACK_USERNAME }}:${{ secrets.BROWSERSTACK_ACCESS_KEY }}" \
 | 
						|
            -X POST "https://api-cloud.browserstack.com/app-automate/upload" \
 | 
						|
            -F "file=@target/debug/apk/bevyexample.apk" \
 | 
						|
            -F "custom_id=$GITHUB_RUN_ID"          
 | 
						|
 | 
						|
  nonce:
 | 
						|
    if: github.repository == 'bevyengine/bevy'
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    timeout-minutes: 30
 | 
						|
    outputs:
 | 
						|
      result: ${{ steps.nonce.outputs.result }}
 | 
						|
    steps:
 | 
						|
    - id: nonce
 | 
						|
      run: echo "result=${{ github.run_id }}-$(date +%s)" >> $GITHUB_OUTPUT
 | 
						|
 | 
						|
  run:
 | 
						|
    if: github.repository == 'bevyengine/bevy'
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    timeout-minutes: 30
 | 
						|
    needs: [nonce, build-for-iOS, build-for-Android]
 | 
						|
    env: 
 | 
						|
      PERCY_PARALLEL_NONCE: ${{ needs.nonce.outputs.result }}
 | 
						|
      PERCY_PARALLEL_TOTAL: ${{ strategy.job-total }}
 | 
						|
    strategy:
 | 
						|
      matrix:
 | 
						|
        include:
 | 
						|
          - device: "iPhone 13"
 | 
						|
            os_version: "15"
 | 
						|
          - device: "iPhone 14"
 | 
						|
            os_version: "16"
 | 
						|
          - device: "iPhone 15"
 | 
						|
            os_version: "17"
 | 
						|
          - device: "Xiaomi Redmi Note 11"
 | 
						|
            os_version: "11.0"
 | 
						|
          - device: "Google Pixel 6"
 | 
						|
            os_version: "12.0"
 | 
						|
          - device: "Samsung Galaxy S23"
 | 
						|
            os_version: "13.0"
 | 
						|
          - device: "Google Pixel 8"
 | 
						|
            os_version: "14.0"
 | 
						|
    steps:
 | 
						|
      - uses: actions/checkout@v4
 | 
						|
 | 
						|
      - name: Run Example
 | 
						|
        run: |
 | 
						|
          cd .github/start-mobile-example
 | 
						|
          npm install
 | 
						|
          npm install -g @percy/cli@latest
 | 
						|
          npx percy app:exec --parallel -- npm run mobile          
 | 
						|
        env:
 | 
						|
          BROWSERSTACK_APP_ID: ${{ github.run_id }}
 | 
						|
          BROWSERSTACK_USERNAME: ${{ secrets.BROWSERSTACK_USERNAME }}
 | 
						|
          BROWSERSTACK_ACCESS_KEY: ${{ secrets.BROWSERSTACK_ACCESS_KEY }}
 | 
						|
          PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
 | 
						|
          DEVICE: ${{ matrix.device }}
 | 
						|
          OS_VERSION: ${{ matrix.os_version }}
 | 
						|
 | 
						|
      - name: Save screenshots
 | 
						|
        if: ${{ always() }}
 | 
						|
        uses: actions/upload-artifact@v3
 | 
						|
        with:
 | 
						|
          name: screenshots-${{ matrix.device }}-${{ matrix.os_version }}
 | 
						|
          path: .github/start-mobile-example/*.png
 | 
						|
 | 
						|
  check-result:
 | 
						|
    if: github.repository == 'bevyengine/bevy'
 | 
						|
    runs-on: ubuntu-latest
 | 
						|
    timeout-minutes: 30
 | 
						|
    needs: [run]
 | 
						|
    steps:
 | 
						|
      - name: Wait for screenshots comparison
 | 
						|
        run: |
 | 
						|
          npm install -g @percy/cli@latest
 | 
						|
          npx percy build:wait --project dede4209/Bevy-Mobile-Example --commit ${{ github.sha }} --fail-on-changes --pass-if-approved          
 | 
						|
        env:
 | 
						|
          PERCY_TOKEN: ${{ secrets.PERCY_TOKEN }}
 |