mirror of
https://github.com/status-im/react-native.git
synced 2025-01-10 17:45:59 +00:00
a8d2079022
Summary:Implemented smarter retries for e2e tests E2e tests consist of two expensive and flaky steps: npm installation and tests execution. Our CI is configured to retry a command 3 times before terminating the test. In current setup if one of the steps fail the whole test is restarted. This change adds ad-hoc ability to retry flaky bits of e2e script independently. This will make tests fail faster when code gets broken while increasing the chances to succeed in case of random false errors. Closes https://github.com/facebook/react-native/pull/7184 Differential Revision: D3218927 fb-gh-sync-id: 9be8343484bb28aa3601b651db70fc55aa840e61 fbshipit-source-id: 9be8343484bb28aa3601b651db70fc55aa840e61
101 lines
4.5 KiB
YAML
101 lines
4.5 KiB
YAML
general:
|
|
branches:
|
|
ignore:
|
|
- gh-pages # list of branches to ignore
|
|
machine:
|
|
node:
|
|
version: 5.6.0
|
|
environment:
|
|
PATH: "~/$CIRCLE_PROJECT_REPONAME/gradle-2.9/bin:/home/ubuntu/buck/bin:$PATH"
|
|
TERM: "dumb"
|
|
ADB_INSTALL_TIMEOUT: 10
|
|
GRADLE_OPTS: '-Dorg.gradle.jvmargs="-Xmx512m -XX:+HeapDumpOnOutOfMemoryError"'
|
|
|
|
dependencies:
|
|
override:
|
|
# BUCK and android
|
|
- if [[ ! -e /home/ubuntu/buck ]]; then git clone https://github.com/facebook/buck.git /home/ubuntu/buck; fi
|
|
- cd /home/ubuntu/buck && ant
|
|
- buck --version
|
|
- buck fetch ReactAndroid/src/test/java/com/facebook/react/modules
|
|
- buck fetch ReactAndroid/src/main/java/com/facebook/react
|
|
- buck fetch ReactAndroid/src/main/java/com/facebook/react/shell
|
|
- buck fetch ReactAndroid/src/test/...
|
|
- buck fetch ReactAndroid/src/androidTest/...
|
|
- source scripts/circle-ci-android-setup.sh && getAndroidSDK
|
|
- ./gradlew :ReactAndroid:downloadBoost :ReactAndroid:downloadDoubleConversion :ReactAndroid:downloadFolly :ReactAndroid:downloadGlog
|
|
# CIRCLE_NPM_TOKEN is in React Native project settings in Circle CI.
|
|
# It was generated for bestander user, easy to replace with anyone's else
|
|
- echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
|
|
- npm config set spin=false
|
|
- npm config set progress=false
|
|
- npm install
|
|
# for eslint bot
|
|
- npm install github@0.2.4
|
|
- cd website && npm install
|
|
cache_directories:
|
|
- "ReactAndroid/build/downloads"
|
|
- "/home/ubuntu/buck"
|
|
- "website/node_modules"
|
|
- "node_modules"
|
|
|
|
test:
|
|
pre:
|
|
# starting emulator in advance because it takes very long to boot
|
|
- $ANDROID_HOME/tools/emulator -avd testAVD -no-skin -no-audio -no-window:
|
|
background: true
|
|
- source scripts/circle-ci-android-setup.sh && waitForAVD
|
|
|
|
override:
|
|
# eslint bot
|
|
- cat <(echo eslint; npm run lint --silent -- --format=json; echo flow; npm run flow --silent -- check --json) | GITHUB_TOKEN="af6ef0d15709bc91d""06a6217a5a826a226fb57b7" CI_USER=$CIRCLE_PROJECT_USERNAME CI_REPO=$CIRCLE_PROJECT_REPONAME PULL_REQUEST_NUMBER=$CIRCLE_PR_NUMBER node bots/code-analysis-bot.js
|
|
# JS tests for dependencies installed with npm3
|
|
- npm run flow check
|
|
- npm test -- --maxWorkers=1
|
|
|
|
# build app
|
|
- buck build ReactAndroid/src/main/java/com/facebook/react
|
|
- buck build ReactAndroid/src/main/java/com/facebook/react/shell
|
|
|
|
# unit tests
|
|
- buck test ReactAndroid/src/test/... --config build.threads=1
|
|
|
|
# instrumentation tests
|
|
# compile native libs with Gradle script
|
|
- ./gradlew :ReactAndroid:packageReactNdkLibsForBuck -Pjobs=1:
|
|
timeout: 360
|
|
# build JS bundle for instrumentation tests
|
|
- node local-cli/cli.js bundle --platform android --dev true --entry-file ReactAndroid/src/androidTest/assets/TestBundle.js --bundle-output ReactAndroid/src/androidTest/assets/AndroidTestBundle.js
|
|
# build test APK
|
|
- buck install ReactAndroid/src/androidTest/buck-runner:instrumentation-tests --config build.threads=1
|
|
# run installed apk with tests
|
|
- source scripts/circle-ci-android-setup.sh && retry3 ./scripts/run-android-instrumentation-tests.sh com.facebook.react.tests
|
|
|
|
- ./gradlew :ReactAndroid:testDebugUnitTest
|
|
# Deprecated: these tests are executed using Buck above, while we support Gradle we just make sure the test code compiles
|
|
- ./gradlew :ReactAndroid:assembleDebugAndroidTest
|
|
|
|
# Android e2e test
|
|
- node ./scripts/run-ci-e2e-tests.js --android --js --retries 3
|
|
|
|
# testing docs generation is not broken
|
|
- cd website && node ./server/generate.js
|
|
post:
|
|
# copy test report for Circle CI to display
|
|
- mkdir -p $CIRCLE_TEST_REPORTS/junit/
|
|
- find . -type f -regex ".*/build/test-results/debug/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \;
|
|
- find . -type f -regex ".*/outputs/androidTest-results/connected/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \;
|
|
# TODO circle does not understand Buck's report, maybe need to transform xml slightly
|
|
#- find . -type f -regex ".*/buck-out/gen/ReactAndroid/src/test/.*/.*xml" -exec cp {} $CIRCLE_TEST_REPORTS/junit/ \;
|
|
|
|
deployment:
|
|
stable:
|
|
branch: [/.*-stable/, /master/]
|
|
commands:
|
|
# generate docs website
|
|
- git config --global user.email "reactjs-bot@users.noreply.github.com"
|
|
- git config --global user.name "Website Deployment Script"
|
|
- echo "machine github.com login reactjs-bot password $GITHUB_TOKEN" > ~/.netrc
|
|
- cd website && GIT_USER=reactjs-bot npm run gh-pages
|
|
- node ./scripts/publish-npm.js
|