parameters: - name: BuildType displayName: |- Type of build. "normal": A normal build not for publication. type: string #TODO: add other build types name here values: - normal default: normal name: "$(Date:yyyyMMdd)$(Rev:rrr)" # build number format jobs: - job: SPMIosPackaging displayName: "SPM iOS Packaging" pool: vmImage: "macOS-13" variables: xcodeVersion: "14.3" timeoutInMinutes: 300 steps: # - task: InstallAppleCertificate@2 # inputs: # certSecureFile: '$(ios_signing_certificate_name)' # certPwd: '$(ios_signing_certificate_password)' # keychain: 'temp' # deleteCert: true # displayName: 'Install ORT Mobile Test Signing Certificate' # - task: InstallAppleProvisioningProfile@1 # inputs: # provProfileSecureFile: '$(ios_provision_profile_name)' # removeProfile: true # displayName: 'Install ORT Mobile Test Provisioning Profile' - task: UsePythonVersion@0 inputs: versionSpec: "3.9" addToPath: true architecture: "x64" - template: templates/use-xcode-version.yml parameters: xcodeVersion: ${{ variables.xcodeVersion }} # - template: templates/install-appcenter.yml - script: | pip install -r tools/ci_build/github/requirements.txt displayName: "Install Python requirements" - bash: | set -e BUILD_TYPE="${{ parameters.BuildType }}" VERSION_FILE="$(Build.SourcesDirectory)/version.txt" BASE_VERSION="$(cat "${VERSION_FILE}")" SHORT_COMMIT_HASH="$(git rev-parse --short HEAD)" DEV_VERSION="${BASE_VERSION}-dev+$(Build.BuildNumber).${SHORT_COMMIT_HASH}" case "${BUILD_TYPE}" in ("normal") VERSION="${DEV_VERSION}"; SHOULD_UPLOAD_ARCHIVES="false" ;; (*) echo "Invalid build type: ${BUILD_TYPE}"; exit 1 ;; esac # Do not output ##vso[] commands with `set -x` or they may be parsed again and include a trailing quote. set +x set_var() { local VAR_NAME=${1:?} local VAR_VALUE=${2:?} echo "##vso[task.setvariable variable=${VAR_NAME}]${VAR_VALUE}" echo "${VAR_NAME}: ${VAR_VALUE}" } set_var "ORT_POD_VERSION" "${VERSION}" set_var "ORT_SHOULD_UPLOAD_ARCHIVES" "${SHOULD_UPLOAD_ARCHIVES}" displayName: "Set variables" # - script: | # $(Build.SourcesDirectory)/tools/ci_build/github/scripts/install_protobuf.sh -p $(Build.BinariesDirectory)/protobuf_install -d $(Build.SourcesDirectory)/cmake/deps.txt # displayName: "Build Host Protoc" # # create and test full pods # - script: | # python tools/ci_build/github/scripts/build_and_assemble_ios_pods.py \ # --build-dir "$(Build.BinariesDirectory)/ios_framework_full" \ # --staging-dir "$(Build.BinariesDirectory)/staging" \ # --pod-version "${ORT_POD_VERSION}" \ # --test \ # --variant Full \ # --build-settings-file tools/ci_build/github/default_full_ios_framework_build_settings.json \ # -b="--path_to_protoc_exe" -b "$(Build.BinariesDirectory)/protobuf_install/bin/protoc" # displayName: "[Full] Build iOS framework and assemble pod package files" # - script: | # python tools/ci_build/github/scripts/test_ios_packages.py \ # --fail_if_cocoapods_missing \ # --framework_info_file "$(Build.BinariesDirectory)/ios_framework_full/framework_info.json" \ # --c_framework_dir "$(Build.BinariesDirectory)/ios_framework_full/framework_out" \ # --variant Full \ # --test_project_stage_dir "$(Build.BinariesDirectory)/app_center_test_full" \ # --prepare_test_project_only # displayName: "[Full] Assemble test project for App Center" # - task: Xcode@5 # inputs: # actions: 'build-for-testing' # configuration: 'Debug' # xcWorkspacePath: '$(Build.BinariesDirectory)/app_center_test_full/ios_package_test/ios_package_test.xcworkspace' # sdk: 'iphoneos' # scheme: 'ios_package_test' # signingOption: 'manual' # signingIdentity: '$(APPLE_CERTIFICATE_SIGNING_IDENTITY)' # provisioningProfileName: 'iOS Team Provisioning Profile' # args: '-derivedDataPath $(Build.BinariesDirectory)/app_center_test_full/ios_package_test/DerivedData' # workingDirectory: $(Build.BinariesDirectory)/app_center_test_full/ios_package_test/ # displayName: '[Full] Build iphone arm64 tests' # - script: | # set -e -x # appcenter test run xcuitest \ # --app "AI-Frameworks/ORT-Mobile-iOS" \ # --devices $(app_center_test_devices) \ # --test-series "master" \ # --locale "en_US" \ # --build-dir $(Build.BinariesDirectory)/app_center_test_full/ios_package_test/DerivedData/Build/Products/Debug-iphoneos \ # --token $(app_center_api_token) # displayName: "[Full] Run E2E tests on App Center" # - task: AzureCLI@2 # inputs: # azureSubscription: 'AIInfraBuildOnnxRuntimeOSS' # scriptType: 'bash' # scriptLocation: 'scriptPath' # scriptPath: 'tools/ci_build/github/apple/assemble_ios_packaging_artifacts.sh' # arguments: >- # "$(Build.BinariesDirectory)/staging" # "$(Build.ArtifactStagingDirectory)" # "$(ORT_POD_VERSION)" # "$(ORT_SHOULD_UPLOAD_ARCHIVES)" # displayName: "Assemble artifacts" # TODO: Download artifacts from the onnxruntime-ios-packaging pipeline artifacts folder # Download artifacts from a specific pipeline. - task: DownloadPipelineArtifact@2 inputs: buildType: 'specific' project: 'Lotus' definition: 995 buildVersionToDownload: 'latest' targetPath: '$(Build.ArtifactStagingDirectory)' - script: | set -e -x ls -R "$(Build.ArtifactStagingDirectory)" displayName: "List staged artifacts" - script: | set -e -x ARTIFACTS_LIST=$(ls -R "$(Build.ArtifactStagingDirectory)") POD_ARCHIVE=$(echo "${ARTIFACTS_LIST}" | cut -d$'\n' -f5) shasum -a 256 "${POD_ARCHIVE}" displayName: "Print ORT iOS Pod checksum" # copy the pod archive to a path relative to Package.swift and set the env var required by Package.swift to use that. # xcodebuild will implicitly use Package.swift and build/run the .testTarget (tests in swift/onnxTests). # once that's done cleanup the copy of the pod zip file # - script: | # set -e -x # cp "$(Build.ArtifactStagingDirectory)/pod-archive-onnxruntime-c-${ORT_POD_VERSION}.zip" swift/ # export ORT_IOS_POD_LOCAL_PATH="swift/pod-archive-onnxruntime-c-${ORT_POD_VERSION}.zip" # xcodebuild test -scheme onnxruntime -destination 'platform=iOS Simulator,name=iPhone 14' # rm swift/pod-archive-onnxruntime-c-*.zip # displayName: "Test Package.swift usage" # - publish: "$(Build.ArtifactStagingDirectory)" # artifact: ios_packaging_artifacts # displayName: "Publish artifacts" # - template: templates/component-governance-component-detection-steps.yml # parameters : # condition : 'succeeded'