882 lines
27 KiB
YAML
882 lines
27 KiB
YAML
version: 2.1
|
|
|
|
# -------------------------
|
|
# ORBS
|
|
# -------------------------
|
|
|
|
orbs:
|
|
win: circleci/windows@2.4.0
|
|
|
|
# -------------------------
|
|
# DEFAULTS
|
|
# -------------------------
|
|
defaults: &defaults
|
|
working_directory: ~/react-native
|
|
environment:
|
|
- GIT_COMMIT_DESC: git log --format=oneline -n 1 $CIRCLE_SHA1
|
|
# The public github tokens are publicly visible by design
|
|
- PUBLIC_PULLBOT_GITHUB_TOKEN_A: "a6edf8e8d40ce4e8b11a"
|
|
- PUBLIC_PULLBOT_GITHUB_TOKEN_B: "150e1341f4dd9c944d2a"
|
|
- PUBLIC_ANALYSISBOT_GITHUB_TOKEN_A: &github_token_a "78a72af35445ca3f8180"
|
|
- PUBLIC_ANALYSISBOT_GITHUB_TOKEN_B: &github_token_b "b1a98e0bbd56ff1ccba1"
|
|
|
|
|
|
# -------------------------
|
|
# EXECUTORS
|
|
# -------------------------
|
|
executors:
|
|
nodelts:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:12
|
|
nodeprevlts:
|
|
<<: *defaults
|
|
docker:
|
|
- image: circleci/node:10
|
|
reactnativeandroid:
|
|
<<: *defaults
|
|
docker:
|
|
- image: reactnativecommunity/react-native-android:2019-10-18
|
|
resource_class: "large"
|
|
environment:
|
|
- TERM: "dumb"
|
|
- ADB_INSTALL_TIMEOUT: 10
|
|
- _JAVA_OPTIONS: "-XX:+UnlockExperimentalVMOptions -XX:+UseCGroupMemoryLimitForHeap"
|
|
- GRADLE_OPTS: '-Dorg.gradle.daemon=false -Dorg.gradle.jvmargs="-XX:+HeapDumpOnOutOfMemoryError"'
|
|
- BUILD_THREADS: 2
|
|
# Repeated here, as the environment key in this executor will overwrite the one in defaults
|
|
- PUBLIC_ANALYSISBOT_GITHUB_TOKEN_A: *github_token_a
|
|
- PUBLIC_ANALYSISBOT_GITHUB_TOKEN_B: *github_token_b
|
|
reactnativeios:
|
|
<<: *defaults
|
|
macos:
|
|
xcode: &_XCODE_VERSION "11.3.1"
|
|
|
|
# -------------------------
|
|
# COMMANDS
|
|
# -------------------------
|
|
commands:
|
|
restore_cache_checkout:
|
|
parameters:
|
|
checkout_type:
|
|
type: string
|
|
default: node
|
|
steps:
|
|
- restore_cache:
|
|
key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}-<< parameters.checkout_type >>
|
|
|
|
setup_artifacts:
|
|
steps:
|
|
- run:
|
|
name: Initial Setup
|
|
command: mkdir -p ./reports/{buck,build,junit,outputs}
|
|
|
|
run_yarn:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- v4-yarn-cache-{{ arch }}-{{ checksum "yarn.lock" }}
|
|
- v4-yarn-cache-{{ arch }}
|
|
- run:
|
|
name: "Yarn: Install Dependencies"
|
|
command: |
|
|
# Skip yarn install on metro bump commits as the package is not yet
|
|
# available on npm
|
|
if [[ $(echo "$GIT_COMMIT_DESC" | grep -c "Bump metro@") -eq 0 ]]; then
|
|
yarn install --non-interactive --cache-folder ~/.cache/yarn
|
|
fi
|
|
- save_cache:
|
|
paths:
|
|
- ~/.cache/yarn
|
|
key: v4-yarn-cache-{{ arch }}-{{ checksum "yarn.lock" }}
|
|
|
|
install_buck_tooling:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- v3-buck-v2019.01.10.01-{{ checksum "scripts/circleci/buck_fetch.sh" }}}
|
|
- v3-buck-v2019.01.10.01-
|
|
- run:
|
|
name: Install BUCK
|
|
command: |
|
|
buck --version
|
|
# Install related tooling
|
|
if [[ ! -e ~/okbuck ]]; then
|
|
git clone https://github.com/uber/okbuck.git ~/okbuck --depth=1
|
|
fi
|
|
- save_cache:
|
|
paths:
|
|
- ~/buck
|
|
- ~/okbuck
|
|
key: v3-buck-v2019.01.10.01-{{ checksum "scripts/circleci/buck_fetch.sh" }}
|
|
|
|
install_github_bot_deps:
|
|
steps:
|
|
- run:
|
|
name: "Yarn: Install dependencies (GitHub bots)"
|
|
command: cd bots && yarn install --non-interactive --cache-folder ~/.cache/yarn
|
|
|
|
brew_install:
|
|
parameters:
|
|
package:
|
|
description: Homebrew package to install
|
|
type: string
|
|
steps:
|
|
- run:
|
|
name: "Brew: Install << parameters.package >>"
|
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew install << parameters.package >> >/dev/null
|
|
|
|
with_brew_cache_span:
|
|
parameters:
|
|
steps:
|
|
type: steps
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- v3-brew
|
|
- steps: << parameters.steps >>
|
|
- save_cache:
|
|
paths:
|
|
- /usr/local/Homebrew
|
|
- ~/Library/Caches/Homebrew
|
|
key: v3-brew
|
|
|
|
with_rntester_pods_cache_span:
|
|
parameters:
|
|
steps:
|
|
type: steps
|
|
steps:
|
|
- run:
|
|
name: Setup CocoaPods cache
|
|
# Copy RNTester/Podfile.lock since it can be changed by pod install
|
|
command: cp RNTester/Podfile.lock RNTester/Podfile.lock.bak
|
|
- restore_cache:
|
|
keys:
|
|
- v1-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "RNTester/Podfile.lock.bak" }}
|
|
- v1-pods-{{ .Environment.CIRCLE_JOB }}-
|
|
- steps: << parameters.steps >>
|
|
- save_cache:
|
|
paths:
|
|
- RNTester/Pods
|
|
key: v1-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "RNTester/Podfile.lock.bak" }}
|
|
|
|
download_gradle_dependencies:
|
|
steps:
|
|
- restore_cache:
|
|
keys:
|
|
- v1-gradle-{{ checksum "ReactAndroid/build.gradle" }}-{{ checksum "scripts/circleci/gradle_download_deps.sh" }}
|
|
- v1-gradle-
|
|
- run:
|
|
name: Download Dependencies Using Gradle
|
|
command: ./scripts/circleci/gradle_download_deps.sh
|
|
- save_cache:
|
|
paths:
|
|
- ~/.gradle
|
|
- ReactAndroid/build/downloads
|
|
- ReactAndroid/build/third-party-ndk
|
|
key: v1-gradle-{{ checksum "ReactAndroid/build.gradle" }}-{{ checksum "scripts/circleci/gradle_download_deps.sh" }}
|
|
|
|
download_buck_dependencies:
|
|
steps:
|
|
- run:
|
|
name: Download Dependencies Using Buck
|
|
command: ./scripts/circleci/buck_fetch.sh
|
|
|
|
run_e2e:
|
|
parameters:
|
|
platform:
|
|
description: Target platform
|
|
type: enum
|
|
enum: ["android", "ios", "js"]
|
|
default: "js"
|
|
retries:
|
|
description: How many times the job should try to run these tests
|
|
type: integer
|
|
default: 3
|
|
steps:
|
|
- run:
|
|
name: "Run Tests: << parameters.platform >> End-to-End Tests"
|
|
command: node ./scripts/run-ci-e2e-tests.js --<< parameters.platform >> --retries << parameters.retries >>
|
|
|
|
report_bundle_size:
|
|
parameters:
|
|
platform:
|
|
description: Target platform
|
|
type: enum
|
|
enum: ["android", "ios"]
|
|
steps:
|
|
- install_github_bot_deps
|
|
- run:
|
|
name: Report size of RNTester.app (analysis-bot)
|
|
command: GITHUB_TOKEN="$PUBLIC_ANALYSISBOT_GITHUB_TOKEN_A""$PUBLIC_ANALYSISBOT_GITHUB_TOKEN_B" scripts/circleci/report-bundle-size.sh << parameters.platform >>
|
|
|
|
# -------------------------
|
|
# JOBS
|
|
# -------------------------
|
|
jobs:
|
|
setup:
|
|
parameters:
|
|
executor:
|
|
type: executor
|
|
default: nodelts
|
|
checkout_type:
|
|
type: string
|
|
default: node
|
|
executor: << parameters.executor >>
|
|
steps:
|
|
- checkout
|
|
- save_cache:
|
|
key: v1-repo-{{ .Environment.CIRCLE_SHA1 }}-<< parameters.checkout_type >>
|
|
paths:
|
|
- ~/react-native
|
|
|
|
# -------------------------
|
|
# JOBS: Analyze PR
|
|
# -------------------------
|
|
# Analyze pull request and raise any lint/flow issues.
|
|
# Issues will be posted to the PR itself via GitHub bots.
|
|
# This workflow should only fail if the bots fail to run.
|
|
analyze_pr:
|
|
executor: nodelts
|
|
steps:
|
|
- restore_cache_checkout:
|
|
checkout_type: node
|
|
- run_yarn
|
|
|
|
- install_github_bot_deps
|
|
|
|
- run:
|
|
name: Install additional GitHub bot dependencies
|
|
command: sudo apt update && sudo apt install -y shellcheck jq
|
|
|
|
- run:
|
|
name: Run linters against modified files (analysis-bot)
|
|
command: GITHUB_TOKEN="$PUBLIC_ANALYSISBOT_GITHUB_TOKEN_A""$PUBLIC_ANALYSISBOT_GITHUB_TOKEN_B" yarn lint-ci
|
|
when: always
|
|
|
|
- run:
|
|
name: Analyze Pull Request (pull-bot)
|
|
command: |
|
|
cd bots
|
|
DANGER_GITHUB_API_TOKEN="$PUBLIC_PULLBOT_GITHUB_TOKEN_A""$PUBLIC_PULLBOT_GITHUB_TOKEN_B" yarn danger ci --use-github-checks
|
|
when: always
|
|
|
|
|
|
# -------------------------
|
|
# JOBS: Analyze Code
|
|
# -------------------------
|
|
analyze_code:
|
|
executor: nodelts
|
|
steps:
|
|
- restore_cache_checkout:
|
|
checkout_type: node
|
|
- setup_artifacts
|
|
- run_yarn
|
|
|
|
- run:
|
|
name: Lint code
|
|
command: scripts/circleci/exec_swallow_error.sh yarn lint --format junit -o ./reports/junit/eslint/results.xml
|
|
when: always
|
|
|
|
- run:
|
|
name: Check for errors in code using Flow (iOS)
|
|
command: yarn flow-check-ios
|
|
when: always
|
|
|
|
- run:
|
|
name: Check for errors in code using Flow (Android)
|
|
command: yarn flow-check-android
|
|
when: always
|
|
|
|
- run:
|
|
name: Sanity checks
|
|
command: |
|
|
./scripts/circleci/check_license.sh
|
|
./scripts/circleci/validate_yarn_lockfile.sh
|
|
when: always
|
|
|
|
- run:
|
|
name: Check formatting
|
|
command: yarn run format-check
|
|
when: always
|
|
|
|
- store_test_results:
|
|
path: ./reports/junit
|
|
|
|
# -------------------------
|
|
# JOBS: Test JavaScript
|
|
# -------------------------
|
|
test_js:
|
|
parameters:
|
|
executor:
|
|
type: executor
|
|
default: nodelts
|
|
run_disabled_tests:
|
|
type: boolean
|
|
default: false
|
|
executor: << parameters.executor >>
|
|
steps:
|
|
- restore_cache_checkout:
|
|
checkout_type: node
|
|
- setup_artifacts
|
|
- run_yarn
|
|
- run:
|
|
name: Install rsync
|
|
command: sudo apt-get install rsync
|
|
|
|
# -------------------------
|
|
# Run JavaScript tests
|
|
- run:
|
|
name: "Run Tests: JavaScript Tests"
|
|
command: node ./scripts/run-ci-javascript-tests.js --maxWorkers 2
|
|
- run_e2e:
|
|
platform: js
|
|
|
|
# Optionally, run disabled tests
|
|
- when:
|
|
condition: << parameters.run_disabled_tests >>
|
|
steps:
|
|
- run: echo "Failing tests may be moved here temporarily."
|
|
# -------------------------
|
|
|
|
- store_test_results:
|
|
path: ./reports/junit
|
|
|
|
# -------------------------
|
|
# JOBS: Test iOS
|
|
# -------------------------
|
|
test_ios:
|
|
executor: reactnativeios
|
|
parameters:
|
|
use_frameworks:
|
|
type: boolean
|
|
default: false
|
|
run_unit_tests:
|
|
description: Specifies whether unit tests should run.
|
|
type: boolean
|
|
default: false
|
|
run_detox_tests:
|
|
description: Specifies whether Detox e2e tests should run.
|
|
type: boolean
|
|
default: false
|
|
run_disabled_tests:
|
|
description: Specifies whether disabled tests should run. Set this to true to debug failing tests.
|
|
type: boolean
|
|
default: false
|
|
environment:
|
|
- REPORTS_DIR: "./reports/junit"
|
|
steps:
|
|
- restore_cache_checkout:
|
|
checkout_type: ios
|
|
- setup_artifacts
|
|
- run_yarn
|
|
|
|
- run: |
|
|
cd RNTester
|
|
bundle check || bundle install
|
|
- run:
|
|
name: Boot iPhone Simulator
|
|
command: source scripts/.tests.env && xcrun simctl boot "$IOS_DEVICE" || true
|
|
|
|
- run:
|
|
name: Configure Environment Variables
|
|
command: |
|
|
echo 'export PATH=/usr/local/opt/node@10/bin:$PATH' >> $BASH_ENV
|
|
source $BASH_ENV
|
|
|
|
- with_brew_cache_span:
|
|
steps:
|
|
- brew_install:
|
|
package: watchman
|
|
- brew_install:
|
|
package: node@10
|
|
- run:
|
|
name: "Brew: Tap wix/brew"
|
|
command: HOMEBREW_NO_AUTO_UPDATE=1 brew tap wix/brew >/dev/null
|
|
- brew_install:
|
|
package: applesimutils
|
|
|
|
- run:
|
|
name: Configure Watchman
|
|
command: touch .watchmanconfig
|
|
|
|
- when:
|
|
condition: << parameters.use_frameworks >>
|
|
steps:
|
|
- run:
|
|
name: Set USE_FRAMEWORKS=1
|
|
command: echo "export USE_FRAMEWORKS=1" >> $BASH_ENV
|
|
|
|
- run:
|
|
name: Fetch CocoaPods Specs
|
|
command: |
|
|
curl https://cocoapods-specs.circleci.com/fetch-cocoapods-repo-from-s3.sh | bash -s cf
|
|
- run:
|
|
name: Setup the CocoaPods environment
|
|
command: pod setup
|
|
|
|
- with_rntester_pods_cache_span:
|
|
steps:
|
|
- run:
|
|
name: Generate RNTesterPods Workspace
|
|
command: cd RNTester && pod install --verbose
|
|
|
|
- run:
|
|
name: Generate RNTesterPods Xcode Workspace
|
|
command: pushd RNTester && pod install --verbose && popd
|
|
|
|
# -------------------------
|
|
# Runs iOS unit tests
|
|
- when:
|
|
condition: << parameters.run_unit_tests >>
|
|
steps:
|
|
- run:
|
|
name: "Run Tests: iOS Unit and Integration Tests"
|
|
command: yarn test-ios
|
|
# Runs iOS Detox e2e tests
|
|
- when:
|
|
condition: << parameters.run_detox_tests >>
|
|
steps:
|
|
- run:
|
|
name: "Run Tests: Detox iOS End-to-End Tests"
|
|
command: yarn run build-ios-e2e && yarn run test-ios-e2e
|
|
|
|
# Optionally, run disabled tests
|
|
- when:
|
|
condition: << parameters.run_disabled_tests >>
|
|
steps:
|
|
- run: echo "Failing tests may be moved here temporarily."
|
|
- run:
|
|
name: "Run Tests: CocoaPods"
|
|
command: ./scripts/process-podspecs.sh
|
|
- run:
|
|
name: Free up port 8081 for iOS End-to-End Tests
|
|
command: |
|
|
# free up port 8081 for the packager before running tests
|
|
set +eo pipefail
|
|
lsof -i tcp:8081 | awk 'NR!=1 {print $2}' | xargs kill
|
|
set -eo pipefail
|
|
- run_e2e:
|
|
platform: ios
|
|
# -------------------------
|
|
|
|
# Collect Results
|
|
- report_bundle_size:
|
|
platform: ios
|
|
- store_test_results:
|
|
path: ./reports/junit
|
|
|
|
# -------------------------
|
|
# JOBS: Test Android
|
|
# -------------------------
|
|
test_android:
|
|
executor: reactnativeandroid
|
|
parameters:
|
|
run_disabled_tests:
|
|
type: boolean
|
|
default: false
|
|
steps:
|
|
- restore_cache_checkout:
|
|
checkout_type: android
|
|
- setup_artifacts
|
|
- run_yarn
|
|
|
|
# Validate Android SDK installation and packages
|
|
- run:
|
|
name: Validate Android SDK Install
|
|
command: ./scripts/validate-android-sdk.sh
|
|
|
|
# Starting emulator in advance as it takes some time to boot.
|
|
- run:
|
|
name: Create Android Virtual Device
|
|
command: source scripts/android-setup.sh && createAVD
|
|
- run:
|
|
name: Launch Android Virtual Device in Background
|
|
command: source scripts/android-setup.sh && launchAVD
|
|
background: true
|
|
|
|
# Keep configuring Android dependencies while AVD boots up
|
|
|
|
- run:
|
|
name: Install rsync
|
|
command: apt-get update -y && apt-get install rsync -y
|
|
|
|
# Install Buck
|
|
- install_buck_tooling
|
|
|
|
# Validate Android test environment (including Buck)
|
|
- run:
|
|
name: Validate Android Test Environment
|
|
command: ./scripts/validate-android-test-env.sh
|
|
|
|
- download_buck_dependencies
|
|
- download_gradle_dependencies
|
|
|
|
# Build and compile
|
|
- run:
|
|
name: Build Android App
|
|
command: |
|
|
buck build ReactAndroid/src/main/java/com/facebook/react
|
|
buck build ReactAndroid/src/main/java/com/facebook/react/shell
|
|
- run:
|
|
name: Compile Native Libs for Unit and Integration Tests
|
|
command: ./gradlew :ReactAndroid:packageReactNdkLibsForBuck -Pjobs=$BUILD_THREADS
|
|
no_output_timeout: 6m
|
|
|
|
# Build JavaScript Bundle for instrumentation tests
|
|
- run:
|
|
name: Build JavaScript Bundle
|
|
command: node cli.js bundle --max-workers 2 --platform android --dev true --entry-file ReactAndroid/src/androidTest/js/TestBundle.js --bundle-output ReactAndroid/src/androidTest/assets/AndroidTestBundle.js
|
|
|
|
# Wait for AVD to finish booting before running tests
|
|
- run:
|
|
name: Wait for Android Virtual Device
|
|
command: source scripts/android-setup.sh && waitForAVD
|
|
|
|
- run:
|
|
name: Assemble RNTester App
|
|
command: ./gradlew RNTester:android:app:assembleRelease
|
|
|
|
# -------------------------
|
|
# Run Android tests
|
|
- run:
|
|
name: "Run Tests: Android Unit Tests"
|
|
command: buck test ReactAndroid/src/test/... --config build.threads=$BUILD_THREADS --xml ./reports/buck/all-results-raw.xml
|
|
- run:
|
|
name: "Run Tests: Android Instrumentation Tests"
|
|
command: |
|
|
if [[ ! -e ReactAndroid/src/androidTest/assets/AndroidTestBundle.js ]]; then
|
|
echo "JavaScript bundle missing, cannot run instrumentation tests. Verify Build JavaScript Bundle step completed successfully."; exit 1;
|
|
fi
|
|
source scripts/android-setup.sh && NO_BUCKD=1 retry3 timeout 300 buck install ReactAndroid/src/androidTest/buck-runner:instrumentation-tests --config build.threads=$BUILD_THREADS
|
|
|
|
# Optionally, run disabled tests
|
|
- when:
|
|
condition: << parameters.run_disabled_tests >>
|
|
steps:
|
|
- run: echo "Failing tests may be moved here temporarily."
|
|
- run_e2e:
|
|
platform: android
|
|
# -------------------------
|
|
|
|
# Collect Results
|
|
- report_bundle_size:
|
|
platform: android
|
|
- run:
|
|
name: Collect Test Results
|
|
command: |
|
|
find . -type f -regex ".*/build/test-results/debug/.*xml" -exec cp {} ./reports/build/ \;
|
|
find . -type f -regex ".*/outputs/androidTest-results/connected/.*xml" -exec cp {} ./reports/outputs/ \;
|
|
find . -type f -regex ".*/buck-out/gen/ReactAndroid/src/test/.*/.*xml" -exec cp {} ./reports/buck/ \;
|
|
if [ -f ~/react-native/reports/buck/all-results-raw.xml ]; then
|
|
cd ~/okbuck
|
|
./tooling/junit/buck_to_junit.sh ~/react-native/reports/buck/all-results-raw.xml ~/react-native/reports/junit/results.xml
|
|
fi
|
|
when: always
|
|
- store_test_results:
|
|
path: ./reports/junit
|
|
|
|
# -------------------------
|
|
# JOBS: Test Docker
|
|
# -------------------------
|
|
test_docker:
|
|
machine: true
|
|
steps:
|
|
- checkout
|
|
- run:
|
|
name: Build Docker container for Android RNTester App
|
|
command: |
|
|
source ~/.bashrc
|
|
nvm i node
|
|
npm i -g yarn
|
|
npx envinfo@latest
|
|
yarn run docker-setup-android
|
|
yarn run docker-build-android
|
|
|
|
# -------------------------
|
|
# JOBS: Windows
|
|
# -------------------------
|
|
test_windows:
|
|
executor:
|
|
name: win/default
|
|
parameters:
|
|
run_disabled_tests:
|
|
type: boolean
|
|
default: false
|
|
environment:
|
|
- ANDROID_HOME: "C:\\Android\\android-sdk"
|
|
- ANDROID_NDK_HOME: "C:\\Android\\android-sdk\\ndk\\19.2.5345600"
|
|
- ANDROID_BUILD_VERSION: 28
|
|
- ANDROID_TOOLS_VERSION: 29.0.2
|
|
- GRADLE_OPTS: -Dorg.gradle.daemon=false
|
|
- NDK_VERSION: 19.2.5345600
|
|
steps:
|
|
- checkout
|
|
|
|
# Setup Dependencies
|
|
- run:
|
|
name: Install Yarn
|
|
command: choco install yarn
|
|
|
|
- run:
|
|
name: Display Environment info
|
|
command: npx envinfo@latest
|
|
|
|
- restore_cache:
|
|
keys:
|
|
- v1-win-yarn-cache-{{ arch }}-{{ checksum "yarn.lock" }}
|
|
- v1-win-yarn-cache-{{ arch }}-
|
|
- run:
|
|
name: "Yarn: Install Dependencies"
|
|
command: yarn install --frozen-lockfile --non-interactive
|
|
- save_cache:
|
|
key: v1-win-yarn-cache-{{ arch }}-{{ checksum "yarn.lock" }}
|
|
paths:
|
|
- C:\Users\circleci\AppData\Local\Yarn
|
|
|
|
- run:
|
|
name: Install Android SDK Tools
|
|
command: choco install android-sdk
|
|
|
|
- run:
|
|
name: Setup Android SDKs
|
|
command: |
|
|
sdkmanager --licenses
|
|
sdkmanager "system-images;android-19;google_apis;armeabi-v7a"
|
|
sdkmanager "platforms;android-%ANDROID_BUILD_VERSION%"
|
|
sdkmanager "build-tools;%ANDROID_TOOLS_VERSION%"
|
|
sdkmanager "add-ons;addon-google_apis-google-23"
|
|
sdkmanager "extras;android;m2repository"
|
|
sdkmanager "ndk;%NDK_VERSION%"
|
|
|
|
# -------------------------
|
|
# Run Tests
|
|
- run:
|
|
name: "Flow: Check Android"
|
|
command: yarn flow-check-android
|
|
- run:
|
|
name: "Flow: Check iOS"
|
|
command: yarn flow-check-ios
|
|
- run:
|
|
name: "Run Tests: JavaScript Tests"
|
|
command: yarn test
|
|
|
|
# Optionally, run disabled tests
|
|
- when:
|
|
condition: << parameters.run_disabled_tests >>
|
|
steps:
|
|
- run: echo "Failing tests may be moved here temporarily."
|
|
- run:
|
|
name: Android Build
|
|
command: ./gradlew.bat RNTester:android:app:assembleRelease
|
|
|
|
# -------------------------
|
|
# JOBS: Coverage
|
|
# -------------------------
|
|
# Collect JavaScript test coverage
|
|
js_coverage:
|
|
executor: nodelts
|
|
environment:
|
|
- CI_BRANCH: $CIRCLE_BRANCH
|
|
- CI_PULL_REQUEST: $CIRCLE_PULL_REQUEST
|
|
- CI_BUILD_NUMBER: $CIRCLE_BUILD_NUM
|
|
- CI_BUILD_URL: $CIRCLE_BUILD_URL
|
|
steps:
|
|
- restore_cache_checkout:
|
|
checkout_type: node
|
|
- setup_artifacts
|
|
- run_yarn
|
|
- run:
|
|
name: Collect test coverage information
|
|
command: |
|
|
scripts/circleci/exec_swallow_error.sh yarn test --coverage --maxWorkers=2
|
|
if [[ -e ./coverage/lcov.info ]]; then
|
|
cat ./coverage/lcov.info | scripts/circleci/exec_swallow_error.sh ./node_modules/.bin/coveralls
|
|
fi
|
|
- store_artifacts:
|
|
path: ~/react-native/coverage/
|
|
|
|
# -------------------------
|
|
# JOBS: Releases
|
|
# -------------------------
|
|
# Publishes a new version onto npm
|
|
publish_npm_package:
|
|
parameters:
|
|
publish_npm_args:
|
|
type: string
|
|
default: --nonightly
|
|
executor: reactnativeandroid
|
|
steps:
|
|
- run:
|
|
name: Add github.com to SSH known hosts
|
|
command: |
|
|
mkdir -p ~/.ssh
|
|
echo '|1|If6MU203eXTaaWL678YEfWkVMrw=|kqLeIAyTy8pzpj8x8Ae4Fr8Mtlc= ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAq2A7hRGmdnm9tUDbO9IDSwBK6TbQa+PXYPCPy6rbTrTtw7PHkccKrpp0yVhp5HdEIcKr6pLlVDBfOLX9QUsyCOV0wzfjIJNlGEYsdlLJizHhbn2mUjvSAHQqZETYP81eFzLQNnPHt4EVVUh7VfDESU84KezmD5QlWpXLmvU31/yMf+Se8xhHTvKSCZIFImWwoG6mbUoWf9nzpIoaSjB+weqqUUmpaaasXVal72J+UX2B+2RPW3RcT0eOzQgqlJL3RKrTJvdsjE3JEAvGq3lGHSZXy28G3skua2SmVi/w4yCE6gbODqnTWlg7+wC604ydGXA8VJiS5ap43JXiUFFAaQ==' >> ~/.ssh/known_hosts
|
|
- restore_cache_checkout:
|
|
checkout_type: android
|
|
- run_yarn
|
|
- install_buck_tooling
|
|
- download_buck_dependencies
|
|
- download_gradle_dependencies
|
|
- run: echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
|
|
- run: |
|
|
git config --global user.email "react-native-bot@users.noreply.github.com"
|
|
git config --global user.name "npm Deployment Script"
|
|
echo "machine github.com login react-native-bot password $GITHUB_TOKEN" > ~/.netrc
|
|
- run: node ./scripts/publish-npm.js << parameters.publish_npm_args >>
|
|
|
|
# -------------------------
|
|
# JOBS: Nightly
|
|
# -------------------------
|
|
nightly_job:
|
|
machine: true
|
|
steps:
|
|
- run:
|
|
name: Nightly
|
|
command: |
|
|
echo "Nightly build run"
|
|
|
|
# -------------------------
|
|
# WORK FLOWS
|
|
# -------------------------
|
|
workflows:
|
|
version: 2
|
|
|
|
tests:
|
|
jobs:
|
|
- setup:
|
|
name: setup_js
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
- setup:
|
|
name: setup_ios
|
|
checkout_type: ios
|
|
executor: reactnativeios
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
- setup:
|
|
name: setup_android
|
|
checkout_type: android
|
|
executor: reactnativeandroid
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
- test_js:
|
|
run_disabled_tests: false
|
|
requires:
|
|
- setup_js
|
|
- test_android:
|
|
run_disabled_tests: false
|
|
requires:
|
|
- setup_android
|
|
- test_ios:
|
|
name: test_ios_unit
|
|
run_disabled_tests: false
|
|
run_unit_tests: true
|
|
requires:
|
|
- setup_ios
|
|
- test_ios:
|
|
name: test_ios_unit_frameworks
|
|
use_frameworks: true
|
|
run_unit_tests: true
|
|
requires:
|
|
- setup_ios
|
|
- test_ios:
|
|
name: test_ios_detox
|
|
run_disabled_tests: false
|
|
run_detox_tests: true
|
|
requires:
|
|
- setup_ios
|
|
- test_ios:
|
|
name: test_ios_detox_frameworks
|
|
use_frameworks: true
|
|
run_detox_tests: true
|
|
requires:
|
|
- setup_ios
|
|
- test_js:
|
|
name: test_js_prev_lts
|
|
executor: nodeprevlts
|
|
requires:
|
|
- setup_js
|
|
- test_docker:
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
- test_windows:
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
run_disabled_tests: false
|
|
|
|
releases:
|
|
jobs:
|
|
- setup:
|
|
name: setup_android
|
|
checkout_type: android
|
|
executor: reactnativeandroid
|
|
filters:
|
|
# Both of the following conditions must be included!
|
|
# Ignore any commit on any branch by default.
|
|
branches:
|
|
ignore: /.*/
|
|
# Only act on version tags.
|
|
tags:
|
|
only: /v[0-9]+(\.[0-9]+)*(\-rc(\.[0-9]+)?)?/
|
|
- publish_npm_package:
|
|
requires:
|
|
- setup_android
|
|
filters:
|
|
# Both of the following conditions must be included!
|
|
# Ignore any commit on any branch by default.
|
|
branches:
|
|
ignore: /.*/
|
|
# Only act on version tags.
|
|
tags:
|
|
only: /v[0-9]+(\.[0-9]+)*(\-rc(\.[0-9]+)?)?/
|
|
|
|
analysis:
|
|
jobs:
|
|
- setup
|
|
# Run lints on every commit other than those to the gh-pages branch
|
|
- analyze_code:
|
|
requires:
|
|
- setup
|
|
filters:
|
|
branches:
|
|
ignore: gh-pages
|
|
|
|
# Run code checks on PRs from forks
|
|
- analyze_pr:
|
|
requires:
|
|
- setup
|
|
filters:
|
|
branches:
|
|
only: /^pull\/.*$/
|
|
|
|
# Gather coverage
|
|
- js_coverage:
|
|
requires:
|
|
- setup
|
|
nightly:
|
|
triggers:
|
|
- schedule:
|
|
cron: "0 0 * * *"
|
|
filters:
|
|
branches:
|
|
only:
|
|
- master
|
|
jobs:
|
|
- nightly_job
|
|
|
|
- setup:
|
|
name: setup_android
|
|
checkout_type: android
|
|
executor: reactnativeandroid
|
|
|
|
- publish_npm_package:
|
|
publish_npm_args: --nightly
|
|
requires:
|
|
- setup_android
|