Skip to content

Commit

Permalink
feat: implement visionOS CI (#54)
Browse files Browse the repository at this point in the history
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

fix: run visionos CI on every PR (#62)

chore: disable some of upstream pipelines (#33)

* chore: disable some of upstream pipelines

* tests: update snapshot for visionOS

* chore: disable more jobs, fix isVisionOS

* fix: Keyboard.js, adjust pipeline_selection.js

* feat: run iOS tests every night

chore: disable android tests (#39)

fix: prevent from running the testAll.yml on main (#41)

fix: ci on main (#44)

fix: remove windows jobs (#126)

* fix: remove windows jobs

* fix: sync jobs.yml
  • Loading branch information
okwasniewski committed Jul 15, 2024
1 parent f865094 commit 48aa76e
Show file tree
Hide file tree
Showing 10 changed files with 118 additions and 12 deletions.
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -71,7 +71,7 @@ jobs:
name: "[Main or Stable] Create input for config to test everything"
command: |
mkdir -p /tmp/circleci/
echo '{ "run_all": true }' > /tmp/circleci/pipeline_config.json
node ./scripts/circleci/pipeline_selection.js filter-jobs
- when:
condition:
not:
Expand Down
14 changes: 14 additions & 0 deletions .circleci/configurations/executors.yml
Original file line number Diff line number Diff line change
Expand Up @@ -36,3 +36,17 @@ executors:
resource_class: macos.m1.medium.gen1
environment:
- RCT_BUILD_HERMES_FROM_SOURCE: true
reactnativeios-lts:
<<: *defaults
macos:
xcode: '14.3.1'
resource_class: macos.x86.medium.gen2
environment:
- RCT_BUILD_HERMES_FROM_SOURCE: true
reactnative-visionos:
<<: *defaults
resource_class: macos.m1.medium.gen1
macos:
xcode: '15.2'
environment:
- RCT_BUILD_HERMES_FROM_SOURCE: true
68 changes: 68 additions & 0 deletions .circleci/configurations/jobs.yml
Original file line number Diff line number Diff line change
Expand Up @@ -437,6 +437,74 @@ jobs:
steps:
- run_ios_tests

# -------------------------
# JOBS: Test visionOS RNTester
# -------------------------
test_visionos_rntester:

parameters:
jsengine:
default: "JSC"
description: Which JavaScript engine to use. Must be one of "Hermes", "JSC".
type: enum
enum: ["Hermes", "JSC"]
architecture:
default: "OldArch"
description: Which React Native architecture to use. Must be one of "OldArch", "NewArch".
type: enum
enum: ["NewArch", "OldArch"]
use_frameworks:
default: "StaticLibraries"
description: The dependency building and linking strategy to use. Must be one of "StaticLibraries", "DynamicFrameworks"
type: enum
enum: ["StaticLibraries", "DynamicFrameworks"]
ruby_version:
default: "2.6.10"
description: The version of ruby that must be used
type: string
run_unit_tests:
description: whether unit tests should run or not.
default: false
type: boolean
executor:
description: The executor to use
default: reactnative-visionos
type: string
executor: << parameters.executor >>
steps:
- checkout_code_with_cache
- run_yarn
- setup_ruby:
ruby_version: << parameters.ruby_version >>
- with_xcodebuild_cache:
steps:
- run:
name: "Install pods"
command: |
if [[ << parameters.architecture >> == "NewArch" ]]; then
export RCT_NEW_ARCH_ENABLED=1
fi
if [[ << parameters.jsengine >> == "JSC" ]]; then
export USE_HERMES=0
fi
if [[ << parameters.use_frameworks >> == "DynamicFrameworks" ]]; then
export USE_FRAMEWORKS=dynamic
fi
cd packages/rn-tester
bundle install
bundle exec pod install
- run:
name: "Build rn-tester"
command: |
xcodebuild build \
-workspace packages/rn-tester/RNTesterPods.xcworkspace \
-scheme RNTester-visionOS \
-sdk xrsimulator
# -------------------------
# JOBS: Build Hermes
# -------------------------
Expand Down
14 changes: 6 additions & 8 deletions .circleci/configurations/test_workflows/testAll.yml
Original file line number Diff line number Diff line change
Expand Up @@ -11,8 +11,8 @@
tag: test
dry_run: true
- prepare_hermes_workspace
- build_android:
release_type: "dry-run"
# - build_android:
# release_type: "dry-run"
- build_hermesc_linux:
requires:
- prepare_hermes_workspace
Expand All @@ -39,15 +39,13 @@
# Build a release package on every untagged commit, but do not publish to npm.
release_type: "dry-run"
requires:
- build_android
# - build_android
- build_hermesc_linux
- build_hermes_macos
- build_hermesc_windows
- test_android:
requires:
- build_android
## Disabled to land removing react-native/template. Re-enable once switched over
## to Helloworld.
# - test_android:
# requires:
# - build_android
# - test_android_template:
# requires:
# - build_npm_package
Expand Down
1 change: 1 addition & 0 deletions .circleci/configurations/test_workflows/testAndroid.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
tests_android:
when:
and:
- equal: [ true, false ] # Disable for visionOS
- equal: [ false, << pipeline.parameters.run_release_workflow >> ]
- equal: [ false, << pipeline.parameters.run_nightly_workflow >> ]
jobs:
Expand Down
1 change: 1 addition & 0 deletions .circleci/configurations/test_workflows/testIOS.yml
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
test_ios:
when:
and:
- equal: [ true, false ] # Disable for visionOS
- equal: [ false, << pipeline.parameters.run_release_workflow >> ]
- equal: [ false, << pipeline.parameters.run_nightly_workflow >> ]
jobs:
Expand Down
6 changes: 6 additions & 0 deletions .circleci/configurations/test_workflows/testVisionOS.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
test_visionos:
jobs:
- test_visionos_rntester:
matrix:
parameters:
architecture: ["OldArch", "NewArch"]
Empty file added .github/workflows/ios-tests.yml
Empty file.
2 changes: 0 additions & 2 deletions packages/rn-tester/RNTesterPods.xcodeproj/project.pbxproj
Original file line number Diff line number Diff line change
Expand Up @@ -1053,7 +1053,6 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = dwarf;
DEVELOPMENT_ASSET_PATHS = "\"RNTester-visionOS/Preview Content\"";
Expand Down Expand Up @@ -1152,7 +1151,6 @@
CLANG_CXX_LANGUAGE_STANDARD = "gnu++20";
CLANG_ENABLE_OBJC_WEAK = YES;
CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE;
CODE_SIGN_STYLE = Automatic;
COPY_PHASE_STRIP = NO;
CURRENT_PROJECT_VERSION = 1;
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
Expand Down
22 changes: 21 additions & 1 deletion scripts/circleci/pipeline_selection.js
Original file line number Diff line number Diff line change
Expand Up @@ -155,6 +155,24 @@ function _computeAndSavePipelineParameters(
return;
}

// Custom config for visionOS
if (pipelineType === 'VISION_OS') {
const params = {
run_all: false,
run_ios: false,
run_visionos: true,
run_android: false,
run_js: true,
run_e2e: false,
};

const stringifiedParams = JSON.stringify(params, null, 2);
fs.writeFileSync(filePath, stringifiedParams);
console.info(`Generated params:\n${stringifiedParams}`);

return;
}

console.log(`Should run e2e? ${shouldRunE2E}`);
if (pipelineType === 'ALL') {
fs.writeFileSync(
Expand All @@ -167,6 +185,7 @@ function _computeAndSavePipelineParameters(
const params = {
run_all: false,
run_ios: pipelineType === 'RUN_IOS',
run_visionos: true,
run_android: pipelineType === 'RUN_ANDROID',
run_js: pipelineType === 'RUN_JS',
run_e2e: shouldRunE2E,
Expand Down Expand Up @@ -194,6 +213,7 @@ function createConfigs(inputPath, outputPath, configFile) {
const baseFolder = 'test_workflows';
const testConfigs = {
run_ios: ['testIOS.yml'],
run_visionos: ['testVisionOS.yml'],
run_android: ['testAndroid.yml'],
run_e2e: ['testE2E.yml'],
run_all: ['testJS.yml', 'testAll.yml'],
Expand Down Expand Up @@ -243,5 +263,5 @@ function filterJobs(outputPath) {
return;
}
}
_computeAndSavePipelineParameters('ALL', outputPath, shouldRunE2E);
_computeAndSavePipelineParameters('VISION_OS', outputPath, shouldRunE2E);
}

0 comments on commit 48aa76e

Please sign in to comment.