Skip to content

Commit b199b8a

Browse files
committed
feat: implement visionOS CI (#54)
feat: use Xcode beta globally feat: use callstack/hermes-visionos fork feat: test Hermes feat: reset cache keys fix: use callstack/hermes fix: use correct hermes source tarball fix: use never xcode version test only JSC fix: change Xcode version fix: use m1 executor feat: add cocoapods cache fix: remove hermes from cache keys fix: rbenv reset cache test: use 15.2
1 parent 7d0c7bf commit b199b8a

File tree

6 files changed

+169
-23
lines changed

6 files changed

+169
-23
lines changed

.circleci/configurations/executors.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,3 +43,10 @@ executors:
4343
resource_class: macos.x86.medium.gen2
4444
environment:
4545
- RCT_BUILD_HERMES_FROM_SOURCE: true
46+
reactnative-visionos:
47+
<<: *defaults
48+
resource_class: macos.m1.medium.gen1
49+
macos:
50+
xcode: '15.2'
51+
environment:
52+
- RCT_BUILD_HERMES_FROM_SOURCE: true

.circleci/configurations/jobs.yml

Lines changed: 136 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -360,7 +360,7 @@ jobs:
360360
command: |
361361
REPO_ROOT=$(pwd)
362362
node ./scripts/releases/update-template-package.js "{\"react-native\":\"file:$REPO_ROOT/build/$(cat build/react-native-package-version)\"}"
363-
node ./scripts/e2e/init-template-e2e.js --projectName $PROJECT_NAME --templatePath "$REPO_ROOT/packages/react-native" --directory "/tmp/$PROJECT_NAME" --verbose
363+
node ./scripts/template/initialize.js --reactNativeRootPath $REPO_ROOT --templateName $PROJECT_NAME --templateConfigPath "$REPO_ROOT/packages/react-native" --directory "/tmp/$PROJECT_NAME"
364364
- with_gradle_cache:
365365
steps:
366366
- run:
@@ -458,7 +458,7 @@ jobs:
458458
PACKAGE=$(cat build/react-native-package-version)
459459
PATH_TO_PACKAGE="$REPO_ROOT/build/$PACKAGE"
460460
node ./scripts/releases/update-template-package.js "{\"react-native\":\"file:$PATH_TO_PACKAGE\"}"
461-
node ./scripts/e2e/init-template-e2e.js --projectName $PROJECT_NAME --templatePath "$REPO_ROOT/packages/react-native" --directory "/tmp/$PROJECT_NAME" --verbose
461+
node ./scripts/template/initialize.js --reactNativeRootPath $REPO_ROOT --templateName $PROJECT_NAME --templateConfigPath "$REPO_ROOT/packages/react-native" --directory "/tmp/$PROJECT_NAME"
462462
- with_xcodebuild_cache:
463463
podfile_lock_path: << parameters.podfile_lock_path >>
464464
pods_build_folder: << parameters.pods_build_folder >>
@@ -590,6 +590,139 @@ jobs:
590590
steps:
591591
- run_ios_tests
592592

593+
# -------------------------
594+
# JOBS: Test visionOS RNTester
595+
# -------------------------
596+
test_visionos_rntester:
597+
598+
parameters:
599+
jsengine:
600+
default: "JSC"
601+
description: Which JavaScript engine to use. Must be one of "Hermes", "JSC".
602+
type: enum
603+
enum: ["Hermes", "JSC"]
604+
architecture:
605+
default: "OldArch"
606+
description: Which React Native architecture to use. Must be one of "OldArch", "NewArch".
607+
type: enum
608+
enum: ["NewArch", "OldArch"]
609+
use_frameworks:
610+
default: "StaticLibraries"
611+
description: The dependency building and linking strategy to use. Must be one of "StaticLibraries", "DynamicFrameworks"
612+
type: enum
613+
enum: ["StaticLibraries", "DynamicFrameworks"]
614+
ruby_version:
615+
default: "2.6.10"
616+
description: The version of ruby that must be used
617+
type: string
618+
run_unit_tests:
619+
description: whether unit tests should run or not.
620+
default: false
621+
type: boolean
622+
executor:
623+
description: The executor to use
624+
default: reactnative-visionos
625+
type: string
626+
executor: << parameters.executor >>
627+
steps:
628+
- checkout_code_with_cache
629+
- run_yarn
630+
- setup_ruby:
631+
ruby_version: << parameters.ruby_version >>
632+
- with_xcodebuild_cache:
633+
steps:
634+
- run:
635+
name: "Install pods"
636+
command: |
637+
if [[ << parameters.architecture >> == "NewArch" ]]; then
638+
export RCT_NEW_ARCH_ENABLED=1
639+
fi
640+
641+
if [[ << parameters.jsengine >> == "JSC" ]]; then
642+
export USE_HERMES=0
643+
fi
644+
645+
if [[ << parameters.use_frameworks >> == "DynamicFrameworks" ]]; then
646+
export USE_FRAMEWORKS=dynamic
647+
fi
648+
649+
cd packages/rn-tester
650+
651+
bundle install
652+
bundle exec pod install
653+
- run:
654+
name: "Build rn-tester"
655+
command: |
656+
xcodebuild build \
657+
-workspace packages/rn-tester/RNTesterPods.xcworkspace \
658+
-scheme RNTester-visionOS \
659+
-sdk xrsimulator
660+
661+
# -------------------------
662+
# JOBS: Windows
663+
# -------------------------
664+
test_windows:
665+
executor:
666+
name: win/default
667+
environment:
668+
- CHOCO_CACHE_DIR: "C:\\ChocoCache"
669+
steps:
670+
- checkout_code_with_cache
671+
672+
- restore_cache:
673+
keys:
674+
- *windows_choco_cache_key
675+
676+
- run:
677+
name: Choco cache
678+
# Cache our dependencies which can be flakey to download
679+
command: |
680+
if (!Test-Path $env:CHOCO_CACHE_DIR) {
681+
mkdir $env:CHOCO_CACHE_DIR
682+
}
683+
choco config set --name cacheLocation --value $env:CHOCO_CACHE_DIR
684+
685+
- run:
686+
name: Disable NVM
687+
# Use choco to manage node versions due to https://github.com/npm/cli/issues/4234
688+
command: nvm off
689+
690+
- run:
691+
name: Install Node JS
692+
# Note: Version set separately for non-Windows builds, see above.
693+
command: choco install nodejs --version=18.18.0 --allow-downgrade -y
694+
695+
# Setup Dependencies
696+
- run:
697+
name: Enable Yarn with corepack
698+
command: corepack enable
699+
700+
- restore_cache:
701+
keys:
702+
- *windows_yarn_cache_key
703+
- run:
704+
name: "Yarn: Install Dependencies"
705+
command: yarn install --frozen-lockfile --non-interactive
706+
707+
- save_cache:
708+
key: *windows_yarn_cache_key
709+
paths:
710+
- C:\Users\circleci\AppData\Local\Yarn
711+
712+
- save_cache:
713+
key: *windows_choco_cache_key
714+
paths:
715+
- $env:CHOCO_CACHE_DIR
716+
717+
# -------------------------
718+
# Run Tests
719+
- run:
720+
name: "Flow Check"
721+
command: yarn flow-check
722+
- run:
723+
name: "Run Tests: JavaScript Tests"
724+
command: yarn test
725+
593726
# -------------------------
594727
# JOBS: Build Hermes
595728
# -------------------------
@@ -1250,4 +1383,4 @@ jobs:
12501383
command: echo "//registry.npmjs.org/:_authToken=${CIRCLE_NPM_TOKEN}" > ~/.npmrc
12511384
- run:
12521385
name: Find and publish all bumped packages
1253-
command: node ./scripts/releases-ci/publish-updated-packages.js
1386+
command: node ./scripts/monorepo/find-and-publish-all-bumped-packages.js
Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,6 @@
1+
test_visionos:
2+
jobs:
3+
- test_visionos_rntester:
4+
matrix:
5+
parameters:
6+
architecture: ["OldArch", "NewArch"]

.circleci/configurations/top_level.yml

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@ references:
5959
# Dependency Anchors
6060
# -------------------------
6161
dependency_versions:
62-
xcode_version: &xcode_version "15.0.1"
62+
xcode_version: &xcode_version "15.2"
6363
nodelts_image: &nodelts_image "cimg/node:20.2.0"
6464
nodeprevlts_image: &nodeprevlts_image "cimg/node:18.12.1"
6565
nodelts_browser_image: &nodelts_browser_image "cimg/node:20.2.0-browsers"
@@ -74,25 +74,25 @@ references:
7474
gems_cache_key: &gems_cache_key v1-gems-{{ checksum "Gemfile.lock" }}
7575
gradle_cache_key: &gradle_cache_key v3-gradle-{{ .Environment.CIRCLE_JOB }}-{{ checksum "gradle/wrapper/gradle-wrapper.properties" }}-{{ checksum "packages/react-native/ReactAndroid/gradle.properties" }}
7676
yarn_cache_key: &yarn_cache_key v6-yarn-cache-{{ .Environment.CIRCLE_JOB }}
77-
rbenv_cache_key: &rbenv_cache_key v1-rbenv-{{ checksum "/tmp/required_ruby" }}
78-
hermes_workspace_cache_key: &hermes_workspace_cache_key v5-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }}
79-
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" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
80-
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" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
81-
hermes_linux_cache_key: &hermes_linux_cache_key v1-hermes-{{ .Environment.CIRCLE_JOB }}-linux-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
82-
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" }}
77+
rbenv_cache_key: &rbenv_cache_key v2-rbenv-{{ checksum "/tmp/required_ruby" }}
78+
hermes_workspace_cache_key: &hermes_workspace_cache_key v7-visionos-hermes-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/hermes/hermesversion" }}
79+
hermes_workspace_debug_cache_key: &hermes_workspace_debug_cache_key v2-visionos-hermes-{{ .Environment.CIRCLE_JOB }}-debug-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
80+
hermes_workspace_release_cache_key: &hermes_workspace_release_cache_key v2-visionos-hermes-{{ .Environment.CIRCLE_JOB }}-release-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
81+
hermes_linux_cache_key: &hermes_linux_cache_key v1-visionos-hermes-{{ .Environment.CIRCLE_JOB }}-linux-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
82+
hermes_windows_cache_key: &hermes_windows_cache_key v2-visionos-hermes-{{ .Environment.CIRCLE_JOB }}-windows-{{ checksum "/Users/circleci/project/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
8383
# Hermes iOS
84-
hermesc_apple_cache_key: &hermesc_apple_cache_key v3-hermesc-apple-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
85-
hermes_apple_slices_cache_key: &hermes_apple_slices_cache_key v4-hermes-apple-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
86-
hermes_tarball_debug_cache_key: &hermes_tarball_debug_cache_key v5-hermes-tarball-debug-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
87-
hermes_tarball_release_cache_key: &hermes_tarball_release_cache_key v4-hermes-tarball-release-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
88-
hermes_macosx_bin_release_cache_key: &hermes_macosx_bin_release_cache_key v2-hermes-release-macosx-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
89-
hermes_macosx_bin_debug_cache_key: &hermes_macosx_bin_debug_cache_key v2-hermes-debug-macosx-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
90-
hermes_dsym_debug_cache_key: &hermes_dsym_debug_cache_key v2-hermes-debug-dsym-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
91-
hermes_dsym_release_cache_key: &hermes_dsym_release_cache_key v2-hermes-release-dsym-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
84+
hermesc_apple_cache_key: &hermesc_apple_cache_key v4-visionos-hermesc-apple-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
85+
hermes_apple_slices_cache_key: &hermes_apple_slices_cache_key v4-visionos-hermes-apple-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
86+
hermes_tarball_debug_cache_key: &hermes_tarball_debug_cache_key v7-visionos-hermes-tarball-debug-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
87+
hermes_tarball_release_cache_key: &hermes_tarball_release_cache_key v4-visionos-hermes-tarball-release-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}-{{ checksum "packages/react-native/sdks/hermes-engine/utils/build-apple-framework.sh" }}
88+
hermes_macosx_bin_release_cache_key: &hermes_macosx_bin_release_cache_key v2-visionos-hermes-release-macosx-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
89+
hermes_macosx_bin_debug_cache_key: &hermes_macosx_bin_debug_cache_key v2-visionos-hermes-debug-macosx-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
90+
hermes_dsym_debug_cache_key: &hermes_dsym_debug_cache_key v2-visionos-hermes-debug-dsym-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
91+
hermes_dsym_release_cache_key: &hermes_dsym_release_cache_key v2-visionos-hermes-release-dsym-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
9292
# Cocoapods - RNTester
93-
pods_cache_key: &pods_cache_key v11-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}-{{ checksum "packages/rn-tester/Podfile" }}
94-
cocoapods_cache_key: &cocoapods_cache_key v11-cocoapods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock" }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/hermes/hermesversion" }}
95-
rntester_podfile_lock_cache_key: &rntester_podfile_lock_cache_key v9-podfilelock-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/week_year" }}-{{ checksum "/tmp/hermes/hermesversion" }}
93+
pods_cache_key: &pods_cache_key v11-visionos-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}-{{ checksum "packages/rn-tester/Podfile" }}
94+
cocoapods_cache_key: &cocoapods_cache_key v11-visionos-cocoapods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock" }}-{{ checksum "packages/rn-tester/Podfile" }}
95+
rntester_podfile_lock_cache_key: &rntester_podfile_lock_cache_key v9-visionos-podfilelock-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile" }}-{{ checksum "/tmp/week_year" }}
9696

