parameters: - name: DoCompliance displayName: Run Compliance Tasks? type: boolean default: true - name: DoEsrp displayName: Run code sign tasks? Must be true if you are doing an Onnx Runtime release. type: boolean default: false - name: EnvSetupScript type: string - name: buildArch type: string - name: msbuildPlatform type: string - name: packageName displayName: Package name for nuget type: string - name: buildparameter displayName: Additional build commandline parameter type: string - name: runTests type: boolean default: true - name: buildJava type: boolean default: true - name: buildNodejs type: boolean default: false - name: stage_name_suffix displayName: job name for nuget type: string default: '' - name: ort_build_pool_name type: string default: 'Win-CPU-2021' #'onnxruntime' or 'onnxruntime_gpu' - name: java_artifact_id type: string default: 'onnxruntime' - name: UseIncreasedTimeoutForTests displayName: Increase timeout for tests? Set it to false if you are doing an Onnx Runtime release. type: boolean default: false stages: - stage: Windows_Packaging_${{ parameters.stage_name_suffix }} dependsOn: [] jobs: - job: workspace: clean: all pool: ${{ parameters.ort_build_pool_name }} ${{ if eq(parameters['UseIncreasedTimeoutForTests'], 'true') }}: timeoutInMinutes: 1200 ${{ else }}: timeoutInMinutes: 300 steps: - checkout: self clean: true submodules: none - template: telemetry-steps.yml - task: UsePythonVersion@0 inputs: versionSpec: '3.8' addToPath: true architecture: ${{ parameters.buildArch }} - task: NodeTool@0 condition: and(succeeded(), eq('${{ parameters.buildNodejs}}', true)) inputs: versionSpec: '16.x' - task: BatchScript@1 displayName: 'setup env' inputs: filename: '$(Build.SourcesDirectory)\tools\ci_build\github\windows\${{ parameters.EnvSetupScript }}' modifyEnvironment: true workingFolder: '$(Build.BinariesDirectory)' - template: download-deps.yml - task: PythonScript@0 displayName: 'Update deps.txt' inputs: scriptPath: $(Build.SourcesDirectory)/tools/ci_build/replace_urls_in_deps.py arguments: --new_dir $(Build.BinariesDirectory)/deps workingDirectory: $(Build.BinariesDirectory) - task: PowerShell@2 displayName: 'Install ONNX' inputs: filePath: '$(Build.SourcesDirectory)/tools/ci_build/github/windows/install_third_party_deps.ps1' workingDirectory: '$(Build.BinariesDirectory)' arguments: -cpu_arch ${{ parameters.buildArch }} -install_prefix $(Build.BinariesDirectory)\RelWithDebInfo\installed -build_config RelWithDebInfo - template: set-version-number-variables-step.yml - task: PythonScript@0 displayName: 'Generate cmake config' inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' ${{ if eq(parameters['UseIncreasedTimeoutForTests'], 'true') }}: arguments: '--config RelWithDebInfo --enable_lto --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --update --cmake_generator "Visual Studio 16 2019" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} --test_all_timeout 72000' ${{ else }}: arguments: '--config RelWithDebInfo --enable_lto --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --update --cmake_generator "Visual Studio 16 2019" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} ' workingDirectory: '$(Build.BinariesDirectory)' - task: VSBuild@1 displayName: 'Build' inputs: solution: '$(Build.BinariesDirectory)\RelWithDebInfo\onnxruntime.sln' platform: ${{ parameters.msbuildPlatform }} configuration: RelWithDebInfo msbuildArchitecture: ${{ parameters.buildArch }} maximumCpuCount: true logProjectEvents: true workingFolder: '$(Build.BinariesDirectory)\RelWithDebInfo' createLogFile: true - task: PythonScript@0 displayName: 'test' condition: and(succeeded(), eq('${{ parameters.runTests}}', true)) inputs: scriptPath: '$(Build.SourcesDirectory)\tools\ci_build\build.py' arguments: '--config RelWithDebInfo --enable_lto --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --test --cmake_generator "Visual Studio 16 2019" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }}' workingDirectory: '$(Build.BinariesDirectory)' - script: | dir *.dll mkdir $(Build.ArtifactStagingDirectory)\testdata workingDirectory: '$(Build.BinariesDirectory)/RelWithDebInfo/RelWithDebInfo' displayName: 'List built DLLs' - template: c-api-artifacts-package-and-publish-steps-windows.yml parameters: buildConfig: RelWithDebInfo artifactName: 'onnxruntime-win-${{ parameters.packageName }}-$(OnnxRuntimeVersion)' artifactNameNoVersionString: 'onnxruntime-win-${{ parameters.packageName }}' commitId: $(OnnxRuntimeGitCommitHash) DoEsrp: ${{ parameters.DoEsrp }} - ${{ if eq(parameters.buildNodejs, true) }}: - template: nodejs-artifacts-package-and-publish-steps-windows.yml parameters: arch: ${{ parameters.packageName }} artifactName: 'drop-onnxruntime-nodejs-win-${{ parameters.packageName }}' DoEsrp: ${{ parameters.DoEsrp }} #Upload protoc.exe, which will be used in nuget build for generating C# files - task: PublishPipelineArtifact@1 condition: and(succeeded(), eq('${{ parameters.packageName}}', 'x64')) inputs: targetPath: '$(Build.BinariesDirectory)\RelWithDebInfo\installed\bin\protoc.exe' artifactName: 'drop-extra' - task: CopyFiles@2 displayName: 'Copy custom_op_library to: $(Build.ArtifactStagingDirectory)' condition: and(succeeded(), eq('${{ parameters.packageName}}', 'x64')) inputs: SourceFolder: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo' Contents: 'custom_op_library.dll' TargetFolder: '$(Build.ArtifactStagingDirectory)/testdata' #To be used in test_win.yml - task: PublishPipelineArtifact@1 condition: and(succeeded(), eq('${{ parameters.packageName}}', 'x64')) inputs: targetPath: '$(Build.BinariesDirectory)\RelWithDebInfo\installed\bin\protoc.exe' artifactName: 'drop-nuget' - task: CmdLine@2 condition: and(succeeded(), eq('${{ parameters.buildJava}}', true)) displayName: 'Add symbols and notices to Java' inputs: script: | @echo on cd $(Build.SourcesDirectory)\java call $(Build.SourcesDirectory)\java\gradlew.bat cmakeCheck -DcmakeBuildDir=$(Build.BinariesDirectory)\RelWithDebInfo if %errorlevel% neq 0 exit /b %errorlevel% cd $(Build.BinariesDirectory)\RelWithDebInfo set NATIVE_FOLDER=$(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\stage\ai\onnxruntime\native\win-x64 mkdir %NATIVE_FOLDER% echo "Directories created" copy .\java\build\libs\*.jar $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }} pushd $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }} set artifact_id=${{ parameters.java_artifact_id }} jar xf onnxruntime-$(OnnxRuntimeVersion).jar META-INF\maven\com.microsoft.onnxruntime\%artifact_id%\pom.xml move META-INF\maven\com.microsoft.onnxruntime\%artifact_id%\pom.xml onnxruntime-$(OnnxRuntimeVersion).pom rd /s /q META-INF popd copy .\RelWithDebInfo\onnxruntime.pdb %NATIVE_FOLDER% copy .\RelWithDebInfo\onnxruntime4j_jni.pdb %NATIVE_FOLDER% copy $(Build.SourcesDirectory)\docs\Privacy.md $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\stage\Privacy.md copy $(Build.SourcesDirectory)\ThirdPartyNotices.txt $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\stage\ThirdPartyNotices.txt @echo $(OnnxRuntimeGitCommitHash) > $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\stage\GIT_COMMIT_ID pushd $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\stage jar uf $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\onnxruntime-$(OnnxRuntimeVersion).jar ai\onnxruntime\native\win-x64\onnxruntime.pdb jar uf $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\onnxruntime-$(OnnxRuntimeVersion).jar ai\onnxruntime\native\win-x64\onnxruntime4j_jni.pdb jar uf $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\onnxruntime-$(OnnxRuntimeVersion).jar Privacy.md ThirdPartyNotices.txt GIT_COMMIT_ID popd pushd $(Build.SourcesDirectory)\java\build\classes\java\test if %errorlevel% neq 0 exit /b %errorlevel% jar cvf $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\testing.jar . if %errorlevel% neq 0 exit /b %errorlevel% popd pushd $(Build.SourcesDirectory)\java\build\resources\test rd /s /q ai\onnxruntime\native jar uvf $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\testing.jar . popd rd /s /q $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}\stage dir /s /b $(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }} - task: PublishBuildArtifacts@1 condition: and(succeeded(), eq('${{ parameters.buildJava}}', true)) displayName: 'Publish Java temp binaries' inputs: pathtoPublish: '$(Build.BinariesDirectory)\onnxruntime-java-win-${{ parameters.msbuildPlatform }}' artifactName: 'drop-onnxruntime-java-win-${{ parameters.packageName }}' - ${{ if eq(parameters['DoCompliance'], 'true') }}: - task: Semmle@0 condition: and(succeeded(), eq('${{ parameters.buildJava}}', true)) inputs: sourceCodeDirectory: '$(Build.SourcesDirectory)\java' language: 'java' cleanupBuildCommands: '$(Build.SourcesDirectory)\java\gradlew.bat -Dorg.gradle.daemon=false clean' buildCommands: '$(Build.SourcesDirectory)\java\gradlew.bat -Dorg.gradle.daemon=false jar' querySuite: 'Recommended' timeout: '7200' ram: '16384' addProjectDirToScanningExclusionList: true - task: CredScan@3 displayName: 'Run CredScan' inputs: debugMode: false continueOnError: true - task: BinSkim@4 displayName: 'Run BinSkim' inputs: AnalyzeTargetGlob: '$(Build.BinariesDirectory)\RelWithDebInfo\RelWithDebInfo\**\*.dll' continueOnError: true - task: DeleteFiles@1 displayName: 'Delete files from $(Build.BinariesDirectory)\RelWithDebInfo' inputs: SourceFolder: '$(Build.BinariesDirectory)\RelWithDebInfo' Contents: | **/*.obj **/*.pdb **/*.dll #Manually set msBuildCommandline so that we can also set CAExcludePath - task: SDLNativeRules@3 displayName: 'Run the PREfast SDL Native Rules for MSBuild' condition: and (succeeded(), eq(variables['msbuildPlatform'], 'x64')) inputs: msBuildArchitecture: amd64 setupCommandlines: 'python $(Build.SourcesDirectory)\tools\ci_build\build.py --config Debug --disable_rtti --build_dir $(Build.BinariesDirectory) --skip_submodule_sync --build_shared_lib --update --cmake_generator "Visual Studio 16 2019" --enable_onnx_tests $(TelemetryOption) ${{ parameters.buildparameter }} --cmake_extra_defines onnxruntime_ENABLE_STATIC_ANALYSIS=ON' msBuildCommandline: '"C:\Program Files (x86)\Microsoft Visual Studio\2019\Enterprise\MSBuild\Current\Bin\amd64\msbuild.exe" "$(Build.BinariesDirectory)\Debug\onnxruntime.sln" /p:platform="$(MsbuildPlatform)" /p:configuration=Debug /p:VisualStudioVersion="16.0" /m /p:PreferredToolArchitecture=x64' excludedPaths: '$(Build.BinariesDirectory)#$(Build.SourcesDirectory)\cmake#C:\program files (x86)' - task: PostAnalysis@2 inputs: GdnBreakAllTools: false GdnBreakGdnToolBinSkim: true GdnBreakPolicy: M365 GdnBreakPolicyMinSev: Error - task: TSAUpload@2 displayName: 'TSA upload' condition: and (succeeded(), eq(variables['Build.SourceBranch'], 'refs/heads/main')) inputs: GdnPublishTsaOnboard: false GdnPublishTsaConfigFile: '$(Build.sourcesDirectory)\.gdn\.gdntsa' continueOnError: true - template: component-governance-component-detection-steps.yml parameters : condition : 'succeeded' - task: mspremier.PostBuildCleanup.PostBuildCleanup-task.PostBuildCleanup@3 displayName: 'Clean Agent Directories' condition: always()