Update React Native CI (#20673)

- Move iOS package build to separate job so it can run in parallel with Android AAR build and be decoupled from the test stage. The test stage fails sometimes (not infrequently) and may need to be re-run.
- Update stop iOS simulator step so it doesn't fail if the start step doesn't run.
This commit is contained in:
Edward Chen 2024-05-14 14:10:56 -07:00 committed by GitHub
parent 83a871f890
commit 113aa2992f
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 95 additions and 71 deletions

View file

@ -56,7 +56,7 @@ stages:
BuildConfig: 'Release'
PoolName: 'onnxruntime-Ubuntu2204-AMD-CPU'
PackageName: 'onnxruntime-react-native'
BuildAndroidAARStageDependsOn: 'Precheck_and_extract_commit'
InitialStageDependsOn: 'Precheck_and_extract_commit'
- stage: Download_Node_Package_And_Publish_Validation_Script
dependsOn:

View file

@ -19,16 +19,17 @@ parameters:
displayName: 'Package name'
type: string
default: 'NPM_packages'
- name: BuildAndroidAARStageDependsOn
displayName: 'Stage the Build Android AAR stage depends on'
- name: InitialStageDependsOn
displayName: 'Stage that the initial stage of react-native-ci depends on'
type: string
default: ''
stages:
- stage: Build_Android_AAR
displayName: Build Android AAR
dependsOn: '${{parameters.BuildAndroidAARStageDependsOn}}'
- stage: Build_Packages
displayName: Build Packages
dependsOn: '${{parameters.InitialStageDependsOn}}'
jobs:
- template: android-java-api-aar.yml
parameters:
buildConfig: '${{parameters.BuildConfig}}'
@ -43,10 +44,73 @@ stages:
pool_name: '${{parameters.PoolName}}'
packageName: 'onnxruntime-android'
- job: Build_Ios_Pod_For_React_Native
pool:
vmImage: 'macOS-12'
timeoutInMinutes: 90
variables:
runCodesignValidationInjection: false
TODAY: $[format('{0:dd}{0:MM}{0:yyyy}', pipeline.startTime)]
ORT_CACHE_DIR: '$(Pipeline.Workspace)/ccache_ort'
steps:
- template: use-xcode-version.yml
- task: UsePythonVersion@0
displayName: Use python 3.9
inputs:
versionSpec: "3.9"
addToPath: true
architecture: "x64"
- script: |
pip install -r tools/ci_build/github/apple/ios_packaging.requirements.txt
displayName: "Install Python requirements"
- template: mac-build-step-with-cache.yml
parameters:
WithCache: true
Today: $(TODAY)
AdditionalKey: react_${{parameters.BuildConfig}}
CacheDir: $(ORT_CACHE_DIR)
BuildStep:
- script: |
set -e -x
python $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_and_assemble_apple_pods.py \
--build-dir "$(Build.BinariesDirectory)/ios_framework_full" \
--staging-dir "$(Build.BinariesDirectory)/staging" \
--variant Full \
--build-settings-file $(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_full_ios_framework_build_settings.json
# Mobile build:
# python $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_and_assemble_apple_pods.py \
# --build_dir $(Build.BinariesDirectory)/ios_framework_mobile \
# --staging-dir "$(Build.BinariesDirectory)/staging" \
# --include_ops_by_config $(Build.SourcesDirectory)/tools/ci_build/github/android/mobile_package.required_operators.config \
# --variant Mobile \
# --build-settings-file $(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_mobile_ios_framework_build_settings.json
displayName: Build iOS package and assemble pods
env:
CC: clang
CXX: clang++
CCACHE_CPP2: 1
CCACHE_DEPEND: 1
CCACHE_SLOPPINESS: modules
CCACHE_DIR: $(ORT_CACHE_DIR)
- task: PublishPipelineArtifact@1
inputs:
targetPath: '$(Build.BinariesDirectory)/staging'
artifact: 'onnxruntime-ios-full-pod'
# Mobile build:
# artifact: 'onnxruntime-ios-mobile-pod'
- stage: ReactNative_CI
displayName: React Native CI
dependsOn:
- Build_Android_AAR
- Build_Packages
jobs:
- job: ReactNative_CI
pool:
@ -55,10 +119,7 @@ stages:
vmImage: 'macOS-12'
variables:
runCodesignValidationInjection: false
TODAY: $[format('{0:dd}{0:MM}{0:yyyy}', pipeline.startTime)]
PROTO_CACHE_DIR: '$(Pipeline.Workspace)/ccache_proto'
ORT_CACHE_DIR: '$(Pipeline.Workspace)/ccache_ort'
timeoutInMinutes: 180
timeoutInMinutes: 60
steps:
- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
displayName: Clean Agent Directories
@ -98,58 +159,6 @@ stages:
brew install applesimutils
displayName: Install applesimutils tools required by detox ios
- script: |
python -m pip install -q flatbuffers
displayName: Install python modules
- template: mac-build-step-with-cache.yml
parameters:
WithCache: true
Today: $(TODAY)
AdditionalKey: ' protobuf | "$(Agent.OS)" | $(Build.SourcesDirectory)/cmake/deps.txt, $(Build.SourcesDirectory)/tools/ci_build/github/linux/docker/inference/x64/python/cpu/scripts/install_protobuf.sh'
CacheDir: $(PROTO_CACHE_DIR)
ChangeEveryCommit: false
BuildStep:
- script: |
set -e -x
$(Build.SourcesDirectory)/tools/ci_build/github/linux/docker/inference/x64/python/cpu/scripts/install_protobuf.sh -d $(Build.SourcesDirectory)/cmake/deps.txt -p $(Build.BinariesDirectory)/installed
displayName: Build protobuf
env:
CCACHE_DIR: $(PROTO_CACHE_DIR)
- template: mac-build-step-with-cache.yml
parameters:
WithCache: true
Today: $(TODAY)
AdditionalKey: react_${{parameters.BuildConfig}}
CacheDir: $(ORT_CACHE_DIR)
BuildStep:
- script: |
set -e -x
python $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_and_assemble_apple_pods.py \
--build-dir "$(Build.BinariesDirectory)/ios_framework_full" \
--staging-dir "$(Build.BinariesDirectory)/staging" \
--variant Full \
--build-settings-file $(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_full_ios_framework_build_settings.json \
-b="--path_to_protoc_exe" -b "$(Build.BinariesDirectory)/installed/bin/protoc"
# Mobile build:
# python $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_and_assemble_apple_pods.py \
# --build_dir $(Build.BinariesDirectory)/ios_framework_mobile \
# --staging-dir "$(Build.BinariesDirectory)/staging" \
# --include_ops_by_config $(Build.SourcesDirectory)/tools/ci_build/github/android/mobile_package.required_operators.config \
# --variant Mobile \
# --build-settings-file $(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_mobile_ios_framework_build_settings.json \
# -b="--path_to_protoc_exe" -b "$(Build.BinariesDirectory)/installed/bin/protoc"
displayName: Build iOS package and assemble pods
env:
CC: clang
CXX: clang++
CCACHE_CPP2: 1
CCACHE_DEPEND: 1
CCACHE_SLOPPINESS: modules
CCACHE_DIR: $(ORT_CACHE_DIR)
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'current'
@ -170,6 +179,16 @@ stages:
targetFolder: $(Build.SourcesDirectory)/js/react_native/android/libs
displayName: Copy Android package to React Native directory
- task: DownloadPipelineArtifact@2
inputs:
buildType: 'current'
# Mobile build:
# artifactName: 'onnxruntime-ios-mobile-pod'
# targetPath: '$(Build.BinariesDirectory)/ios-mobile-pod'
artifactName: 'onnxruntime-ios-full-pod'
targetPath: '$(Build.BinariesDirectory)/ios-full-pod'
displayName: Download iOS pod artifacts
- script: |
npm ci
workingDirectory: '$(Build.SourcesDirectory)/js'
@ -206,16 +225,16 @@ stages:
- script: |
# Mobile build:
# ORT_MOBILE_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/staging/onnxruntime-mobile-c \
ORT_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/staging/onnxruntime-c \
# ORT_MOBILE_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/ios-mobile-pod/onnxruntime-mobile-c \
ORT_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/ios-full-pod/onnxruntime-c \
pod install
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/ios'
displayName: Pod install for onnxruntime react native ios bridge library
- script: |
# Mobile build:
# ORT_MOBILE_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/staging/onnxruntime-mobile-c \
ORT_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/staging/onnxruntime-c \
# ORT_MOBILE_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/ios-mobile-pod/onnxruntime-mobile-c \
ORT_C_LOCAL_POD_PATH=$(Build.BinariesDirectory)/ios-full-pod/onnxruntime-c \
pod install
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
displayName: Pod install for onnxruntime react native ios e2e tests
@ -299,8 +318,9 @@ stages:
# Unit tests and E2E tests with iOS simulator
#
- script: |
xcrun simctl create iPhoneRNTest com.apple.CoreSimulator.SimDeviceType.iPhone-13
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
set -e
DEVICE_ID_FILE="$(Build.BinariesDirectory)/ios_simulator_device_id.txt"
xcrun simctl create iPhoneRNTest com.apple.CoreSimulator.SimDeviceType.iPhone-13 > "${DEVICE_ID_FILE}"
displayName: Start iOS Simulator
- task: Xcode@5
@ -334,8 +354,12 @@ stages:
displayName: Run React Native Detox iOS e2e Tests
- script: |
xcrun simctl delete iPhoneRNTest
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
set -e
DEVICE_ID_FILE="$(Build.BinariesDirectory)/ios_simulator_device_id.txt"
if [[ -f "${DEVICE_ID_FILE}" ]]; then
xcrun simctl delete "$(cat "${DEVICE_ID_FILE}")"
rm "${DEVICE_ID_FILE}"
fi
displayName: Stop iOS Simulator
condition: always()