Skip to content

Commit c366615

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 # Conflicts: # .circleci/configurations/executors.yml # .circleci/configurations/top_level.yml # scripts/circleci/pipeline_selection.js
1 parent 1c0f33a commit c366615

File tree

6 files changed

+119
-20
lines changed

6 files changed

+119
-20
lines changed

.circleci/configurations/executors.yml

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,3 +36,10 @@ executors:
3636
resource_class: macos.x86.medium.gen2
3737
environment:
3838
- BUILD_FROM_SOURCE: true
39+
reactnative-visionos:
40+
<<: *defaults
41+
resource_class: macos.m1.medium.gen1
42+
macos:
43+
xcode: '15.2'
44+
environment:
45+
- BUILD_FROM_SOURCE: true

.circleci/configurations/jobs.yml

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -589,6 +589,74 @@ jobs:
589589
steps:
590590
- run_ios_tests
591591

592+
# -------------------------
593+
# JOBS: Test visionOS RNTester
594+
# -------------------------
595+
test_visionos_rntester:
596+
597+
parameters:
598+
jsengine:
599+
default: "JSC"
600+
description: Which JavaScript engine to use. Must be one of "Hermes", "JSC".
601+
type: enum
602+
enum: ["Hermes", "JSC"]
603+
architecture:
604+
default: "OldArch"
605+
description: Which React Native architecture to use. Must be one of "OldArch", "NewArch".
606+
type: enum
607+
enum: ["NewArch", "OldArch"]
608+
use_frameworks:
609+
default: "StaticLibraries"
610+
description: The dependency building and linking strategy to use. Must be one of "StaticLibraries", "DynamicFrameworks"
611+
type: enum
612+
enum: ["StaticLibraries", "DynamicFrameworks"]
613+
ruby_version:
614+
default: "2.6.10"
615+
description: The version of ruby that must be used
616+
type: string
617+
run_unit_tests:
618+
description: whether unit tests should run or not.
619+
default: false
620+
type: boolean
621+
executor:
622+
description: The executor to use
623+
default: reactnative-visionos
624+
type: string
625+
executor: << parameters.executor >>
626+
steps:
627+
- checkout_code_with_cache
628+
- run_yarn
629+
- setup_ruby:
630+
ruby_version: << parameters.ruby_version >>
631+
- with_xcodebuild_cache:
632+
steps:
633+
- run:
634+
name: "Install pods"
635+
command: |
636+
if [[ << parameters.architecture >> == "NewArch" ]]; then
637+
export RCT_NEW_ARCH_ENABLED=1
638+
fi
639+
640+
if [[ << parameters.jsengine >> == "JSC" ]]; then
641+
export USE_HERMES=0
642+
fi
643+
644+
if [[ << parameters.use_frameworks >> == "DynamicFrameworks" ]]; then
645+
export USE_FRAMEWORKS=dynamic
646+
fi
647+
648+
cd packages/rn-tester
649+
650+
bundle install
651+
bundle exec pod install
652+
- run:
653+
name: "Build rn-tester"
654+
command: |
655+
xcodebuild build \
656+
-workspace packages/rn-tester/RNTesterPods.xcworkspace \
657+
-scheme RNTester-visionOS \
658+
-sdk xrsimulator
659+
592660
# -------------------------
593661
# JOBS: Windows
594662
# -------------------------
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 "14.3.0"
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 v2-hermesc-apple-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
85-
hermes_apple_slices_cache_key: &hermes_apple_slices_cache_key v2-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 v4-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 v3-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 v1-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 v1-hermes-debug-macosx-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
90-
hermes_dsym_debug_cache_key: &hermes_dsym_debug_cache_key v1-hermes-debug-dsym-{{ checksum "/tmp/hermes/hermesversion" }}-{{ checksum "/tmp/react-native-version" }}
91-
hermes_dsym_release_cache_key: &hermes_dsym_release_cache_key v1-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 v10-pods-{{ .Environment.CIRCLE_JOB }}-{{ checksum "packages/rn-tester/Podfile.lock.bak" }}-{{ checksum "packages/rn-tester/Podfile" }}
94-
cocoapods_cache_key: &cocoapods_cache_key v9-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 v7-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 v4-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
@@ -1051,7 +1051,6 @@
10511051
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
10521052
CLANG_ENABLE_OBJC_WEAK = YES;
10531053
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
1054-
CODE_SIGN_STYLE = Automatic;
10551054
CURRENT_PROJECT_VERSION = 1;
10561055
DEBUG_INFORMATION_FORMAT = dwarf;
10571056
DEVELOPMENT_ASSET_PATHS = "\"RNTester-visionOS/Preview Content\"";
@@ -1150,7 +1149,6 @@
11501149
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
11511150
CLANG_ENABLE_OBJC_WEAK = YES;
11521151
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
1153-
CODE_SIGN_STYLE = Automatic;
11541152
COPY_PHASE_STRIP = NO;
11551153
CURRENT_PROJECT_VERSION = 1;
11561154
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";

scripts/circleci/pipeline_selection.js

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -144,6 +144,25 @@ async function _computeAndSavePipelineParameters(pipelineType, outputPath) {
144144
return;
145145
}
146146

147+
// Custom config for visionOS
148+
if (pipelineType === 'VISION_OS') {
149+
const params = {
150+
run_all: false,
151+
run_ios: false,
152+
run_visionos: true,
153+
run_android: false,
154+
run_js: true,
155+
run_e2e: false,
156+
};
157+
158+
const stringifiedParams = JSON.stringify(params, null, 2);
159+
fs.writeFileSync(filePath, stringifiedParams);
160+
console.info(`Generated params:\n${stringifiedParams}`);
161+
162+
return;
163+
}
164+
165+
console.log(`Should run e2e? ${shouldRunE2E}`);
147166
if (pipelineType === 'ALL') {
148167
fs.writeFileSync(filePath, JSON.stringify({run_all: true}, null, 2));
149168
return;
@@ -179,6 +198,7 @@ function createConfigs(inputPath, outputPath, configFile) {
179198
const baseFolder = 'test_workflows';
180199
const testConfigs = {
181200
run_ios: ['testIOS.yml'],
201+
run_visionos: ['testVisionOS.yml'],
182202
run_android: ['testAndroid.yml'],
183203
run_e2e: ['testE2E.yml'],
184204
run_all: ['testE2E.yml', 'testJS.yml', 'testAll.yml'],

0 commit comments

Comments
 (0)