name: Daily Jobs on: schedule: - cron: '0 12 * * *' workflow_dispatch: env: CARGO_TERM_COLOR: always 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: Set up JDK 17 uses: actions/setup-java@v4 with: java-version: '17' distribution: 'temurin' - name: Add Android targets run: rustup target add aarch64-linux-android - name: Install Cargo NDK run: cargo install --force cargo-ndk - name: Build .so file run: cargo ndk -t arm64-v8a -o android_example/app/src/main/jniLibs build --package bevy_mobile_example env: # This will reduce the APK size from 1GB to ~200MB CARGO_PROFILE_DEV_DEBUG: false - name: Build app for Android run: cd examples/mobile/android_example && chmod +x gradlew && ./gradlew build - 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=@app/build/outputs/apk/debug/app-debug.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@v4 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 }}