mirror of
https://github.com/saymrwulf/onnxruntime.git
synced 2026-06-30 03:37:44 +00:00
Add compilation cache in react native CI (#15329)
### Description 1. Replacing jobs with stages for better debugging and maintainance 2. Added compilation cache to accelerate the workflow. 3. Splited building protobuf and major code as 2 tasks ### Motivation and Context Reduced compilation time about one hour. test run: https://dev.azure.com/onnxruntime/onnxruntime/_build/results?buildId=943695&view=logs&j=de302ec2-2305-57e0-e8c6-cd89c569f2a3&t=8b360243-7783-51da-8079-2304089d3d1d
This commit is contained in:
parent
a7d321e9dc
commit
962d8d2b19
5 changed files with 325 additions and 287 deletions
|
|
@ -17,7 +17,7 @@ jobs:
|
|||
parameters:
|
||||
TODAY: $(TODAY)
|
||||
AdditionalKey: coreml
|
||||
CACHE_DIR: $(CCACHE_DIR)
|
||||
CacheDir: $(CCACHE_DIR)
|
||||
BuildStep:
|
||||
- script: |
|
||||
python3 tools/ci_build/build.py \
|
||||
|
|
|
|||
|
|
@ -27,7 +27,7 @@ variables:
|
|||
${{ if eq(parameters.NpmPublish, 'custom') }}:
|
||||
NpmPackagingMode: '$(VersionSuffix)'
|
||||
|
||||
jobs:
|
||||
stages:
|
||||
- template: templates/react-native-ci.yml
|
||||
parameters:
|
||||
NpmPackagingMode: ${{ variables.NpmPackagingMode }}
|
||||
|
|
|
|||
|
|
@ -1,4 +1,4 @@
|
|||
# it's used to check the cache stats after the build with ccache
|
||||
# it's used to check the cache stats after building with ccache
|
||||
parameters:
|
||||
- name: CacheDir
|
||||
displayName: Cache Directory
|
||||
|
|
|
|||
|
|
@ -10,33 +10,35 @@ parameters:
|
|||
- name: AdditionalKey
|
||||
type: string
|
||||
|
||||
- name: CACHE_DIR
|
||||
- name: CacheDir
|
||||
type: string
|
||||
|
||||
- name: ChangeEveryCommit
|
||||
type: boolean
|
||||
default: true
|
||||
|
||||
steps:
|
||||
- script: |
|
||||
brew install ccache
|
||||
which ccache || brew install ccache
|
||||
echo "##vso[task.prependpath]/usr/local/opt/ccache/libexec"
|
||||
mkdir -p "${{ parameters.CACHE_DIR }}"
|
||||
mkdir -p "${{ parameters.CacheDir }}"
|
||||
displayName: Install ccache and update PATH to use linked versions of gcc, cc, etc
|
||||
|
||||
- task: Cache@2
|
||||
inputs:
|
||||
key: ' "${{parameters.TODAY}}" | ${{parameters.AdditionalKey}} | "$(Build.SourceVersion)" '
|
||||
path: ${{ parameters.CACHE_DIR }}
|
||||
restoreKeys: |
|
||||
"${{parameters.TODAY}}" | ${{parameters.AdditionalKey}}
|
||||
${{ if eq(parameters.ChangeEveryCommit, true) }}:
|
||||
key: ' "${{parameters.TODAY}}" | ${{parameters.AdditionalKey}} | "$(Build.SourceVersion)" '
|
||||
restoreKeys: |
|
||||
"${{parameters.TODAY}}" | ${{parameters.AdditionalKey}}
|
||||
${{ else }}:
|
||||
key: ' ${{parameters.AdditionalKey}} '
|
||||
restoreKeys: |
|
||||
${{parameters.AdditionalKey}}
|
||||
path: ${{ parameters.CacheDir }}
|
||||
displayName: ccache task
|
||||
|
||||
- ${{ parameters.BuildStep }}
|
||||
|
||||
- script: |
|
||||
set -ex
|
||||
ccache -s
|
||||
ccache -z
|
||||
ls -l "${{ parameters.CACHE_DIR }}"
|
||||
du -sh "${{ parameters.CACHE_DIR }}"
|
||||
displayName: Show Cache stats and Clear stats.
|
||||
env:
|
||||
CCACHE_DIR: ${{parameters.CACHE_DIR}}
|
||||
condition: always()
|
||||
- template: check-cache-stats.yml
|
||||
parameters:
|
||||
CacheDir: ${{ parameters.CacheDir }}
|
||||
|
|
|
|||
|
|
@ -20,302 +20,338 @@ parameters:
|
|||
type: string
|
||||
default: 'NPM_packages'
|
||||
|
||||
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'
|
||||
|
||||
- job: ReactNative_CI
|
||||
pool:
|
||||
vmImage: 'macOS-12'
|
||||
variables:
|
||||
runCodesignValidationInjection: false
|
||||
dependsOn:
|
||||
- Android_Java_API_AAR_Packaging_For_React_Native
|
||||
timeoutInMinutes: 150
|
||||
steps:
|
||||
# Onnx has no 3.9 python package available yet, need to use python 3.8 to avoid build onnx package
|
||||
# pythonVersion can be updated in Azure pipeline settings
|
||||
# https://dev.azure.com/onnxruntime/onnxruntime/_build?definitionId=188
|
||||
- task: UsePythonVersion@0
|
||||
displayName: Use Python $(pythonVersion)
|
||||
inputs:
|
||||
versionSpec: $(pythonVersion)
|
||||
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '16.x'
|
||||
|
||||
- script:
|
||||
brew install coreutils ninja npm yarn
|
||||
displayName: Install coreutils, ninja, npm, and yarn
|
||||
|
||||
- script: |
|
||||
python3 -m pip install -q flatbuffers
|
||||
displayName: Install python modules
|
||||
|
||||
- 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
|
||||
python3 $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_ios_framework.py \
|
||||
--config ${{parameters.BuildConfig}} \
|
||||
--build_dir $(Build.BinariesDirectory)/ios_framework --path_to_protoc_exe $(Build.BinariesDirectory)/installed/bin/protoc \
|
||||
$(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_full_ios_framework_build_settings.json
|
||||
cd $(Build.BinariesDirectory)/ios_framework/framework_out
|
||||
zip -r onnxruntime-c.zip .
|
||||
# Mobile build:
|
||||
# python3 $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_ios_framework.py \
|
||||
# --config ${{parameters.BuildConfig}} \
|
||||
# --build_dir $(Build.BinariesDirectory)/ios_framework \
|
||||
# --include_ops_by_config $(Build.SourcesDirectory)/tools/ci_build/github/android/mobile_package.required_operators.config \
|
||||
# $(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_mobile_ios_framework_build_settings.json
|
||||
# cd $(Build.BinariesDirectory)/ios_framework/framework_out
|
||||
# zip -r onnxruntime-mobile-c.zip .
|
||||
|
||||
displayName: Build iOS package
|
||||
|
||||
- task: DownloadPipelineArtifact@2
|
||||
inputs:
|
||||
buildType: 'current'
|
||||
stages:
|
||||
- stage: Build_Android_AAR
|
||||
displayName: Build Android AAR
|
||||
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'
|
||||
# targetPath: '$(Build.BinariesDirectory)/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'
|
||||
targetPath: '$(Build.BinariesDirectory)/android-full-aar'
|
||||
displayName: Download Android AAR artifacts
|
||||
job_name_suffix: 'For_React_Native'
|
||||
pool_name: '${{parameters.PoolName}}'
|
||||
packageName: 'onnxruntime-android'
|
||||
|
||||
- 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
|
||||
- stage: ReactNative_CI
|
||||
displayName: React Native CI
|
||||
dependsOn:
|
||||
- Build_Android_AAR
|
||||
jobs:
|
||||
- job: ReactNative_CI
|
||||
pool:
|
||||
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: 150
|
||||
steps:
|
||||
- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
|
||||
displayName: Clean Agent Directories
|
||||
condition: always()
|
||||
|
||||
- task: CopyFiles@2
|
||||
inputs:
|
||||
sourceFolder: $(Build.BinariesDirectory)/ios_framework/framework_out
|
||||
# Mobile build:
|
||||
# contents: onnxruntime-mobile-c.zip
|
||||
contents: onnxruntime-c.zip
|
||||
targetFolder: $(Build.SourcesDirectory)/js/react_native/local_pods
|
||||
displayName: Copy iOS package to React Native directory
|
||||
# Onnx has no 3.9 python package available yet, need to use python 3.8 to avoid build onnx package
|
||||
# pythonVersion can be updated in Azure pipeline settings
|
||||
# https://dev.azure.com/onnxruntime/onnxruntime/_build?definitionId=188
|
||||
- task: UsePythonVersion@0
|
||||
displayName: Use Python $(pythonVersion)
|
||||
inputs:
|
||||
versionSpec: $(pythonVersion)
|
||||
|
||||
- script: |
|
||||
npm ci
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js'
|
||||
displayName: npm ci js
|
||||
- task: NodeTool@0
|
||||
inputs:
|
||||
versionSpec: '16.x'
|
||||
|
||||
- script: |
|
||||
npm ci
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/common'
|
||||
displayName: npm ci js/common
|
||||
- script:
|
||||
brew install coreutils ninja npm yarn
|
||||
displayName: Install coreutils, ninja, npm, and yarn
|
||||
|
||||
- script: |
|
||||
yarn
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native'
|
||||
displayName: yarn js/react_native
|
||||
- script: |
|
||||
python3 -m pip install -q flatbuffers
|
||||
displayName: Install python modules
|
||||
|
||||
- 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" \
|
||||
--emulator-pid-file $(Build.BinariesDirectory)/emulator.pid
|
||||
displayName: Start Android Emulator
|
||||
- template: mac-build-step-with-cache.yml
|
||||
parameters:
|
||||
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)
|
||||
|
||||
- script: |
|
||||
xcrun simctl create iPhoneRNTest com.apple.CoreSimulator.SimDeviceType.iPhone-13
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
||||
displayName: Start iOS Simulator
|
||||
- template: mac-build-step-with-cache.yml
|
||||
parameters:
|
||||
TODAY: $(TODAY)
|
||||
AdditionalKey: react_${{parameters.BuildConfig}}
|
||||
CacheDir: $(ORT_CACHE_DIR)
|
||||
BuildStep:
|
||||
- script: |
|
||||
set -e -x
|
||||
python3 $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_ios_framework.py \
|
||||
--config ${{parameters.BuildConfig}} \
|
||||
--build_dir $(Build.BinariesDirectory)/ios_framework --path_to_protoc_exe $(Build.BinariesDirectory)/installed/bin/protoc \
|
||||
$(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_full_ios_framework_build_settings.json
|
||||
cd $(Build.BinariesDirectory)/ios_framework/framework_out
|
||||
zip -r onnxruntime-c.zip .
|
||||
# Mobile build:
|
||||
# python3 $(Build.SourcesDirectory)/tools/ci_build/github/apple/build_ios_framework.py \
|
||||
# --config ${{parameters.BuildConfig}} \
|
||||
# --build_dir $(Build.BinariesDirectory)/ios_framework \
|
||||
# --include_ops_by_config $(Build.SourcesDirectory)/tools/ci_build/github/android/mobile_package.required_operators.config \
|
||||
# $(Build.SourcesDirectory)/tools/ci_build/github/js/react_native_e2e_mobile_ios_framework_build_settings.json
|
||||
# cd $(Build.BinariesDirectory)/ios_framework/framework_out
|
||||
# zip -r onnxruntime-mobile-c.zip .
|
||||
displayName: Build iOS package
|
||||
env:
|
||||
CC: clang
|
||||
CXX: clang++
|
||||
CCACHE_CPP2: 1
|
||||
CCACHE_DEPEND: 1
|
||||
CCACHE_SLOPPINESS: modules
|
||||
CCACHE_DIR: $(ORT_CACHE_DIR)
|
||||
|
||||
- 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
|
||||
- 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
|
||||
|
||||
- script: |
|
||||
pod install
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/ios'
|
||||
displayName: Pod install for onnxruntime react native ios bridge library
|
||||
- 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
|
||||
|
||||
- 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'
|
||||
- task: CopyFiles@2
|
||||
inputs:
|
||||
sourceFolder: $(Build.BinariesDirectory)/ios_framework/framework_out
|
||||
# Mobile build:
|
||||
# contents: onnxruntime-mobile-c.zip
|
||||
contents: onnxruntime-c.zip
|
||||
targetFolder: $(Build.SourcesDirectory)/js/react_native/local_pods
|
||||
displayName: Copy iOS 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" \
|
||||
--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: |
|
||||
pod install
|
||||
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
|
||||
displayName: Pod install for onnxruntime react native ios bridge library
|
||||
|
||||
- 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: 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: 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
|
||||
- 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
|
||||
|
||||
- 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
|
||||
- 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: |
|
||||
pod install
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
||||
displayName: Pod install for onnxruntime react native ios e2e tests
|
||||
- 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: |
|
||||
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
|
||||
- script: |
|
||||
pod install
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
||||
displayName: Pod install for onnxruntime react native ios e2e tests
|
||||
|
||||
- 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: |
|
||||
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
|
||||
|
||||
- template: android-dump-logs-from-steps.yml
|
||||
parameters:
|
||||
steps:
|
||||
- task: Gradle@3
|
||||
inputs:
|
||||
gradleWrapperFile: '$(Build.SourcesDirectory)/js/react_native/e2e/android/gradlew'
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/android'
|
||||
options: '--stacktrace'
|
||||
tasks: ':app:connectedDebugAndroidTest'
|
||||
publishJUnitResults: true
|
||||
testResultsFiles: '**/TEST-*.xml'
|
||||
testRunTitle: 'React Native Android e2e Test results'
|
||||
javaHomeOption: 'path'
|
||||
jdkDirectory: '$(JAVA_HOME_11_X64)'
|
||||
sonarQubeRunAnalysis: false
|
||||
spotBugsAnalysis: false
|
||||
displayName: Run React Native Android e2e Tests
|
||||
- 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: |
|
||||
export FORCE_BUNDLING=1
|
||||
export RCT_NO_LAUNCH_PACKAGER=1
|
||||
export ENTRY_FILE=index.tsx
|
||||
xcrun xcodebuild test -workspace $(Build.SourcesDirectory)/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcworkspace \
|
||||
-scheme OnnxruntimeModuleExample -destination 'platform=iOS Simulator,OS=latest,name=iPhoneRNTest' \
|
||||
-derivedDataPath $(Build.BinariesDirectory)/react_native/ios_e2e_test/derived_data | xcpretty -r junit --no-color \
|
||||
--output $(Build.SourcesDirectory)/js/react_native/e2e/ios/build/reports/test-results.xml
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
||||
displayName: Run React Native iOS e2e tests
|
||||
- template: android-dump-logs-from-steps.yml
|
||||
parameters:
|
||||
steps:
|
||||
- task: Gradle@3
|
||||
inputs:
|
||||
gradleWrapperFile: '$(Build.SourcesDirectory)/js/react_native/e2e/android/gradlew'
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/android'
|
||||
options: '--stacktrace'
|
||||
tasks: ':app:connectedDebugAndroidTest'
|
||||
publishJUnitResults: true
|
||||
testResultsFiles: '**/TEST-*.xml'
|
||||
testRunTitle: 'React Native Android e2e Test results'
|
||||
javaHomeOption: 'path'
|
||||
jdkDirectory: '$(JAVA_HOME_11_X64)'
|
||||
sonarQubeRunAnalysis: false
|
||||
spotBugsAnalysis: false
|
||||
displayName: Run React Native Android e2e Tests
|
||||
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: '$(Build.SourcesDirectory)/js/react_native/e2e/ios/build/reports/test-results.xml'
|
||||
failTaskOnFailedTests: true
|
||||
testRunTitle: 'React Native iOS e2e Test results'
|
||||
condition: succeededOrFailed()
|
||||
displayName: Publish React Native iOS e2e Test Results
|
||||
- script: |
|
||||
export FORCE_BUNDLING=1
|
||||
export RCT_NO_LAUNCH_PACKAGER=1
|
||||
export ENTRY_FILE=index.tsx
|
||||
xcrun xcodebuild test -workspace $(Build.SourcesDirectory)/js/react_native/e2e/ios/OnnxruntimeModuleExample.xcworkspace \
|
||||
-scheme OnnxruntimeModuleExample -destination 'platform=iOS Simulator,OS=latest,name=iPhoneRNTest' \
|
||||
-derivedDataPath $(Build.BinariesDirectory)/react_native/ios_e2e_test/derived_data | xcpretty -r junit --no-color \
|
||||
--output $(Build.SourcesDirectory)/js/react_native/e2e/ios/build/reports/test-results.xml
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e'
|
||||
displayName: Run React Native iOS e2e tests
|
||||
|
||||
- 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()
|
||||
- task: PublishTestResults@2
|
||||
inputs:
|
||||
testResultsFiles: '$(Build.SourcesDirectory)/js/react_native/e2e/ios/build/reports/test-results.xml'
|
||||
failTaskOnFailedTests: true
|
||||
testRunTitle: 'React Native iOS e2e Test results'
|
||||
condition: succeededOrFailed()
|
||||
displayName: Publish React Native iOS e2e Test Results
|
||||
|
||||
- script: |
|
||||
xcrun simctl delete iPhoneRNTest
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
||||
displayName: Stop iOS Simulator
|
||||
condition: always()
|
||||
- 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: |
|
||||
git restore .
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js'
|
||||
displayName: Restore git changes
|
||||
- script: |
|
||||
xcrun simctl delete iPhoneRNTest
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js/react_native/e2e/ios'
|
||||
displayName: Stop iOS Simulator
|
||||
condition: always()
|
||||
|
||||
- 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
|
||||
- script: |
|
||||
git restore .
|
||||
workingDirectory: '$(Build.SourcesDirectory)/js'
|
||||
displayName: Restore git changes
|
||||
|
||||
- task: CopyFiles@2
|
||||
inputs:
|
||||
sourceFolder: $(Build.SourcesDirectory)/js/common
|
||||
contents: onnxruntime-common*.tgz
|
||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
||||
displayName: 'Create Artifacts onnxruntime-common'
|
||||
- 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/react_native
|
||||
contents: onnxruntime-react-native*.tgz
|
||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
||||
displayName: Create Artifacts onnxruntime-react-native
|
||||
- task: CopyFiles@2
|
||||
inputs:
|
||||
sourceFolder: $(Build.SourcesDirectory)/js/common
|
||||
contents: onnxruntime-common*.tgz
|
||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
||||
displayName: 'Create Artifacts onnxruntime-common'
|
||||
|
||||
- task: PublishPipelineArtifact@0
|
||||
inputs:
|
||||
artifactName: '${{parameters.PackageName}}'
|
||||
targetPath: '$(Build.ArtifactStagingDirectory)'
|
||||
displayName: Publish Pipeline Artifact
|
||||
- task: CopyFiles@2
|
||||
inputs:
|
||||
sourceFolder: $(Build.SourcesDirectory)/js/react_native
|
||||
contents: onnxruntime-react-native*.tgz
|
||||
targetFolder: $(Build.ArtifactStagingDirectory)
|
||||
displayName: Create Artifacts onnxruntime-react-native
|
||||
|
||||
- template: component-governance-component-detection-steps.yml
|
||||
parameters :
|
||||
condition : 'succeeded'
|
||||
- task: PublishPipelineArtifact@0
|
||||
inputs:
|
||||
artifactName: '${{parameters.PackageName}}'
|
||||
targetPath: '$(Build.ArtifactStagingDirectory)'
|
||||
displayName: Publish Pipeline Artifact
|
||||
|
||||
- task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3
|
||||
displayName: Clean Agent Directories
|
||||
condition: always()
|
||||
- template: component-governance-component-detection-steps.yml
|
||||
parameters :
|
||||
condition : 'succeeded'
|
||||
|
||||
- template: explicitly-defined-final-tasks.yml
|
||||
|
|
|
|||
Loading…
Reference in a new issue