
# Objective Eliminate unnecessary Actions CI builds on forks, such as: - Daily builds, which are a waste of compute on forks, even if they succeed (although the Android build fails) - Administrative builds that attempt to deploy something In both the cases above, forks get CI failures that need to be ignored. It looks like this: <img width="1178" alt="image" src="https://github.com/bevyengine/bevy/assets/5838512/6365059a-1170-4bba-9c60-3e252ae7779f"> <img width="1186" alt="image" src="https://github.com/bevyengine/bevy/assets/5838512/ab824a0b-5202-42f7-a24f-95c5cd53376c"> ## Solution - [Only run some jobs when they are in the `bevyengine/bevy` repo.](https://docs.github.com/en/actions/using-workflows/workflow-syntax-for-github-actions#example-only-run-job-for-specific-repository) - Leave the rest of the workflows alone (you still get a full set of CI for pull requests, for example) ---
130 lines
4.0 KiB
YAML
130 lines
4.0 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: "Samsung Galaxy S23"
|
|
os_version: "13.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 }}
|