160 строки
5.3 KiB
YAML
160 строки
5.3 KiB
YAML
# packaging pipeline for iOS CocoaPods package
|
|
|
|
parameters:
|
|
- name: IsReleaseBuild
|
|
displayName: "Is this a release build?"
|
|
type: boolean
|
|
default: false
|
|
|
|
jobs:
|
|
- job: IosPackaging
|
|
displayName: "iOS Packaging"
|
|
|
|
pool:
|
|
vmImage: "macOS-13"
|
|
|
|
timeoutInMinutes: 120
|
|
|
|
steps:
|
|
- template: templates/use-xcode-version.yml
|
|
|
|
- task: UsePythonVersion@0
|
|
inputs:
|
|
disableDownloadFromRegistry: true
|
|
versionSpec: "3.9"
|
|
addToPath: true
|
|
architecture: "x64"
|
|
|
|
# iOS xcframework build doesn't work with CMake 3.25.1, pin to 3.25.0
|
|
- script: |
|
|
python -m pip install cmake==3.25.0
|
|
displayName: "Install CMake 3.25.0"
|
|
|
|
- template: templates/install-appcenter.yml
|
|
|
|
- template: templates/set-package-version-variable-step.yml
|
|
parameters:
|
|
IsReleaseBuild: ${{ parameters.IsReleaseBuild }}
|
|
PackageVersionVariableName: ORT_EXTENSIONS_POD_VERSION
|
|
|
|
- script: |
|
|
python ./tools/gen_selectedops.py ./tools/ios/package_ops.config
|
|
displayName: "Generate selected ops CMake file"
|
|
|
|
- script: |
|
|
python ./tools/ios/build_xcframework.py \
|
|
--output_dir $(Build.BinariesDirectory)/xcframework_out \
|
|
--config Release \
|
|
-- \
|
|
--one_cmake_extra_define OCOS_ENABLE_SELECTED_OPLIST=ON
|
|
displayName: "Build xcframework"
|
|
|
|
- script: |
|
|
python ./tools/ios/assemble_pod_package.py \
|
|
--staging-dir $(Build.BinariesDirectory)/pod_staging \
|
|
--xcframework-output-dir $(Build.BinariesDirectory)/xcframework_out \
|
|
--pod-version ${ORT_EXTENSIONS_POD_VERSION}
|
|
displayName: "Assemble pod"
|
|
|
|
- script: |
|
|
pod lib lint
|
|
displayName: "Lint pod"
|
|
workingDirectory: $(Build.BinariesDirectory)/pod_staging
|
|
|
|
- script: |
|
|
ORT_EXTENSIONS_LOCAL_POD_PATH=$(Build.BinariesDirectory)/pod_staging \
|
|
pod install
|
|
displayName: "Install pods for OrtExtensionsUsage"
|
|
workingDirectory: $(Build.SourcesDirectory)/test/ios/OrtExtensionsUsage
|
|
|
|
- script: |
|
|
set -e
|
|
|
|
SIMULATOR_DEVICE_INFO=$(python ./tools/ios/get_simulator_device_info.py)
|
|
|
|
echo "Simulator device info:"
|
|
echo "${SIMULATOR_DEVICE_INFO}"
|
|
|
|
SIMULATOR_DEVICE_ID=$(jq --raw-output '.device_udid' <<< "${SIMULATOR_DEVICE_INFO}")
|
|
|
|
# Do not output ##vso[] commands with `set -x` or they may be parsed again and include a trailing quote.
|
|
set +x
|
|
echo "##vso[task.setvariable variable=ORT_EXTENSIONS_SIMULATOR_DEVICE_ID]${SIMULATOR_DEVICE_ID}"
|
|
displayName: "Get simulator device info"
|
|
|
|
- script: |
|
|
xcrun simctl bootstatus ${ORT_EXTENSIONS_SIMULATOR_DEVICE_ID} -b
|
|
displayName: "Wait for simulator device to boot"
|
|
|
|
- script: |
|
|
xcrun xcodebuild \
|
|
-sdk iphonesimulator \
|
|
-configuration Debug \
|
|
-parallel-testing-enabled NO \
|
|
-workspace $(Build.SourcesDirectory)/test/ios/OrtExtensionsUsage/OrtExtensionsUsage.xcworkspace \
|
|
-scheme OrtExtensionsUsage \
|
|
-destination "platform=iOS Simulator,id=${ORT_EXTENSIONS_SIMULATOR_DEVICE_ID}" \
|
|
test CODE_SIGNING_ALLOWED=NO
|
|
displayName: "Build and test OrtExtensionsUsage"
|
|
|
|
- task: InstallAppleCertificate@2
|
|
inputs:
|
|
certSecureFile: '$(ios_signing_certificate_name)'
|
|
certPwd: '$(ios_signing_certificate_password)'
|
|
keychain: 'temp'
|
|
name: installSigningCertificate
|
|
displayName: "Install ORT Mobile Test Signing Certificate"
|
|
|
|
- task: InstallAppleProvisioningProfile@1
|
|
inputs:
|
|
provProfileSecureFile: '$(ios_provision_profile_name)'
|
|
removeProfile: true
|
|
name: installProvisioningProfile
|
|
displayName: "Install ORT Mobile Test Provisioning Profile"
|
|
|
|
- script: |
|
|
xcrun xcodebuild \
|
|
-sdk iphoneos \
|
|
-configuration Debug \
|
|
-workspace $(Build.SourcesDirectory)/test/ios/OrtExtensionsUsage/OrtExtensionsUsage.xcworkspace \
|
|
-scheme OrtExtensionsUsage \
|
|
-derivedDataPath $(Build.BinariesDirectory)/appcenter_test_derived_data \
|
|
build-for-testing \
|
|
CODE_SIGN_STYLE=Manual \
|
|
"CODE_SIGN_IDENTITY=$(installSigningCertificate.signingIdentity)" \
|
|
PROVISIONING_PROFILE= \
|
|
"PROVISIONING_PROFILE_SPECIFIER=$(installProvisioningProfile.provisioningProfileName)"
|
|
displayName: "Build appcenter test"
|
|
|
|
- script: |
|
|
appcenter test run xcuitest \
|
|
--app "AI-Frameworks/ORT-Ext-Mobile-iOS-Testapp" \
|
|
--devices "AI-Frameworks/apple-test-device-set" \
|
|
--test-series "master" \
|
|
--locale "en_US" \
|
|
--build-dir $(Build.BinariesDirectory)/appcenter_test_derived_data/Build/Products/Debug-iphoneos \
|
|
--token $(app_center_api_token)
|
|
displayName: "Run appcenter test"
|
|
|
|
- script: |
|
|
set -e -x
|
|
|
|
POD_STAGING_DIR="$(Build.BinariesDirectory)/pod_staging"
|
|
ARTIFACTS_STAGING_DIR="$(Build.ArtifactStagingDirectory)"
|
|
POD_NAME="onnxruntime-extensions-c"
|
|
POD_ARCHIVE_BASENAME="pod-archive-${POD_NAME}-${ORT_EXTENSIONS_POD_VERSION}.zip"
|
|
PODSPEC_BASENAME="${POD_NAME}.podspec"
|
|
|
|
pushd ${POD_STAGING_DIR}
|
|
|
|
# assemble the files in the artifacts staging directory
|
|
zip -r ${ARTIFACTS_STAGING_DIR}/${POD_ARCHIVE_BASENAME} * --exclude ${PODSPEC_BASENAME}
|
|
cp ${PODSPEC_BASENAME} ${ARTIFACTS_STAGING_DIR}/${PODSPEC_BASENAME}
|
|
|
|
popd
|
|
displayName: "Assemble artifacts"
|
|
|
|
- publish: "$(Build.ArtifactStagingDirectory)"
|
|
artifact: ios_packaging_artifacts
|
|
displayName: "Publish artifacts"
|