Skip to content

Commit 3f61b5f

Browse files
cipolleschiRiccardo Cipolleschi
authored andcommitted
Make CircleCI caches for hermesc be version dependent (#37452)
Summary: Pull Request resolved: #37452 Fixes #37428 We do have cache poisoning for hermesc on Windows and Linux due to reusing the same cache key among different React Native version. This fixes it by specifying a cache key which is version dependent + it invalidates the caches by defining a new key. Changelog: [Internal] [Fixed] - Make CircleCI caches for hermesc be version dependent Reviewed By: cortinico Differential Revision: D45909178 fbshipit-source-id: 830c87ae45739c7053342a68dac2ee7581945c1d
1 parent a582ca5 commit 3f61b5f

1 file changed

Lines changed: 30 additions & 8 deletions

File tree

.circleci/config.yml

Lines changed: 30 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,8 @@ references:
6666
hermes_workspace_cache_key: &hermes_workspace_cache_key v4-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }}
6767
hermes_workspace_debug_cache_key: &hermes_workspace_debug_cache_key v2-hermes-{{ .Environment.CIRCLE_JOB }}-debug-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
6868
hermes_workspace_release_cache_key: &hermes_workspace_release_cache_key v2-hermes-{{ .Environment.CIRCLE_JOB }}-release-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
69-
hermes_windows_cache_key: &hermes_windows_cache_key v3-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "tmp/hermes/hermesversion" }}
69+
hermes_linux_cache_key: &hermes_linux_cache_key v1-hermes-{{ .Environment.CIRCLE_JOB }}-linux-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
70+
hermes_windows_cache_key: &hermes_windows_cache_key v2-hermes-{{ .Environment.CIRCLE_JOB }}-windows-{{ checksum "/Users/circleci/project/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
7071
hermes_tarball_debug_cache_key: &hermes_tarball_debug_cache_key v4-hermes-tarball-debug-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
7172
hermes_tarball_release_cache_key: &hermes_tarball_release_cache_key v3-hermes-tarball-release-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
7273
pods_cache_key: &pods_cache_key v8-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}-{{ checksum "packages/rn-tester/Podfile" }}
@@ -275,11 +276,24 @@ commands:
275276
- run:
276277
name: Get React Native version
277278
command: |
278-
VERSION=$( grep '"version"' package.json | cut -d '"' -f 4 | head -1)
279+
VERSION=$(cat package.json | jq -r '.version')
279280
# Save the react native version we are building in a file so we can use that file as part of the cache key.
280281
echo "$VERSION" > /tmp/react-native-version
281282
echo "React Native Version is $(cat /tmp/react-native-version)"
282-
echo "Hermes commit is $(cat /tmp/hermes/hermesversion)"
283+
HERMES_VERSION="$(cat /tmp/hermes/hermesversion)"
284+
echo "Hermes commit is $HERMES_VERSION"
285+
286+
get_react_native_version_windows:
287+
steps:
288+
- run:
289+
name: Get React Native version on Windows
290+
command: |
291+
$VERSION=cat packages/react-native/package.json | jq -r '.version'
292+
# Save the react native version we are building in a file so we can use that file as part of the cache key.
293+
echo "$VERSION" > /tmp/react-native-version
294+
echo "React Native Version is $(cat /tmp/react-native-version)"
295+
$HERMES_VERSION=cat C:\Users\circleci\project\tmp\hermes\hermesversion
296+
echo "Hermes commit is $HERMES_VERSION"
283297
284298
with_hermes_tarball_cache_span:
285299
parameters:
@@ -715,11 +729,16 @@ jobs:
715729
command: |
716730
buck build ReactAndroid/src/main/java/com/facebook/react
717731
buck build ReactAndroid/src/main/java/com/facebook/react/shell
718-
719732
- run:
720733
name: Run Tests - Android Unit Tests with Buck
721734
command: buck test ReactAndroid/src/test/... --config build.threads=$BUILD_THREADS --xml ./reports/buck/all-results-raw.xml
722735

736+
- store_test_results:
737+
path: ~/react-native/ReactAndroid/build/test-results
738+
739+
- store_test_results:
740+
path: ~/react-native/packages/react-native-gradle-plugin/build/test-results
741+
723742
- run:
724743
name: Build JavaScript Bundle for instrumentation tests
725744
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
@@ -1168,17 +1187,18 @@ jobs:
11681187
docker:
11691188
- image: debian:bullseye
11701189
resource_class: "xlarge"
1171-
working_directory: /root
11721190
steps:
1191+
- checkout_code_with_cache
11731192
- run:
11741193
name: Install dependencies
11751194
command: |
11761195
apt update
11771196
apt install -y git openssh-client cmake build-essential \
1178-
libreadline-dev libicu-dev zip python3
1197+
libreadline-dev libicu-dev jq zip python3
11791198
- *attach_hermes_workspace
1199+
- get_react_native_version
11801200
- restore_cache:
1181-
key: *hermes_workspace_cache_key
1201+
key: *hermes_linux_cache_key
11821202
- run:
11831203
name: Set up workspace
11841204
command: |
@@ -1197,7 +1217,7 @@ jobs:
11971217
cp /tmp/hermes/build/bin/hermesc /tmp/hermes/linux64-bin/.
11981218
fi
11991219
- save_cache:
1200-
key: *hermes_workspace_cache_key
1220+
key: *hermes_linux_cache_key
12011221
paths:
12021222
- /tmp/hermes/linux64-bin/
12031223
- /tmp/hermes/hermes/destroot/
@@ -1318,7 +1338,9 @@ jobs:
13181338
- MSBUILD_DIR: 'C:\Program Files (x86)\Microsoft Visual Studio\2019\BuildTools\MSBuild\Current\Bin'
13191339
- CMAKE_DIR: 'C:\Program Files\CMake\bin'
13201340
steps:
1341+
- checkout_code_with_cache
13211342
- *attach_hermes_workspace
1343+
- get_react_native_version_windows
13221344
- restore_cache:
13231345
key: *hermes_windows_cache_key
13241346
- run:

0 commit comments

Comments
 (0)