9797
# Cocoapods - Template
9898
template_cocoapods_cache_key: &template_cocoapods_cache_key v6-cocoapods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "/tmp/iOSTemplateProject/ios/Podfile.lock" }}-{{ checksum "/tmp/iOSTemplateProject/ios/Podfile" }}-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "packages/rn-tester/Podfile.lock" }}

packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1050,7 +1050,6 @@
10501050
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
10511051
CLANG_ENABLE_OBJC_WEAK = YES;
10521052
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
1053-
CODE_SIGN_STYLE = Automatic;
10541053
CURRENT_PROJECT_VERSION = 1;
10551054
DEBUG_INFORMATION_FORMAT = dwarf;
10561055
DEVELOPMENT_ASSET_PATHS = "\"RNTester-visionOS/Preview Content\"";
@@ -1149,7 +1148,6 @@
11491148
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
11501149
CLANG_ENABLE_OBJC_WEAK = YES;
11511150
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
1152-
CODE_SIGN_STYLE = Automatic;
11531151
COPY_PHASE_STRIP = NO;
11541152
CURRENT_PROJECT_VERSION = 1;
11551153
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";

scripts/circleci/pipeline_selection.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -160,6 +160,7 @@ function _computeAndSavePipelineParameters(
160160
const params = {
161161
run_all: false,
162162
run_ios: false,
163+
run_visionos: true,
163164
run_android: false,
164165
run_js: true,
165166
run_e2e: false,
@@ -211,6 +212,7 @@ function createConfigs(inputPath, outputPath, configFile) {
211212
const baseFolder = 'test_workflows';
212213
const testConfigs = {
213214
run_ios: ['testIOS.yml'],
215+
run_visionos: ['testVisionOS.yml'],
214216
run_android: ['testAndroid.yml'],
215217
run_e2e: ['testE2E.yml'],
216218
run_all: ['testJS.yml', 'testAll.yml'],

0 commit comments

Comments
 (0)