Clear cache to resolve iOS, tvOS workflow
Summary: tvOS and iOS workflows were flaky, apparently due to a stale cache that contained a problematic version of the Metro dependency. Thanks to motiz88 for identifying the potential cause of flakiness in https://github.com/react-native-community/react-native-releases/issues/2#issuecomment-371905315. https://circleci.com/workflow-run/440180a2-e888-4f27-bec9-b8e5d9be6708 [GENERAL] [MINOR] [CI] - Resolve iOS, tvOS failures in Circle Closes https://github.com/facebook/react-native/pull/18304 Differential Revision: D7220150 Pulled By: hramos fbshipit-source-id: 0f5e68c779dfce44e6deb8b813a3ac9e25a2ab97
This commit is contained in:
parent
3e9a371ace
commit
c9d756285a
|
@ -2,43 +2,51 @@ aliases:
|
||||||
# Cache Management
|
# Cache Management
|
||||||
- &restore-yarn-cache
|
- &restore-yarn-cache
|
||||||
keys:
|
keys:
|
||||||
- v1-yarn-{{ arch }}-{{ checksum "package.json" }}
|
- v1-yarn-{{ arch }}-{{ .Branch }}-{{ checksum "package.json" }}
|
||||||
# Fallback in case checksum fails
|
# Fallback in case checksum fails
|
||||||
- v1-yarn-{{ arch }}-
|
- v1-yarn-{{ arch }}-{{ .Branch }}-
|
||||||
|
# Fallback in case this is a first-time run on a fork
|
||||||
|
- v1-yarn-{{ arch }}-master-
|
||||||
- &save-yarn-cache
|
- &save-yarn-cache
|
||||||
paths:
|
paths:
|
||||||
- node_modules
|
- node_modules
|
||||||
- ~/.cache/yarn
|
- ~/.cache/yarn
|
||||||
key: v1-yarn-{{ arch }}-{{ checksum "package.json" }}
|
key: v1-yarn-{{ arch }}-{{ .Branch }}-{{ checksum "package.json" }}
|
||||||
|
|
||||||
- &restore-cache-analysis
|
- &restore-cache-analysis
|
||||||
keys:
|
keys:
|
||||||
- v1-analysis-dependencies-{{ arch }}-{{ checksum "package.json" }}{{ checksum "bots/package.json" }}
|
- v1-analysis-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "package.json" }}{{ checksum "bots/package.json" }}
|
||||||
# Fallback in case checksum fails
|
# Fallback in case checksum fails
|
||||||
- v1-analysis-dependencies-{{ arch }}-
|
- v1-analysis-dependencies-{{ arch }}-{{ .Branch }}-
|
||||||
|
# Fallback in case this is a first-time run on a fork
|
||||||
|
- v1-analysis-dependencies-{{ arch }}-master-
|
||||||
- &save-cache-analysis
|
- &save-cache-analysis
|
||||||
paths:
|
paths:
|
||||||
- bots/node_modules
|
- bots/node_modules
|
||||||
- node_modules
|
- node_modules
|
||||||
key: v1-analysis-dependencies-{{ arch }}-{{ checksum "package.json" }}{{ checksum "bots/package.json" }}
|
key: v1-analysis-dependencies-{{ arch }}-{{ .Branch }}-{{ checksum "package.json" }}{{ checksum "bots/package.json" }}
|
||||||
|
|
||||||
- &restore-cache-android-packages
|
- &restore-cache-android-packages
|
||||||
keys:
|
keys:
|
||||||
- v1-android-sdkmanager-packages-{{ arch }}-api-26-alpha-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
- v1-android-sdkmanager-packages-{{ arch }}-{{ .Branch }}-api-26-alpha-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
||||||
# Fallback in case checksum fails
|
# Fallback in case checksum fails
|
||||||
- v1-android-sdkmanager-packages-{{ arch }}-api-26-alpha-
|
- v1-android-sdkmanager-packages-{{ arch }}-{{ .Branch }}-api-26-alpha-
|
||||||
|
# Fallback in case this is a first-time run on a fork
|
||||||
|
- v1-android-sdkmanager-packages-{{ arch }}-master-api-26-alpha-
|
||||||
- &save-cache-android-packages
|
- &save-cache-android-packages
|
||||||
paths:
|
paths:
|
||||||
- /opt/android/sdk
|
- /opt/android/sdk
|
||||||
key: v1-android-sdkmanager-packages-{{ arch }}-api-26-alpha-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
key: v1-android-sdkmanager-packages-{{ arch }}-{{ .Branch }}-api-26-alpha-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
||||||
|
|
||||||
- &restore-cache-ndk
|
- &restore-cache-ndk
|
||||||
keys:
|
keys:
|
||||||
- v2-android-ndk-{{ arch }}-r10e-32-64
|
- v2-android-ndk-{{ arch }}-r10e-32-64-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
||||||
|
# Fallback in case checksum fails
|
||||||
|
- v2-android-ndk-{{ arch }}-r10e-32-64-
|
||||||
- &save-cache-ndk
|
- &save-cache-ndk
|
||||||
paths:
|
paths:
|
||||||
- /opt/ndk
|
- /opt/ndk
|
||||||
key: v2-android-ndk-{{ arch }}-r10e-32-64
|
key: v2-android-ndk-{{ arch }}-r10e-32-64-{{ checksum "scripts/circle-ci-android-setup.sh" }}
|
||||||
|
|
||||||
- &restore-cache-buck
|
- &restore-cache-buck
|
||||||
keys:
|
keys:
|
||||||
|
@ -152,9 +160,11 @@ aliases:
|
||||||
command: yarn flow check
|
command: yarn flow check
|
||||||
when: always
|
when: always
|
||||||
|
|
||||||
- &run-license-checks
|
- &run-sanity-checks
|
||||||
name: Check license
|
name: Sanity checks
|
||||||
command: ./scripts/circleci/check_license.sh
|
command: |
|
||||||
|
./scripts/circleci/check_license.sh
|
||||||
|
./scripts/circleci/check_cache.sh
|
||||||
when: always
|
when: always
|
||||||
|
|
||||||
- &build-android-app
|
- &build-android-app
|
||||||
|
@ -209,19 +219,11 @@ aliases:
|
||||||
name: Initial Setup
|
name: Initial Setup
|
||||||
command: |
|
command: |
|
||||||
mkdir -p ~/react-native/reports/junit/
|
mkdir -p ~/react-native/reports/junit/
|
||||||
|
|
||||||
- &build-objc-ios-test-app
|
|
||||||
name: Build iOS Test App
|
|
||||||
command: ./scripts/objc-test-ios.sh
|
|
||||||
|
|
||||||
- &run-objc-ios-tests
|
- &run-objc-ios-tests
|
||||||
name: iOS Test Suite
|
name: iOS Test Suite
|
||||||
command: ./scripts/objc-test-ios.sh test
|
command: ./scripts/objc-test-ios.sh test
|
||||||
|
|
||||||
- &build-objc-tvos-test-app
|
|
||||||
name: Build tvOS Test App
|
|
||||||
command: ./scripts/objc-test-tvos.sh
|
|
||||||
|
|
||||||
- &run-objc-tvos-tests
|
- &run-objc-tvos-tests
|
||||||
name: tvOS Test Suite
|
name: tvOS Test Suite
|
||||||
command: ./scripts/objc-test-tvos.sh test
|
command: ./scripts/objc-test-tvos.sh test
|
||||||
|
@ -274,6 +276,9 @@ jobs:
|
||||||
- run: *yarn
|
- run: *yarn
|
||||||
- save-cache: *save-yarn-cache
|
- save-cache: *save-yarn-cache
|
||||||
|
|
||||||
|
# Basic checks against the checkout, cache...
|
||||||
|
- run: *run-sanity-checks
|
||||||
|
|
||||||
- persist_to_workspace:
|
- persist_to_workspace:
|
||||||
root: .
|
root: .
|
||||||
paths: .
|
paths: .
|
||||||
|
@ -288,7 +293,6 @@ jobs:
|
||||||
|
|
||||||
- run: *run-lint-checks
|
- run: *run-lint-checks
|
||||||
- run: *run-flow-checks
|
- run: *run-flow-checks
|
||||||
- run: *run-license-checks
|
|
||||||
|
|
||||||
- store_test_results:
|
- store_test_results:
|
||||||
path: ~/react-native/reports/junit
|
path: ~/react-native/reports/junit
|
||||||
|
|
|
@ -0,0 +1,26 @@
|
||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
set -e
|
||||||
|
|
||||||
|
# Make sure we don't accidentally restore a cache that contains the Metro
|
||||||
|
# filename issue that was fixed in Metro 0.25, originally introduced in
|
||||||
|
# D6752278. Once fixed, this was causing sporadic failures in the iOS
|
||||||
|
# and tvOS workflows as the issue persisted in the cached node_modules
|
||||||
|
#
|
||||||
|
# The filename issue can be summarized as follows:
|
||||||
|
# A version of Metro was published to npm with HmrClient.js and
|
||||||
|
# HmrClient.js.flow files, while the repo contains HMRClient.js and
|
||||||
|
# HMRClient.js.flow. This was due to a case issue in the publisher's
|
||||||
|
# host machine.
|
||||||
|
# The issue this is checking for is manifested by the presence of all
|
||||||
|
# of the following files: HmrClient.js, HMRClient.js, HmrClient.js.flow,
|
||||||
|
# HMRClient.js.flow.
|
||||||
|
|
||||||
|
EXPECTED='1'
|
||||||
|
ACTUAL=$(ls node_modules/metro/src/lib/bundle-modules/*.js | xargs | awk '{print tolower($0)}' | tr ' ' '\n' | grep hmrclient.js | wc -l | tr -d '[:space:]')
|
||||||
|
|
||||||
|
if [ "$EXPECTED" != "$ACTUAL" ]; then
|
||||||
|
echo "HmrClient.js crept into the cache?"
|
||||||
|
echo $(ls node_modules/metro/src/lib/bundle-modules/H*lient.js)
|
||||||
|
exit 1
|
||||||
|
fi
|
Loading…
Reference in New Issue