mirror of
				https://gitcode.com/gh_mirrors/re/react-native-pushy.git
				synced 2025-11-01 05:43:11 +08:00 
			
		
		
		
	feat: project init
This commit is contained in:
		
							
								
								
									
										218
									
								
								.github/workflows/e2e_android.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										218
									
								
								.github/workflows/e2e_android.yml
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,218 @@ | |||||||
|  | name: Testing E2E Android | ||||||
|  |  | ||||||
|  | on: | ||||||
|  |   workflow_dispatch: | ||||||
|  |     inputs: | ||||||
|  |       clearCaches: | ||||||
|  |         description: "Clear workflow caches where possible" | ||||||
|  |         required: false | ||||||
|  |         type: string | ||||||
|  |  | ||||||
|  |   pull_request: | ||||||
|  |     branches: | ||||||
|  |       - '**' | ||||||
|  |     paths-ignore: | ||||||
|  |       - 'docs/**' | ||||||
|  |       - 'website/**' | ||||||
|  |       - '.spellcheck.dict.txt' | ||||||
|  |       # - '**/*.md' | ||||||
|  |  | ||||||
|  |   push: | ||||||
|  |     branches: | ||||||
|  |       - master | ||||||
|  |     paths-ignore: | ||||||
|  |       - 'docs/**' | ||||||
|  |       - 'website/**' | ||||||
|  |       - '.spellcheck.dict.txt' | ||||||
|  |  | ||||||
|  | concurrency: | ||||||
|  |   group: ${{ github.workflow }}-${{ github.ref }} | ||||||
|  |   cancel-in-progress: true | ||||||
|  |  | ||||||
|  | jobs: | ||||||
|  |   android: | ||||||
|  |     name: Android | ||||||
|  |     runs-on: macos-12 | ||||||
|  |     timeout-minutes: 90 | ||||||
|  |     strategy: | ||||||
|  |       fail-fast: false | ||||||
|  |       matrix: | ||||||
|  |         # Refactor to make these dynamic with a low/high bracket only on schedule, not push | ||||||
|  |         # For now this is just the fastest combo (api/arch/target/snapshot-warm-time) based on testing | ||||||
|  |         api-level: [30] | ||||||
|  |         arch: [x86_64] | ||||||
|  |         target: [google_apis] | ||||||
|  |         first-boot-delay: [600] | ||||||
|  |         # This is useful for benchmarking, do 0, 1, 2, etc (up to 256 max job-per-matrix limit) for averages | ||||||
|  |         iteration: [0] | ||||||
|  |     env: | ||||||
|  |       CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} | ||||||
|  |       EMULATOR_COMMAND: "-avd TestingAVD -noaudio -gpu swiftshader_indirect -camera-back none -no-snapshot -no-window -no-boot-anim -nojni -memory 2048 -timezone 'Europe/London' -cores 2" | ||||||
|  |       EMULATOR_EXECUTABLE: qemu-system-x86_64-headless | ||||||
|  |     steps: | ||||||
|  |       - uses: actions/checkout@v3 | ||||||
|  |         with: | ||||||
|  |           fetch-depth: 50 | ||||||
|  |  | ||||||
|  |       # Set up tool versions | ||||||
|  |       - uses: actions/setup-node@v3 | ||||||
|  |         with: | ||||||
|  |           node-version: 16 | ||||||
|  |  | ||||||
|  |       - name: Configure JDK 1.11 | ||||||
|  |         uses: actions/setup-java@v3 | ||||||
|  |         with: | ||||||
|  |           distribution: 'temurin' | ||||||
|  |           java-version: '11' | ||||||
|  |  | ||||||
|  |       # Set path variables needed for caches | ||||||
|  |       - name: Set workflow variables | ||||||
|  |         id: workflow-variables | ||||||
|  |         run: | | ||||||
|  |           echo "metro-cache=$HOME/.metro" >> $GITHUB_OUTPUT | ||||||
|  |           echo "yarn-cache-dir=$(yarn cache dir)" >> $GITHUB_OUTPUT | ||||||
|  |           echo "tempdir=$TMPDIR" >> $GITHUB_OUTPUT | ||||||
|  |  | ||||||
|  |       - uses: actions/cache@v3 | ||||||
|  |         name: Yarn Cache | ||||||
|  |         id: yarn-cache | ||||||
|  |         with: | ||||||
|  |           path: ${{ steps.workflow-variables.outputs.yarn-cache-dir }} | ||||||
|  |           key: ${{ runner.os }}-yarn-v1-${{ hashFiles('yarn.lock') }} | ||||||
|  |           restore-keys: ${{ runner.os }}-yarn-v1 | ||||||
|  |  | ||||||
|  |       - name: Yarn Install | ||||||
|  |         uses: nick-invision/retry@v2 | ||||||
|  |         with: | ||||||
|  |           timeout_minutes: 10 | ||||||
|  |           retry_wait_seconds: 60 | ||||||
|  |           max_attempts: 3 | ||||||
|  |           command: DETOX_DISABLE_POSTINSTALL=1 yarn --no-audit --prefer-offline | ||||||
|  |  | ||||||
|  |       - name: Cache pushy Emulator | ||||||
|  |         uses: actions/cache@v3 | ||||||
|  |         with: | ||||||
|  |           path: ~/.cache/pushy/emulators | ||||||
|  |           key: pushy-emulators-v1-${{ github.run_id }} | ||||||
|  |           restore-keys: pushy-emulators-v1 | ||||||
|  |  | ||||||
|  |       - name: Start pushy Emulator | ||||||
|  |         run: yarn tests:emulator:start-ci | ||||||
|  |  | ||||||
|  |       - uses: actions/cache@v3 | ||||||
|  |         name: Gradle Cache | ||||||
|  |         with: | ||||||
|  |           path: ~/.gradle/caches | ||||||
|  |           key: ${{ runner.os }}-gradle-v1-${{ hashFiles('**/*.gradle*') }} | ||||||
|  |           restore-keys: ${{ runner.os }}-gradle-v1 | ||||||
|  |  | ||||||
|  |         # This appears to be 'Cache Size: ~1230 MB (1290026823 B)' based on watching action logs | ||||||
|  |         # Repo limit is 10GB; branch caches are independent; branches may read default branch cache. | ||||||
|  |         # We don't want branches to evict master branch snapshot, so save on master, read-only all else | ||||||
|  |       - name: AVD cache | ||||||
|  |         uses: actions/cache@v3 | ||||||
|  |         id: avd-cache | ||||||
|  |         with: | ||||||
|  |           path: | | ||||||
|  |             ~/.android/avd/* | ||||||
|  |             ~/.android/adb* | ||||||
|  |           key: avd-${{ matrix.api-level }}-${{ matrix.arch }}-${{matrix.target}}-v1-${{ github.event.inputs.clearCaches }} | ||||||
|  |           restore-keys: | | ||||||
|  |             avd-${{ matrix.api-level }}-${{ matrix.arch }}-${{matrix.target}}-v1 | ||||||
|  |  | ||||||
|  |       - name: Clear Caches Optionally | ||||||
|  |         if: "${{ github.event.inputs.clearCaches != '' }}" | ||||||
|  |         shell: bash | ||||||
|  |         run: | | ||||||
|  |           du -sk ~/.gradle | ||||||
|  |           du -sk ~/.android | ||||||
|  |           rm -fr ~/.gradle | ||||||
|  |           rm -fr ~/.android | ||||||
|  |           du -sk ~/.gradle || echo ~/.gradle is gone | ||||||
|  |           du -sk ~/.android || echo ~/.android is gone | ||||||
|  |  | ||||||
|  |       - name: Build Android App | ||||||
|  |         uses: nick-invision/retry@v2 | ||||||
|  |         with: | ||||||
|  |           timeout_minutes: 25 | ||||||
|  |           retry_wait_seconds: 60 | ||||||
|  |           max_attempts: 3 | ||||||
|  |           command: yarn build:android-release | ||||||
|  |  | ||||||
|  |       - name: Metro Bundler Cache | ||||||
|  |         uses: actions/cache@v3 | ||||||
|  |         with: | ||||||
|  |           path: ${{ steps.workflow-variables.outputs.metro-cache }} | ||||||
|  |           key: ${{ runner.os }}-metro-v1-${{ github.run_id }} | ||||||
|  |           restore-keys: ${{ runner.os }}-metro-v1 | ||||||
|  |  | ||||||
|  |       - name: AVD Boot and Snapshot Creation | ||||||
|  |         # Only generate a snapshot with a cache miss | ||||||
|  |         # Comment the if out to generate snapshots on branch for performance testing | ||||||
|  |         if: "${{ github.event.inputs.clearCaches != '' || (steps.avd-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/master') }}" | ||||||
|  |         uses: reactivecircus/android-emulator-runner@v2 | ||||||
|  |         with: | ||||||
|  |           api-level: ${{ matrix.api-level }} | ||||||
|  |           avd-name: TestingAVD | ||||||
|  |           force-avd-creation: false | ||||||
|  |           target: ${{ matrix.target }} | ||||||
|  |           arch: ${{ matrix.arch }} | ||||||
|  |           emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | ||||||
|  |           sdcard-path-or-size: 100M | ||||||
|  |           disable-animations: true | ||||||
|  |           # Give the emulator a little time to run and do first boot stuff before taking snapshot | ||||||
|  |           script: | | ||||||
|  |             $ANDROID_HOME/platform-tools/adb logcat '*:D' -d > adb-snapshot-log.txt | ||||||
|  |             $ANDROID_HOME/platform-tools/adb logcat --clear | ||||||
|  |             echo "Generated AVD snapshot for caching." | ||||||
|  |  | ||||||
|  |         # This step is separate so pure install time may be calculated as a step | ||||||
|  |       - name: Emulator Snapshot After Firstboot Warmup | ||||||
|  |         # Only generate a snapshot for saving with a cache miss | ||||||
|  |         # Switch the if statements via comment if generating snapshots for performance testing | ||||||
|  |         # if: matrix.first-boot-delay != '0' | ||||||
|  |         if: "${{ github.event.inputs.clearCaches != '' || (steps.avd-cache.outputs.cache-hit != 'true' && github.ref == 'refs/heads/master') }}" | ||||||
|  |         env: | ||||||
|  |           FIRST_BOOT_DELAY: ${{ matrix.first-boot-delay }} | ||||||
|  |         uses: reactivecircus/android-emulator-runner@v2 | ||||||
|  |         with: | ||||||
|  |           api-level: ${{ matrix.api-level }} | ||||||
|  |           avd-name: TestingAVD | ||||||
|  |           force-avd-creation: false | ||||||
|  |           target: ${{ matrix.target }} | ||||||
|  |           arch: ${{ matrix.arch }} | ||||||
|  |           emulator-options: -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | ||||||
|  |           sdcard-path-or-size: 100M | ||||||
|  |           disable-animations: true | ||||||
|  |           # Give the emulator a little time to run and do first boot stuff before taking snapshot | ||||||
|  |           # The zygote restart makes sure zygote has correct heap size as a workaround for android emulator init bug | ||||||
|  |           script: | | ||||||
|  |             $ANDROID_HOME/platform-tools/adb shell su root "setprop ctl.restart zygote" | ||||||
|  |             sleep $FIRST_BOOT_DELAY | ||||||
|  |             $ANDROID_HOME/platform-tools/adb logcat '*:D' -d > adb-warmup-log.txt | ||||||
|  |             $ANDROID_HOME/platform-tools/adb logcat --clear | ||||||
|  |             echo "First boot warmup completed." | ||||||
|  |  | ||||||
|  |       - name: Test Tapper | ||||||
|  |         # Run this outside the emulator runner so the emulator runner does not wait on it for cleanup | ||||||
|  |         run: | | ||||||
|  |           nohup sh -c "until false; do $ANDROID_HOME/platform-tools/adb shell input tap 100 800; sleep 0.2; done" & | ||||||
|  |         shell: bash | ||||||
|  |  | ||||||
|  |       - name: Detox Tests | ||||||
|  |         uses: reactivecircus/android-emulator-runner@v2 | ||||||
|  |         timeout-minutes: 40 | ||||||
|  |         with: | ||||||
|  |           api-level: ${{ matrix.api-level }} | ||||||
|  |           avd-name: TestingAVD | ||||||
|  |           force-avd-creation: false | ||||||
|  |           target: ${{ matrix.target }} | ||||||
|  |           arch: ${{ matrix.arch }} | ||||||
|  |           emulator-options: -no-snapshot-save -no-window -gpu swiftshader_indirect -noaudio -no-boot-anim -camera-back none | ||||||
|  |           sdcard-path-or-size: 100M | ||||||
|  |           disable-animations: true | ||||||
|  |           # Detox uses Espresso to choreograph steps in reaction to UI events, so we need to send a stream of taps. | ||||||
|  |           script: | | ||||||
|  |             $ANDROID_HOME/platform-tools/adb devices | ||||||
|  |             nohup sh -c "$ANDROID_HOME/platform-tools/adb logcat '*:D' > adb-log.txt" & | ||||||
|  |             yarn test:android-release | ||||||
		Reference in New Issue
	
	Block a user
	 steven
					steven