diff --git a/.circleci/config.yml b/.circleci/config.yml index 336b4dbf2..38b23025e 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -36,16 +36,16 @@ aliases: - &restore-cache-gradle keys: - - v1-gradle-{{ arch }}-{{ .Branch }}-{{ checksum "build.gradle" }}-{{ checksum "ReactAndroid/build.gradle" }} + - v1-gradle-{{ .Branch }}-{{ checksum "build.gradle" }}-{{ checksum "ReactAndroid/build.gradle" }} # Fallback in case checksum fails - - v1-gradle-{{ arch }}-{{ .Branch }}-{{ checksum "build.gradle" }}- - - v1-gradle-{{ arch }}-{{ .Branch }}- + - v1-gradle-{{ .Branch }}-{{ checksum "build.gradle" }}- + - v1-gradle-{{ .Branch }}- # Fallback in case this is a first-time run on a fork - - v1-gradle-{{ arch }}-master- + - v1-gradle-master- - &save-cache-gradle paths: - ~/.gradle - key: v1-gradle-{{ arch }}-{{ .Branch }}-{{ checksum "build.gradle" }}-{{ checksum "ReactAndroid/build.gradle" }} + key: v1-gradle-{{ .Branch }}-{{ checksum "build.gradle" }}-{{ checksum "ReactAndroid/build.gradle" }} - &restore-cache-apt keys: @@ -59,20 +59,21 @@ aliases: - &restore-cache-ndk keys: - - v3-android-ndk-{{ arch }}-r10e-{{ checksum "scripts/android-setup.sh" }} + - v3-android-ndk-r10e-{{ checksum "scripts/android-setup.sh" }} - &save-cache-ndk paths: - /opt/ndk - key: v3-android-ndk-{{ arch }}-r10e-{{ checksum "scripts/android-setup.sh" }} + key: v3-android-ndk-r10e-{{ checksum "scripts/android-setup.sh" }} - - &restore-cache-buck + - &restore-cache-downloads-buck keys: - - v3-buck-{{ arch }}-v2018.06.25.01 - - &save-cache-buck + - v3-buck-v2018.06.25.01-{{ checksum "scripts/circleci/buck_fetch.sh" }}} + - v3-buck-v2018.06.25.01- + - &save-cache-downloads-buck paths: - ~/buck - ~/okbuck - key: v3-buck-{{ arch }}-v2018.06.25.01 + key: v3-buck-v2018.06.25.01-{{ checksum "scripts/circleci/buck_fetch.sh" }} - &restore-cache-watchman keys: @@ -82,16 +83,16 @@ aliases: - ~/watchman key: v1-watchman-{{ arch }}-v4.9.0 - - &restore-cache-gradle-downloads + - &restore-cache-downloads-gradle keys: - - v1-gradle-{{ arch }}-{{ checksum "ReactAndroid/build.gradle" }}-{{ checksum "scripts/circleci/gradle_download_deps.sh" }} - - v1-gradle-{{ arch }}- - - &save-cache-gradle-downloads + - v1-gradle-{{ checksum "ReactAndroid/build.gradle" }}-{{ checksum "scripts/circleci/gradle_download_deps.sh" }} + - v1-gradle- + - &save-cache-downloads-gradle paths: - ~/.gradle - ReactAndroid/build/downloads - ReactAndroid/build/third-party-ndk - key: v1-gradle-{{ arch }}-{{ checksum "ReactAndroid/build.gradle" }}-{{ checksum "scripts/circleci/gradle_download_deps.sh" }} + key: v1-gradle-{{ checksum "ReactAndroid/build.gradle" }}-{{ checksum "scripts/circleci/gradle_download_deps.sh" }} # Branch Filtering - &filter-only-master-stable @@ -222,10 +223,14 @@ aliases: ./scripts/circleci/check_cache.sh when: always - - &gradle-download-deps - name: Download C++ Dependencies + - &download-dependencies-gradle + name: Download Dependencies Using Gradle command: ./scripts/circleci/gradle_download_deps.sh + - &download-dependencies-buck + name: Download Dependencies Using Buck + command: ./scripts/circleci/buck_fetch.sh + - &build-android-app name: Build Android App command: | @@ -266,6 +271,10 @@ aliases: 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 + - &build-android-rntester-app + name: Build Android RNTester App + command: ./gradlew RNTester:android:app:assembleRelease -Pjobs=$BUILD_THREADS + - &collect-android-test-results name: Collect Test Results command: | @@ -472,59 +481,6 @@ jobs: - store_test_results: path: ~/react-native/reports/junit - # Publishes new version onto npm - publish_npm_package: - <<: *android_defaults - steps: - # Checkout code so that we can work with `git` in publish.js - - checkout - - # Configure Android SDK and related dependencies - - run: *configure-android-path - - run: *install-android-build-dependencies - - - restore-cache: *restore-cache-android-packages - - run: *install-android-packages - - save-cache: *save-cache-android-packages - - # Install Android NDK - - run: *create-ndk-directory - - restore-cache: *restore-cache-ndk - - run: *install-ndk - - save-cache: *save-cache-ndk - - # Fetch dependencies using BUCK - - restore-cache: *restore-cache-buck - - run: *install-buck - - save-cache: *save-cache-buck - - - run: buck fetch ReactAndroid/src/test/java/com/facebook/react/modules - - run: buck fetch ReactAndroid/src/main/java/com/facebook/react - - run: buck fetch ReactAndroid/src/main/java/com/facebook/react/shell - - run: buck fetch ReactAndroid/src/test/... - - run: buck fetch ReactAndroid/src/androidTest/... - - - restore-cache: *restore-cache-gradle-downloads - - run: *gradle-download-deps - - save-cache: *save-cache-gradle-downloads - - - restore-cache: *restore-yarn-cache - - run: *yarn - - save-cache: *save-yarn-cache - - - run: - name: Publish React Native Package - command: | - if [ -z "$CIRCLE_PULL_REQUEST" ]; then - echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc - git config --global user.email "reactjs-bot@users.noreply.github.com" - git config --global user.name "npm Deployment Script" - echo "machine github.com login reactjs-bot password $GITHUB_TOKEN" > ~/.netrc - node ./scripts/publish-npm.js - else - echo "Skipping deploy." - fi - # Set up an Android environment for downstream jobs test_android: <<: *android_defaults @@ -542,6 +498,7 @@ jobs: - run: *install-android-packages - save-cache: *save-cache-android-packages + # Validate Android SDK installation and packages - run: *validate-android-sdk # Starting emulator in advance as it takes some time to boot. @@ -556,22 +513,21 @@ jobs: - run: *install-ndk - save-cache: *save-cache-ndk - # Fetch dependencies using BUCK - - restore-cache: *restore-cache-buck + # Install Buck + - restore-cache: *restore-cache-downloads-buck - run: *install-buck - - save-cache: *save-cache-buck + - save-cache: *save-cache-downloads-buck + # Validate Android test environment (including Buck) - run: *validate-android-test-env - - run: buck fetch ReactAndroid/src/test/java/com/facebook/react/modules - - run: buck fetch ReactAndroid/src/main/java/com/facebook/react - - run: buck fetch ReactAndroid/src/main/java/com/facebook/react/shell - - run: buck fetch ReactAndroid/src/test/... - - run: buck fetch ReactAndroid/src/androidTest/... + # Download dependencies using Buck + - run: *download-dependencies-buck - - restore-cache: *restore-cache-gradle-downloads - - run: *gradle-download-deps - - save-cache: *save-cache-gradle-downloads + # Download dependencies using Gradle + - restore-cache: *restore-cache-downloads-gradle + - run: *download-dependencies-gradle + - save-cache: *save-cache-downloads-gradle # Build and compile - run: *build-android-app @@ -586,12 +542,7 @@ jobs: # Test Suite - run: *run-android-unit-tests - run: *run-android-instrumentation-tests - - # Build Android RNTester - - run: - name: Build Android RNTester - command: | - ./gradlew RNTester:android:app:assembleRelease -Pjobs=$BUILD_THREADS + - run: *build-android-rntester-app # Run Android end-to-end tests # Disabled @@ -646,6 +597,47 @@ jobs: fi when: always + # Publishes new version onto npm + # Only works on stable branches when a properly tagged commit is pushed + publish_npm_package: + <<: *android_defaults + steps: + - attach_workspace: + at: ~/react-native + + # Configure Android SDK and related dependencies + - run: *configure-android-path + - run: *install-android-build-dependencies + + - restore-cache: *restore-cache-android-packages + - run: *install-android-packages + + # Install Android NDK + - run: *create-ndk-directory + - restore-cache: *restore-cache-ndk + - run: *install-ndk + + # Fetch dependencies using Buck + - restore-cache: *restore-cache-downloads-buck + - run: *install-buck + - run: *download-dependencies-buck + + # Fetch dependencies using Gradle + - restore-cache: *restore-cache-downloads-gradle + - run: *download-dependencies-gradle + + - restore-cache: *restore-yarn-cache + - run: *yarn + + - run: + name: Publish React Native Package + command: | + echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc + git config --global user.email "reactjs-bot@users.noreply.github.com" + git config --global user.name "npm Deployment Script" + echo "machine github.com login reactjs-bot password $GITHUB_TOKEN" > ~/.netrc + node ./scripts/publish-npm.js + # Workflows enables us to run multiple jobs in parallel workflows: version: 2 diff --git a/scripts/circleci/buck_fetch.sh b/scripts/circleci/buck_fetch.sh new file mode 100755 index 000000000..df9ce3430 --- /dev/null +++ b/scripts/circleci/buck_fetch.sh @@ -0,0 +1,9 @@ +#!/bin/bash + +set -ex + +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/...