mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-05-25 22:26:24 +00:00
### Description <!-- Describe your changes. --> Set emulator logging to verbose to see if it helps with intermittent React Native CI failures when emulator crashes at startup ### Motivation and Context <!-- - Why is this change required? What problem does it solve? - If it fixes an open issue, please link to the issue here. -->
395 lines
16 KiB
YAML
395 lines
16 KiB
YAML
parameters:
|
|
- name: NpmPackagingMode
|
|
displayName: 'NPM packages publish configuration'
|
|
type: string
|
|
default: 'dev'
|
|
- name: BuildConfig
|
|
displayName: 'Build config'
|
|
type: string
|
|
values:
|
|
- 'Release'
|
|
- 'MinSizeRel'
|
|
- 'Debug'
|
|
- 'RelWithDebugInfo'
|
|
default: 'Release'
|
|
- name: PoolName
|
|
displayName: 'Pool name'
|
|
type: string
|
|
- name: PackageName
|
|
displayName: 'Package name'
|
|
type: string
|
|
default: 'NPM_packages'
|
|
- name: BuildAndroidAARStageDependsOn
|
|
displayName: 'Stage the Build Android AAR stage depends on'
|
|
type: string
|
|
default: ''
|
|
|
|
stages:
|
|
- stage: Build_Android_AAR
|
|
displayName: Build Android AAR
|
|
dependsOn: '${{parameters.BuildAndroidAARStageDependsOn}}'
|
|
jobs:
|
|
- template: android-java-api-aar.yml
|
|
parameters:
|
|
buildConfig: '${{parameters.BuildConfig}}'
|
|
# Mobile build:
|
|
# buildSettings: '$(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_mobile_aar_build_settings.json'
|
|
# includedOpsConfig: '$(Build.SourcesDirectory)/tools/ci_build/github/android/mobile_package.required_operators.config'
|
|
# artifactName: 'onnxruntime-android-mobile-aar'
|
|
# packageName: 'onnxruntime-mobile'
|
|
buildSettings: '$(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_full_aar_build_settings.json'
|
|
artifactName: 'onnxruntime-android-full-aar'
|
|
job_name_suffix: 'For_React_Native'
|
|
pool_name: '${{parameters.PoolName}}'
|
|
packageName: 'onnxruntime-android'
|
|
|
|
- stage: ReactNative_CI
|
|
displayName: React Native CI
|
|
dependsOn:
|
|
- Build_Android_AAR
|
|
jobs:
|
|
- job: ReactNative_CI
|
|
pool:
|
|
# We need macOS-12 to run the Android emulator for now.
|
|
# https://github.com/actions/runner-images/issues/7671
|
|
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
|
|
steps:
|
|
- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
|
|
displayName: Clean Agent Directories
|
|
condition: always()
|
|
|
|
- task: UsePythonVersion@0
|
|
displayName: Use python 3.9
|
|
inputs:
|
|
versionSpec: "3.9"
|
|
addToPath: true
|
|
rchitecture: "x64"
|
|
|
|
- task: JavaToolInstaller@0
|
|
displayName: Use jdk 11
|
|
inputs:
|
|
versionSpec: '11'
|
|
jdkArchitectureOption: 'x64'
|
|
jdkSourceOption: 'PreInstalled'
|
|
|
|
- task: NodeTool@0
|
|
inputs:
|
|
versionSpec: '16.x'
|
|
|
|
- script:
|
|
brew install coreutils ninja npm yarn
|
|
displayName: Install coreutils, ninja, npm, and yarn
|
|
|
|
- script:
|
|
yarn global add detox-cli
|
|
displayName: Install detox cli tools
|
|
|
|
- script:
|
|
brew tap wix/brew
|
|
displayName: brew tap wix/brew
|
|
|
|
- script:
|
|
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_ios_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_ios_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'
|
|
# Mobile build:
|
|
# artifactName: 'onnxruntime-android-mobile-aar'
|
|
# targetPath: '$(Build.BinariesDirectory)/android-mobile-aar'
|
|
artifactName: 'onnxruntime-android-full-aar'
|
|
targetPath: '$(Build.BinariesDirectory)/android-full-aar'
|
|
displayName: Download Android AAR artifacts
|
|
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
# Mobile build:
|
|
# sourceFolder: $(Build.BinariesDirectory)/android-mobile-aar
|
|
# contents: onnxruntime-mobile-*.aar
|
|
sourceFolder: $(Build.BinariesDirectory)/android-full-aar
|
|
contents: onnxruntime-android-*.aar
|
|
targetFolder: $(Build.SourcesDirectory)/js/react_native/android/libs
|
|
displayName: Copy Android package to React Native directory
|
|
|
|
- script: |
|
|
npm ci
|
|
workingDirectory: '$(Build.SourcesDirectory)/js'
|
|
displayName: npm ci js
|
|
|
|
- script: |
|
|
npm ci
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/common'
|
|
displayName: npm ci js/common
|
|
|
|
- script: |
|
|
yarn
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native'
|
|
displayName: yarn js/react_native
|
|
|
|
- script: |
|
|
python3 tools/python/run_android_emulator.py \
|
|
--android-sdk-root $(ANDROID_SDK_ROOT) \
|
|
--create-avd --system-image "system-images;android-30;default;x86_64" \
|
|
--start --emulator-extra-args="-partition-size 4096 -verbose" \
|
|
--emulator-pid-file $(Build.BinariesDirectory)/emulator.pid
|
|
displayName: Start Android Emulator
|
|
|
|
- script: |
|
|
xcrun simctl create iPhoneRNTest com.apple.CoreSimulator.SimDeviceType.iPhone-13
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
|
displayName: Start iOS Simulator
|
|
|
|
- template: android-dump-logs-from-steps.yml
|
|
parameters:
|
|
steps:
|
|
- task: Gradle@3
|
|
inputs:
|
|
gradleWrapperFile: '$(Build.SourcesDirectory)/js/react_native/android/gradlew'
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/android'
|
|
options: '--stacktrace'
|
|
tasks: 'connectedDebugAndroidTest'
|
|
publishJUnitResults: true
|
|
testResultsFiles: '**/TEST-*.xml'
|
|
testRunTitle: 'React Native Android Instrumented Test results'
|
|
javaHomeOption: 'path'
|
|
jdkDirectory: '$(JAVA_HOME_11_X64)'
|
|
sonarQubeRunAnalysis: false
|
|
spotBugsAnalysis: false
|
|
displayName: Run React Native Android Instrumented Tests
|
|
|
|
- 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 \
|
|
pod install
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/ios'
|
|
displayName: Pod install for onnxruntime react native ios bridge library
|
|
|
|
- task: Xcode@5
|
|
inputs:
|
|
actions: 'test'
|
|
configuration: 'Debug'
|
|
sdk: 'iphonesimulator'
|
|
xcWorkspacePath: '$(Build.SourcesDirectory)/js/react_native/ios/OnnxruntimeModule.xcworkspace'
|
|
scheme: 'OnnxruntimeModuleTest'
|
|
packageApp: false
|
|
destinationPlatformOption: 'iOS'
|
|
destinationSimulators: 'iPhone 13,OS=latest'
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/ios'
|
|
xcprettyArgs: '--output build/reports/test-results.xml'
|
|
publishJUnitResults: true
|
|
testRunTitle: 'React Native iOS Instrumented Test Results'
|
|
displayName: Run React Native iOS Instrumented Tests
|
|
|
|
- task: PublishTestResults@2
|
|
inputs:
|
|
testResultsFiles: '$(Build.SourcesDirectory)/js/react_native/ios/build/reports/test-results.xml'
|
|
failTaskOnFailedTests: true
|
|
testRunTitle: 'React Native iOS Instrumented Test results'
|
|
condition: succeededOrFailed()
|
|
displayName: Publish React Native iOS Instrumented Test Results
|
|
|
|
- task: PowerShell@2
|
|
inputs:
|
|
filePath: '$(Build.SourcesDirectory)/tools/ci_build/github/js/pack-npm-packages.ps1'
|
|
arguments: '"-dev.$(Get-Date -Format yyyyMMdd)-$(git rev-parse --short HEAD)" $(Build.SourcesDirectory) react_native'
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
errorActionPreference: stop
|
|
env:
|
|
ORT_JS_PACK_MODE: e2e
|
|
displayName: Pack NPM packages
|
|
|
|
- script: |
|
|
mv $(Build.SourcesDirectory)/js/common/onnxruntime-common*.tgz onnxruntime-common.tgz
|
|
yarn add --no-lockfile file:./onnxruntime-common.tgz
|
|
mv $(Build.SourcesDirectory)/js/react_native/onnxruntime-react-native*.tgz onnxruntime-react-native.tgz
|
|
yarn add --no-lockfile file:./onnxruntime-react-native.tgz
|
|
yarn
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
|
displayName: Bootstrap Android and iOS e2e tests
|
|
|
|
- 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 \
|
|
pod install
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
|
displayName: Pod install for onnxruntime react native ios e2e tests
|
|
|
|
- script: |
|
|
yarn add --dev jest-junit
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
|
displayName: install jest junit reporter js/react_native/e2e
|
|
|
|
- script: |
|
|
keytool -genkey -v -keystore debug.keystore -alias androiddebugkey -storepass android \
|
|
-keypass android -keyalg RSA -keysize 2048 -validity 999999 -dname "CN=Android Debug,O=Android,C=US"
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/android'
|
|
displayName: Generate a debug keystore
|
|
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
# Mobile build:
|
|
# sourceFolder: $(Build.BinariesDirectory)/android-mobile-aar
|
|
# contents: onnxruntime-mobile-*.aar
|
|
sourceFolder: $(Build.BinariesDirectory)/android-full-aar
|
|
contents: onnxruntime-*.aar
|
|
targetFolder: $(Build.SourcesDirectory)/js/react_native/e2e/android/app/libs
|
|
displayName: Copy Android package to Android e2e test directory
|
|
|
|
- script: |
|
|
detox build --configuration android.emu.release
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
|
displayName: Build React Native Detox Android e2e Tests
|
|
|
|
- script: |
|
|
JEST_JUNIT_OUTPUT_FILE=$(Build.SourcesDirectory)/js/react_native/e2e/android-test-results.xml \
|
|
detox test --record-logs all --configuration android.emu.release
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
|
displayName: Run React Native Detox Android e2e Tests
|
|
|
|
- task: PublishTestResults@2
|
|
inputs:
|
|
testResultsFiles: '$(Build.SourcesDirectory)/js/react_native/e2e/android-test-results.xml'
|
|
failTaskOnFailedTests: true
|
|
testRunTitle: 'React Native Detox Android e2e Test Results'
|
|
condition: succeededOrFailed()
|
|
displayName: Publish React Native Detox Android e2e Test Results
|
|
|
|
- script: |
|
|
detox build --configuration ios.sim.release
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
|
displayName: Build React Native Detox iOS e2e Tests
|
|
|
|
- script: |
|
|
JEST_JUNIT_OUTPUT_FILE=$(Build.SourcesDirectory)/js/react_native/e2e/ios-test-results.xml \
|
|
detox test --record-logs all --configuration ios.sim.release
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
|
displayName: Run React Native Detox iOS e2e Tests
|
|
|
|
- task: PublishTestResults@2
|
|
inputs:
|
|
testResultsFiles: '$(Build.SourcesDirectory)/js/react_native/e2e/ios-test-results.xml'
|
|
failTaskOnFailedTests: true
|
|
testRunTitle: 'React Native Detox iOS e2e Test Results'
|
|
condition: succeededOrFailed()
|
|
displayName: Publish React Native Detox iOS e2e Test Results
|
|
|
|
- task: PublishPipelineArtifact@1
|
|
inputs:
|
|
artifact: e2e_test_logs
|
|
targetPath: '$(Build.SourcesDirectory)/js/react_native/e2e/artifacts'
|
|
condition: succeededOrFailed()
|
|
displayName: Publish React Native Detox E2E test logs
|
|
|
|
- script: |
|
|
python3 tools/python/run_android_emulator.py \
|
|
--android-sdk-root $(ANDROID_SDK_ROOT) \
|
|
--stop \
|
|
--emulator-pid-file $(Build.BinariesDirectory)/emulator.pid
|
|
displayName: Stop Android Emulator
|
|
condition: always()
|
|
|
|
- script: |
|
|
xcrun simctl delete iPhoneRNTest
|
|
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
|
displayName: Stop iOS Simulator
|
|
condition: always()
|
|
|
|
- script: |
|
|
git restore .
|
|
workingDirectory: '$(Build.SourcesDirectory)/js'
|
|
displayName: Restore git changes
|
|
|
|
- task: PowerShell@2
|
|
inputs:
|
|
filePath: '$(Build.SourcesDirectory)/tools/ci_build/github/js/pack-npm-packages.ps1'
|
|
arguments: '"${{parameters.NpmPackagingMode}}" $(Build.SourcesDirectory) react_native'
|
|
workingDirectory: '$(Build.SourcesDirectory)'
|
|
errorActionPreference: stop
|
|
displayName: Pack NPM packages
|
|
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: $(Build.SourcesDirectory)/js/common
|
|
contents: onnxruntime-common*.tgz
|
|
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
displayName: 'Create Artifacts onnxruntime-common'
|
|
|
|
- task: CopyFiles@2
|
|
inputs:
|
|
sourceFolder: $(Build.SourcesDirectory)/js/react_native
|
|
contents: onnxruntime-react-native*.tgz
|
|
targetFolder: $(Build.ArtifactStagingDirectory)
|
|
displayName: Create Artifacts onnxruntime-react-native
|
|
|
|
- task: PublishPipelineArtifact@0
|
|
inputs:
|
|
artifactName: '${{parameters.PackageName}}'
|
|
targetPath: '$(Build.ArtifactStagingDirectory)'
|
|
displayName: Publish Pipeline Artifact
|
|
|
|
- template: component-governance-component-detection-steps.yml
|
|
parameters :
|
|
condition : 'succeeded'
|
|
|
|
- template: explicitly-defined-final-tasks.yml
|