From bad35050865303ef19eee68d8b4729142aebafab Mon Sep 17 00:00:00 2001 From: Petr Onderka Date: Wed, 9 Sep 2026 19:22:36 +0200 Subject: [PATCH 1/4] Add temporary Build Analysis CI experiment Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- test/Microsoft.ML.Tests/BuildAnalysisTests.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100644 test/Microsoft.ML.Tests/BuildAnalysisTests.cs diff --git a/test/Microsoft.ML.Tests/BuildAnalysisTests.cs b/test/Microsoft.ML.Tests/BuildAnalysisTests.cs new file mode 100644 index 0000000000..c26942b436 --- /dev/null +++ b/test/Microsoft.ML.Tests/BuildAnalysisTests.cs @@ -0,0 +1,23 @@ +// Licensed to the .NET Foundation under one or more agreements. +// The .NET Foundation licenses this file to you under the MIT license. +// See the LICENSE file in the project root for more information. + +using Microsoft.ML.TestFramework; +using Xunit; +using Xunit.Abstractions; + +namespace Microsoft.ML.Tests +{ + public class BuildAnalysisTests : BaseTestClass + { + public BuildAnalysisTests(ITestOutputHelper output) : base(output) + { + } + + [Fact] + public void CiModeExperiment() + { + Assert.Fail("MLNET_BUILD_ANALYSIS_CI_MODE_EXPERIMENT_7344"); + } + } +} From bac33f689906c839894a553380394c3461dbfe6c Mon Sep 17 00:00:00 2001 From: Petr Onderka Date: Thu, 10 Sep 2026 11:23:06 +0200 Subject: [PATCH 2/4] Enable Arcade CI mode for Helix tests Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- build/ci/job-template.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/build/ci/job-template.yml b/build/ci/job-template.yml index 8ee9572fe9..ebfdb446db 100644 --- a/build/ci/job-template.yml +++ b/build/ci/job-template.yml @@ -157,11 +157,11 @@ jobs: Configuration: $(_configuration) Architecture: ${{ parameters.architecture }} ${{ if eq(parameters.buildScript, 'build.cmd') }}: - MsBuildScript: 'powershell $(Build.SourcesDirectory)/eng/common/msbuild.ps1' + MsBuildScript: 'powershell $(Build.SourcesDirectory)/eng/common/msbuild.ps1 -ci' WarnAsError: '-warnAsError 0' TestTargetFramework: '$(testTargetFramework)' ${{ if eq(parameters.buildScript, './build.sh') }}: - MsBuildScript: '$(Build.SourcesDirectory)/eng/common/msbuild.sh' + MsBuildScript: '$(Build.SourcesDirectory)/eng/common/msbuild.sh --ci' WarnAsError: '--warnAsError false' TestTargetFramework: '$(testTargetFramework)' - script: $(dotnetPath) msbuild -restore build/Codecoverage.proj From 1976785e4af3a83f297f9a6192574823d95fab2b Mon Sep 17 00:00:00 2001 From: Petr Onderka Date: Thu, 10 Sep 2026 13:54:12 +0200 Subject: [PATCH 3/4] Enable CI mode for code coverage Remove the temporary Build Analysis experiment test now that the CI behavior has been captured. Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- build/ci/job-template.yml | 13 +++++++---- test/Microsoft.ML.Tests/BuildAnalysisTests.cs | 23 ------------------- 2 files changed, 9 insertions(+), 27 deletions(-) delete mode 100644 test/Microsoft.ML.Tests/BuildAnalysisTests.cs diff --git a/build/ci/job-template.yml b/build/ci/job-template.yml index ebfdb446db..95ff876f68 100644 --- a/build/ci/job-template.yml +++ b/build/ci/job-template.yml @@ -41,8 +41,13 @@ jobs: ROOTFS_DIR: '/crossrootfs/${{ parameters.architecture }}' ${{ if eq(parameters.codeCoverage, 'true') }}: hardLink: '' + ${{ if eq(parameters.buildScript, 'build.cmd') }}: + arcadeCiOption: '-ci' + ${{ if eq(parameters.buildScript, './build.sh') }}: + arcadeCiOption: '--ci' ${{ if eq(parameters.codeCoverage, 'false') }}: hardLink: '/p:CreateHardLinksForCopyLocalIfPossible=True' + arcadeCiOption: '' testTargetFramework: '/p:TestTargetFramework=$(_targetFramework)' strategy: matrix: @@ -75,7 +80,7 @@ jobs: - ${{ if and( eq(parameters.nightlyBuild, 'true'), eq(parameters.pool.vmImage, 'ubuntu-18.04')) }}: - bash: echo "##vso[task.setvariable variable=LD_LIBRARY_PATH]$(nightlyBuildRunPath):$LD_LIBRARY_PATH" displayName: Set LD_LIBRARY_PATH for Ubuntu and CentOS to locate Native shared library in current running path - - script: ${{ parameters.buildScript }} -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) /p:CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=True $(hardLink) + - script: ${{ parameters.buildScript }} $(arcadeCiOption) -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) /p:CreateHardLinksForCopyFilesToOutputDirectoryIfPossible=True $(hardLink) displayName: Build - ${{ if eq(parameters.pool.vmImage, 'macOS-10.15') }}: - task: Bash@3 @@ -120,10 +125,10 @@ jobs: - ${{ if eq(parameters.nightlyBuild, 'false') }}: - ${{ if eq(parameters.innerLoop, 'false') }}: - ${{ if and(eq(parameters.runSpecific, 'false'), eq(parameters.useVSTestTask, 'false')) }}: - - script: set PATH=%PATH%;%USERPROFILE%\.nuget\packages\libtorch-cpu-win-x64\2.2.1.1\runtimes\win-x64\native;%USERPROFILE%\.nuget\packages\torchsharp\0.102.7\runtimes\win-x64\native & ${{ parameters.buildScript }} /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) + - script: set PATH=%PATH%;%USERPROFILE%\.nuget\packages\libtorch-cpu-win-x64\2.2.1.1\runtimes\win-x64\native;%USERPROFILE%\.nuget\packages\torchsharp\0.102.7\runtimes\win-x64\native & ${{ parameters.buildScript }} $(arcadeCiOption) /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) displayName: Run All Tests. - ${{ if and(eq(parameters.runSpecific, 'true'), eq(parameters.useVSTestTask, 'false')) }}: - - script: ${{ parameters.buildScript }} /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:TestRunnerAdditionalArguments='-trait$(spaceValue)Category=RunSpecificTest' /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) + - script: ${{ parameters.buildScript }} $(arcadeCiOption) /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:TestRunnerAdditionalArguments='-trait$(spaceValue)Category=RunSpecificTest' /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) displayName: Run Specific Tests. - ${{ if and(eq(parameters.buildScript, 'build.cmd'), eq(parameters.useVSTestTask, 'true')) }}: - task: VSTest@2 @@ -148,7 +153,7 @@ jobs: publishRunAttachments: true - ${{ if eq(parameters.innerLoop, 'true') }}: - ${{ if eq(parameters.codeCoverage, True) }}: - - script: ${{ parameters.buildScript }} /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:TestRunnerAdditionalArguments='-notrait$(spaceValue)Category=SkipInCI' /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) + - script: ${{ parameters.buildScript }} $(arcadeCiOption) /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:TestRunnerAdditionalArguments='-notrait$(spaceValue)Category=SkipInCI' /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) displayName: Run CI Tests. - ${{ if eq(parameters.codeCoverage, False) }}: - template: /build/ci/send-to-helix.yml diff --git a/test/Microsoft.ML.Tests/BuildAnalysisTests.cs b/test/Microsoft.ML.Tests/BuildAnalysisTests.cs deleted file mode 100644 index c26942b436..0000000000 --- a/test/Microsoft.ML.Tests/BuildAnalysisTests.cs +++ /dev/null @@ -1,23 +0,0 @@ -// Licensed to the .NET Foundation under one or more agreements. -// The .NET Foundation licenses this file to you under the MIT license. -// See the LICENSE file in the project root for more information. - -using Microsoft.ML.TestFramework; -using Xunit; -using Xunit.Abstractions; - -namespace Microsoft.ML.Tests -{ - public class BuildAnalysisTests : BaseTestClass - { - public BuildAnalysisTests(ITestOutputHelper output) : base(output) - { - } - - [Fact] - public void CiModeExperiment() - { - Assert.Fail("MLNET_BUILD_ANALYSIS_CI_MODE_EXPERIMENT_7344"); - } - } -} From 42e1bbf93fea942b8a1027a1ce412f9de0c6901a Mon Sep 17 00:00:00 2001 From: Petr Onderka Date: Fri, 11 Sep 2026 17:46:26 +0200 Subject: [PATCH 4/4] Resolve native assets from MSBuild package root Co-authored-by: Copilot <223556219+Copilot@users.noreply.github.com> --- build/ci/job-template.yml | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/build/ci/job-template.yml b/build/ci/job-template.yml index 95ff876f68..e0676173d6 100644 --- a/build/ci/job-template.yml +++ b/build/ci/job-template.yml @@ -125,7 +125,10 @@ jobs: - ${{ if eq(parameters.nightlyBuild, 'false') }}: - ${{ if eq(parameters.innerLoop, 'false') }}: - ${{ if and(eq(parameters.runSpecific, 'false'), eq(parameters.useVSTestTask, 'false')) }}: - - script: set PATH=%PATH%;%USERPROFILE%\.nuget\packages\libtorch-cpu-win-x64\2.2.1.1\runtimes\win-x64\native;%USERPROFILE%\.nuget\packages\torchsharp\0.102.7\runtimes\win-x64\native & ${{ parameters.buildScript }} $(arcadeCiOption) /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) + - script: | + for /f "delims=" %%p in ('$(dotnetPath) msbuild test\run-tests.proj -getProperty:NuGetPackageRoot /p:ContinuousIntegrationBuild^=${{ parameters.codeCoverage }} -nologo') do set "NUGET_PACKAGE_ROOT=%%p" + set "PATH=%PATH%;%NUGET_PACKAGE_ROOT%libtorch-cpu-win-x64\2.2.1.1\runtimes\win-x64\native;%NUGET_PACKAGE_ROOT%torchsharp\0.102.7\runtimes\win-x64\native" + ${{ parameters.buildScript }} $(arcadeCiOption) /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework) displayName: Run All Tests. - ${{ if and(eq(parameters.runSpecific, 'true'), eq(parameters.useVSTestTask, 'false')) }}: - script: ${{ parameters.buildScript }} $(arcadeCiOption) /p:Build=false -configuration $(_configuration) /p:TargetArchitecture=${{ parameters.architecture }} -test -integrationTest /p:TestRunnerAdditionalArguments='-trait$(spaceValue)Category=RunSpecificTest' /p:Coverage=${{ parameters.codeCoverage }} $(testTargetFramework)