# 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 }}
 |