From de1040fcff558a58e2a616efebaf55d9bf5332b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?H=C3=A9ctor=20Ramos?= Date: Tue, 27 Mar 2018 09:15:54 -0700 Subject: [PATCH] Cache apt dependencies in test_android Summary: Closes https://github.com/facebook/react-native/pull/18576 Differential Revision: D7415216 Pulled By: hramos fbshipit-source-id: 9b7199fe5fb91a26ba0881e426a85395b2923f26 --- .circleci/config.yml | 46 ++++++++++++++++++++---- scripts/circleci/apt-get-android-deps.sh | 25 +++++++++++++ 2 files changed, 65 insertions(+), 6 deletions(-) create mode 100755 scripts/circleci/apt-get-android-deps.sh diff --git a/.circleci/config.yml b/.circleci/config.yml index 675aeb4e0..196d3d3e6 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -38,6 +38,31 @@ aliases: - /opt/android/sdk key: v1-android-sdkmanager-packages-{{ arch }}-{{ .Branch }}-api-26-alpha-{{ checksum "scripts/circle-ci-android-setup.sh" }} + - &restore-cache-gradle + keys: + - v1-gradle-{{ arch }}-{{ .Branch }}-{{ checksum "build.gradle" }}-{{ checksum "ReactAndroid/build.gradle" }} + # Fallback in case checksum fails + - v1-gradle-{{ arch }}-{{ .Branch }}-{{ checksum "build.gradle" }}- + - v1-gradle-{{ arch }}-{{ .Branch }}- + # Fallback in case this is a first-time run on a fork + - v1-gradle-{{ arch }}-master- + - &save-cache-gradle + paths: + - ~/.gradle + key: v1-gradle-{{ arch }}-{{ .Branch }}-{{ checksum "build.gradle" }}-{{ checksum "ReactAndroid/build.gradle" }} + + - &restore-cache-apt + keys: + - v1-apt-{{ arch }}-{{ .Branch }}-{{ checksum "scripts/circleci/apt-get-android-deps.sh" }} + # Fallback in case checksum fails + - v1-apt-{{ arch }}-{{ .Branch }}- + # Fallback in case this is a first-time run on a fork + - v1-apt-{{ arch }}-master- + - &save-cache-apt + paths: + - ~/vendor/apt + key: v1-apt-{{ arch }}-{{ .Branch }}-{{ checksum "scripts/circleci/apt-get-android-deps.sh" }} + - &restore-cache-ndk keys: - v2-android-ndk-{{ arch }}-r10e-32-64-{{ checksum "scripts/circle-ci-android-setup.sh" }} @@ -97,7 +122,8 @@ aliases: yarn install --non-interactive --cache-folder ~/.cache/yarn - &install-yarn - | + name: Install Yarn + command: | curl -sS https://dl.yarnpkg.com/debian/pubkey.gpg | sudo apt-key add - echo "deb https://dl.yarnpkg.com/debian/ stable main" | sudo tee /etc/apt/sources.list.d/yarn.list sudo apt-get update && sudo apt-get install yarn @@ -107,7 +133,8 @@ aliases: npm install --no-package-lock --no-spin --no-progress - &install-buck - | + name: Install BUCK + command: | if [[ ! -e ~/buck ]]; then git clone https://github.com/facebook/buck.git ~/buck --branch v2018.02.16.01 --depth=1 fi @@ -115,7 +142,8 @@ aliases: buck --version - &install-node - | + name: Install Node + command: | curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash - sudo apt-get install -y nodejs @@ -141,9 +169,7 @@ aliases: - &install-android-build-dependencies name: Install Android Build Dependencies - command: | - sudo apt-get update -y - sudo apt-get install ant autoconf automake g++ gcc libqt5widgets5 lib32z1 lib32stdc++6 make maven python-dev python3-dev qml-module-qtquick-controls qtdeclarative5-dev file -y + command: ./scripts/circleci/apt-get-android-deps.sh - &validate-android-sdk name: Validate Android SDK Install @@ -400,6 +426,7 @@ jobs: # 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 @@ -450,7 +477,10 @@ jobs: # Configure Android SDK and related dependencies - run: *configure-android-path + - restore-cache: *restore-cache-apt - run: *install-android-build-dependencies + - save-cache: *save-cache-apt + - restore-cache: *restore-cache-android-packages - run: *install-android-packages - save-cache: *save-cache-android-packages @@ -481,7 +511,11 @@ jobs: - run: buck fetch ReactAndroid/src/main/java/com/facebook/react/shell - run: buck fetch ReactAndroid/src/test/... - run: buck fetch ReactAndroid/src/androidTest/... + + # Gradle + - restore-cache: *restore-cache-gradle - run: ./gradlew :ReactAndroid:downloadBoost :ReactAndroid:downloadDoubleConversion :ReactAndroid:downloadFolly :ReactAndroid:downloadGlog :ReactAndroid:downloadJSCHeaders + - save-cache: *save-cache-gradle # Build and compile - run: *build-android-app diff --git a/scripts/circleci/apt-get-android-deps.sh b/scripts/circleci/apt-get-android-deps.sh new file mode 100755 index 000000000..6463de83d --- /dev/null +++ b/scripts/circleci/apt-get-android-deps.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +set -e + +echo "Downloading package lists..." +sudo apt-get update -y + +if ! [[ -d ~/vendor/apt ]]; then + mkdir -p ~/vendor/apt +fi + +# First check for archives cache +if ! [[ -d ~/vendor/apt/archives ]]; then + # It doesn't so download the packages + echo "Downloading build dependencies..." + sudo apt-get install --download-only ant autoconf automake g++ gcc libqt5widgets5 lib32z1 lib32stdc++6 make maven python-dev python3-dev qml-module-qtquick-controls qtdeclarative5-dev file -y + # Then move them to our cache directory + sudo cp -R /var/cache/apt ~/vendor/ + # Making sure our user has ownership, in order to cache + sudo chown -R ${USER:=$(/usr/bin/id -run)}:$USER ~/vendor/apt +fi + +# Install all packages in the cache +echo "Installing build dependencies..." +sudo dpkg -i ~/vendor/apt/archives/*.deb \ No newline at end of file