Repository: dotnet/aspire
Pull request #8518: Rename test env controlling and project test capabilities variables
Author: login: RussKie
Labels: name: area-engineering-systems
description: infrastructure helix infra engineering repo stuff
Created: 2025-04-03T08:05:16Z | Merged: 2025-04-08T06:36:50Z



Diff:
diff --git a/.github/actions/enumerate-tests/action.yml b/.github/actions/enumerate-tests/action.yml
index f25cbe4ce13..9129374ffaa 100644
--- a/.github/actions/enumerate-tests/action.yml
+++ b/.github/actions/enumerate-tests/action.yml
@@ -49,7 +49,7 @@ runs:
           "/t:Build;ExtractTestClassNames"
           /bl:${{ github.workspace }}/artifacts/log/Debug/BuildTemplatesTests.binlog
           -p:ExtractTestClassNamesForHelix=true
-          -p:ArchiveTests=true
+          -p:PrepareForHelix=true
           -p:ExtractTestClassNamesPrefix=Aspire.Templates.Tests
           -p:InstallBrowsersForPlaywright=false
 
diff --git a/.github/workflows/run-tests.yml b/.github/workflows/run-tests.yml
index ffa66ee7217..d0c78893bf6 100644
--- a/.github/workflows/run-tests.yml
+++ b/.github/workflows/run-tests.yml
@@ -160,8 +160,8 @@ jobs:
           CI: false
         run: >
           ${{ env.BUILD_SCRIPT }} -restore -ci -build -projects ${{ env.TEST_PROJECT_PATH }}
-          /p:ArchiveTests=true
-          /bl:${{ github.workspace }}/artifacts/log/Debug/ArchiveTests.binlog
+          /p:PrepareForHelix=true
+          /bl:${{ github.workspace }}/artifacts/log/Debug/PrepareForHelix.binlog
 
       # Workaround for bug in Azure Functions Worker SDK. See https://github.com/Azure/azure-functions-dotnet-worker/issues/2969.
       - name: Rebuild for Azure Functions project
diff --git a/eng/Testing.props b/eng/Testing.props
index 327a5822c2f..f43be60cb0a 100644
--- a/eng/Testing.props
+++ b/eng/Testing.props
@@ -1,4 +1,16 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCIWindows>true</RunOnAzdoCIWindows>
+    <RunOnAzdoCILinux>true</RunOnAzdoCILinux>
+    <RunOnAzdoHelixWindows>true</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>true</RunOnAzdoHelixLinux>
+  </PropertyGroup>
+
   <PropertyGroup Condition="'$(UseVSTestRunner)' != 'true'">
     <_QuarantinedTestRunAdditionalArgs>-trait "quarantined=true"</_QuarantinedTestRunAdditionalArgs>
     <_NonQuarantinedTestRunAdditionalArgs>-notrait "quarantined=true"</_NonQuarantinedTestRunAdditionalArgs>
diff --git a/eng/Testing.targets b/eng/Testing.targets
index faf2349bae2..b41cd7ceb59 100644
--- a/eng/Testing.targets
+++ b/eng/Testing.targets
@@ -1,3 +1,96 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable. Locally this can be set by "/p:GITHUB_ACTIONS=true".
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable. Locally this can be set by "/p:SYSTEM_TEAMPROJECT=foo".
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable. Locally this can be set by "/p:PrepareForHelix=true".
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable.
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable.
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed.
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable.
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable.
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps (either Windows or Linux); always false, if RunOnAzdoHelix=true; computed.
+        - RunOnAzdoCIWindows:          indicates whether tests should run on Windows in Azure DevOps; default is true; overridable.
+        - RunOnAzdoCILinux:            indicates whether tests should run on Linux in Azure DevOps; default is true; overridable.
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed.
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable.
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable.
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunOnGithubActions>false</RunOnGithubActions>
+    <RunOnGithubActions Condition=" '$(RunOnGithubActionsWindows)' == 'true' or '$(RunOnGithubActionsLinux)' == 'true' ">true</RunOnGithubActions>
+
+    <RunOnAzdoHelix>false</RunOnAzdoHelix>
+    <RunOnAzdoHelix Condition=" '$(RunOnAzdoHelixWindows)' == 'true' or '$(RunOnAzdoHelixLinux)' == 'true' ">true</RunOnAzdoHelix>
+
+    <RunOnAzdoCI>false</RunOnAzdoCI>
+    <RunOnAzdoCI Condition=" '$(RunOnAzdoCIWindows)' == 'true' or '$(RunOnAzdoCILinux)' == 'true' ">true</RunOnAzdoCI>
+    <!-- If a test is run on Helix, then we don't run the test on AzDO -->
+    <RunOnAzdoCI Condition=" '$(RunOnAzdoHelix)' == 'true' ">false</RunOnAzdoCI>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(SkipTests)' == '' and '$(IsTestProject)' == 'true' ">
+    <!-- Skip tests by default unless explicitly set to false -->
+    <SkipTests>true</SkipTests>
+
+    <!-- Only run tests if the build is running on GitHub Actions  -->
+    <SkipTests Condition=" '$(IsGitHubActionsRunner)' == 'true' and '$(RunOnGithubActions)' == 'true' ">false</SkipTests>
+
+    <!-- Only run tests if the build is running on Helix infra  -->
+    <SkipTests Condition=" '$(IsAzdoHelixRunner)' == 'true' and '$(RunOnAzdoHelix)' == 'true' ">false</SkipTests>
+
+    <!-- Otherwise, run tests on AzDO CI agents -->
+    <SkipTests Condition=" '$(IsAzdoCIRunner)' == 'true' and '$(RunOnAzdoCI)' == 'true' ">false</SkipTests>
+  </PropertyGroup>
+
+  <ItemGroup Condition=" '$(IsTestProject)' == 'true' and '$(IncludeTestUtilities)' == 'true' ">
+    <ProjectReference Include="$(RepoRoot)tests\Aspire.TestUtilities\Aspire.TestUtilities.csproj" />
+  </ItemGroup>
+
+  <!--
+    The following target is used to announce the test capabilities of the project.
+    -->
+  <Target Name="_AnnounceProjectTestCapabilities" BeforeTargets="RunTests" Condition="'$(IsTestProject)' == 'true'">
+    <PropertyGroup>
+      <_IsGitHubActionsRunner>$(IsGitHubActionsRunner)</_IsGitHubActionsRunner>
+      <_IsGitHubActionsRunner Condition="'$(_IsGitHubActionsRunner)' == ''">false</_IsGitHubActionsRunner>
+      <_IsAzdoCIRunner>$(IsAzdoCIRunner)</_IsAzdoCIRunner>
+      <_IsAzdoCIRunner Condition="'$(_IsAzdoCIRunner)' == ''">false</_IsAzdoCIRunner>
+      <_IsAzdoHelixRunner>$(IsAzdoHelixRunner)</_IsAzdoHelixRunner>
+      <_IsAzdoHelixRunner Condition="'$(_IsAzdoHelixRunner)' == ''">false</_IsAzdoHelixRunner>
+    </PropertyGroup>
+    <ItemGroup>
+      <_Runner Include=" - GitHub Actions: $(_IsGitHubActionsRunner)" />
+      <_Runner Include=" - Azure DevOps: $(_IsAzdoCIRunner)" />
+      <_Runner Include=" - Helix: $(_IsAzdoHelixRunner)" />
+      <_Requirement Include=" - GitHub Actions: $(RunOnGithubActions) (Windows: $(RunOnGithubActionsWindows) / Linux: $(RunOnGithubActionsLinux))" />
+      <_Requirement Include=" - Azure DevOps: $(RunOnAzdoCI) (Windows: $(RunOnAzdoCIWindows) / Linux: $(RunOnAzdoCILinux))" />
+      <_Requirement Include=" - Helix: $(RunOnAzdoHelix) (Windows: $(RunOnAzdoHelixWindows) / Linux: $(RunOnAzdoHelixLinux))" />
+    </ItemGroup>
+
+    <PropertyGroup>
+      <_NewLine>%0D%0A</_NewLine>
+      <_RunnerList>@(_Runner, '%0D%0A')</_RunnerList>
+      <_RequirementList>@(_Requirement, '$(_NewLine)')</_RequirementList>
+    </PropertyGroup>
+
+    <Message Text="Project: $(MSBuildProjectName)$(_NewLine)Runner Context:$(_NewLine)$(_RunnerList)$(_NewLine)Runner support:$(_NewLine)$(_RequirementList)" />
+  </Target>
+
 </Project>
diff --git a/eng/pipelines/templates/BuildAndTest.yml b/eng/pipelines/templates/BuildAndTest.yml
index fc2b4ee4f8a..2f1c385dbcf 100644
--- a/eng/pipelines/templates/BuildAndTest.yml
+++ b/eng/pipelines/templates/BuildAndTest.yml
@@ -46,7 +46,7 @@ steps:
               -restore -build
               -configuration ${{ parameters.buildConfig }}
               -pack
-              /p:ArchiveTests=${{ lower(eq(parameters.runHelixTests, 'true')) }}
+              /p:PrepareForHelix=${{ lower(eq(parameters.runHelixTests, 'true')) }}
               /bl:${{ parameters.repoLogPath }}/build.binlog
               $(_OfficialBuildIdArgs)
       displayName: Build
diff --git a/tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj b/tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj
index c92a8090cd0..24502b76997 100644
--- a/tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj
+++ b/tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj
@@ -5,7 +5,10 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <IsPackable>false</IsPackable>
-    <RunTestsOnHelix>false</RunTestsOnHelix>
+
+    <!-- Do not run tests in Helix at all -->
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj b/tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj
index 219b3f2531c..170beebab12 100644
--- a/tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj
+++ b/tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj
@@ -11,7 +11,9 @@
     <InstallBrowsersForPlaywright Condition="'$(InstallBrowsersForPlaywright)' == '' and '$(ContinuousIntegrationBuild)' == 'true'">true</InstallBrowsersForPlaywright>
     <InstallBrowsersForPlaywright Condition="'$(InstallBrowsersForPlaywright)' == '' and '$(OS)' == 'Windows_NT' and '$(ContinuousIntegrationBuild)' != 'true'">true</InstallBrowsersForPlaywright>
 
-    <RunTestsOnHelix>false</RunTestsOnHelix>
+    <!-- Do not run tests in Helix at all -->
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.Elastic.Clients.Elasticsearch.Tests/Aspire.Elastic.Clients.Elasticsearch.Tests.csproj b/tests/Aspire.Elastic.Clients.Elasticsearch.Tests/Aspire.Elastic.Clients.Elasticsearch.Tests.csproj
index 9927f79da36..25297f25478 100644
--- a/tests/Aspire.Elastic.Clients.Elasticsearch.Tests/Aspire.Elastic.Clients.Elasticsearch.Tests.csproj
+++ b/tests/Aspire.Elastic.Clients.Elasticsearch.Tests/Aspire.Elastic.Clients.Elasticsearch.Tests.csproj
@@ -3,9 +3,9 @@
   <PropertyGroup>
     <TargetFramework>$(DefaultTargetFramework)</TargetFramework>
 
-    <!-- Issue: https://github.com/dotnet/aspire/issues/5634 -->
-    <SkipTests Condition="'$(ContinuousIntegrationBuild)' == 'true'">true</SkipTests>
-    <RunTestsOnHelix>false</RunTestsOnHelix>
+    <!-- Do not run tests in Helix at all -->
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj b/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj
index c5284c6947a..5694b015626 100644
--- a/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj
+++ b/tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj
@@ -2,11 +2,10 @@
 
   <PropertyGroup>
     <TargetFramework>$(DefaultTargetFramework)</TargetFramework>
-    <!-- no docker support on helix/windows yet -->
-    <RunTestsOnHelix Condition="'$(OS)' == 'Windows_NT'">false</RunTestsOnHelix>
-    <!-- no docker support on GHA/windows yet -->
-    <RunTestsOnGithubActions Condition="'$(OS)' == 'Windows_NT'">false</RunTestsOnGithubActions>
-    <SkipTests Condition="'$(OS)' == 'Windows_NT'">true</SkipTests>
+    <!-- Only run on Linux; no docker support on Windows yet -->
+    <RunOnGithubActionsWindows>false</RunOnGithubActionsWindows>
+    <RunOnAzdoCIWindows>false</RunOnAzdoCIWindows>
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
 
     <!-- no docker support on helix/windows yet -->
     <TestUsingWorkloads Condition="! ('$(ContinuousIntegrationBuild)' == 'true' and '$(OS)' == 'Windows_NT')">true</TestUsingWorkloads>
diff --git a/tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj b/tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj
index 881d4c57f99..f5cb482b6ef 100644
--- a/tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj
+++ b/tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj
@@ -2,13 +2,14 @@
 
   <PropertyGroup>
     <TargetFramework>$(DefaultTargetFramework)</TargetFramework>
-    <NoWarn>
-      $(NoWarn);
-      ASPIREHOSTINGPYTHON001;
-    </NoWarn>
-    <!-- required because DockerComposePublisherTests.PublishAsync_GeneratesValidDockerComposeFile needs
-    the TestingAppHost1 -->
-    <RunTestsOnHelix>false</RunTestsOnHelix>
+    <NoWarn>$(NoWarn);ASPIREHOSTINGPYTHON001;</NoWarn>
+
+    <!--
+      Do not run tests in Helix at all
+      required because DockerComposePublisherTests.PublishAsync_GeneratesValidDockerComposeFile needs the TestingAppHost1
+      -->
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.Hosting.Testing.Tests/Aspire.Hosting.Testing.Tests.csproj b/tests/Aspire.Hosting.Testing.Tests/Aspire.Hosting.Testing.Tests.csproj
index 8a3e6ae2da7..f9fc3a5b311 100644
--- a/tests/Aspire.Hosting.Testing.Tests/Aspire.Hosting.Testing.Tests.csproj
+++ b/tests/Aspire.Hosting.Testing.Tests/Aspire.Hosting.Testing.Tests.csproj
@@ -5,8 +5,10 @@
     <ImplicitUsings>enable</ImplicitUsings>
     <Nullable>enable</Nullable>
     <IsPackable>false</IsPackable>
-    <IsTestProject>true</IsTestProject>
-    <RunTestsOnHelix>false</RunTestsOnHelix>
+
+    <!-- Do not run tests in Helix at all -->
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj b/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj
index 7d170657936..a2d06c1735a 100644
--- a/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj
+++ b/tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj
@@ -6,7 +6,10 @@
       CS8002: Referenced assembly does not have a strong name. KubernetesClient package is unsigned, we ignore that warning on purpose
     -->
     <NoWarn>$(NoWarn);CS8002</NoWarn>
-    <RunTestsOnHelix>false</RunTestsOnHelix>
+
+    <!-- Do not run tests in Helix at all -->
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
+    <RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.Oracle.EntityFrameworkCore.Tests/Aspire.Oracle.EntityFrameworkCore.Tests.csproj b/tests/Aspire.Oracle.EntityFrameworkCore.Tests/Aspire.Oracle.EntityFrameworkCore.Tests.csproj
index 41be1df65ff..0d25e41b7b0 100644
--- a/tests/Aspire.Oracle.EntityFrameworkCore.Tests/Aspire.Oracle.EntityFrameworkCore.Tests.csproj
+++ b/tests/Aspire.Oracle.EntityFrameworkCore.Tests/Aspire.Oracle.EntityFrameworkCore.Tests.csproj
@@ -2,7 +2,6 @@
 
   <PropertyGroup>
     <TargetFrameworks>$(AllTargetFrameworks)</TargetFrameworks>
-    <RunTestsOnHelix>true</RunTestsOnHelix>
   </PropertyGroup>
 
   <ItemGroup>
diff --git a/tests/Aspire.Playground.Tests/Aspire.Playground.Tests.csproj b/tests/Aspire.Playground.Tests/Aspire.Playground.Tests.csproj
index 18be600b7f7..2b048c12806 100644
--- a/tests/Aspire.Playground.Tests/Aspire.Playground.Tests.csproj
+++ b/tests/Aspire.Playground.Tests/Aspire.Playground.Tests.csproj
@@ -4,13 +4,12 @@
     <TargetFramework>$(DefaultTargetFramework)</TargetFramework>
     <!-- Set this explicitly so the project can build without arcade -->
     <IsTestProject>true</IsTestProject>
-    <ExcludeTestUtilities>true</ExcludeTestUtilities>
+    <IncludeTestUtilities>false</IncludeTestUtilities>
 
-    <!-- no docker support on helix/windows yet -->
-    <RunTestsOnHelix Condition="'$(OS)' != 'Windows_NT'">true</RunTestsOnHelix>
-    <!-- no docker support on GHA/windows yet -->
-    <RunTestsOnGithubActions Condition="'$(OS)' == 'Windows_NT'">false</RunTestsOnGithubActions>
-    <SkipTests Condition="'$(OS)' == 'Windows_NT'">true</SkipTests>
+    <!-- Only run on Linux; no docker support on Windows yet -->
+    <RunOnGithubActionsWindows>false</RunOnGithubActionsWindows>
+    <RunOnAzdoCIWindows>false</RunOnAzdoCIWindows>
+    <RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>
 
     <DeployOutsideOfRepoSupportFilesRelativeDir>staging-archive\</DeployOutsideOfRepoSupportFilesRelativeDir>
 
@@ -89,7 +88,7 @@
     <ProjectReference Include="$(PlaygroundSourceDir)withdockerfile/WithDockerfile.AppHost/WithDockerfile.AppHost.csproj" />
   </ItemGroup>
 
-  <ItemGroup Condition="'$(ArchiveTests)' == 'true'" Label="Prepare archive dir for helix">
+  <ItemGroup Condition="'$(PrepareForHelix)' == 'true'" Label="Prepare archive dir for helix">
     <None Include="$(MSBuildProjectDirectory)\**\*" Link="$(DeployOutsideOfRepoSupportFilesRelativeDir)tests\$(MSBuildProjectName)\%(RecursiveDir)%(FileName)%(Extension)" CopyToOutputDirectory="PreserveNewest" />
     <None Include="$(RepoRoot)playground\**\*" Link="$(DeployOutsideOfRepoSupportFilesRelativeDir)playground\%(RecursiveDir)%(FileName)%(Extension)" CopyToOutputDirectory="PreserveNewest" />
     <None Include="$(RepoRoot)src\Aspire.Hosting\Utils\PasswordGenerator.cs" Link="$(DeployOutsideOfRepoSupportFilesRelativeDir)tests\$(MSBuildProjectName)\PasswordGenerator.cs" CopyToOutputDirectory="PreserveNewest" />
diff --git a/tests/Aspire.Templates.Tests/Aspire.Templates.Tests.csproj b/tests/Aspire.Templates.Tests/Aspire.Templates.Tests.csproj
index 6b50c7c40ac..7e9cb00475b 100644
--- a/tests/Aspire.Templates.Tests/Aspire.Templates.Tests.csproj
+++ b/tests/Aspire.Templates.Tests/Aspire.Templates.Tests.csproj
@@ -11,10 +11,10 @@
     <TestArchiveTestsDir>$(TestArchiveTestsDirForTemplateTests)</TestArchiveTestsDir>
 
     <InstallBrowsersForPlaywright Condition="'$(InstallBrowsersForPlaywright)' == '' and '$(CODESPACES)' == 'true'">true</InstallBrowsersForPlaywright>
-    <InstallBrowsersForPlaywright Condition="'$(InstallBrowsersForPlaywright)' == '' and '$(ArchiveTests)' == 'true' and '$(ContinuousIntegrationBuild)' == 'true'">true</InstallBrowsersForPlaywright>
+    <InstallBrowsersForPlaywright Condition="'$(InstallBrowsersForPlaywright)' == '' and '$(PrepareForHelix)' == 'true' and '$(ContinuousIntegrationBuild)' == 'true'">true</InstallBrowsersForPlaywright>
     <InstallBrowsersForPlaywright Condition="'$(InstallBrowsersForPlaywright)' == '' and '$(OS)' == 'Windows_NT' and '$(ContinuousIntegrationBuild)' != 'true'">true</InstallBrowsersForPlaywright>
 
-    <ExtractTestClassNamesForHelix Condition="'$(ContinuousIntegrationBuild)' == 'true' or '$(ArchiveTests)' == 'true'">true</ExtractTestClassNamesForHelix>
+    <ExtractTestClassNamesForHelix Condition="'$(ContinuousIntegrationBuild)' == 'true' or '$(PrepareForHelix)' == 'true'">true</ExtractTestClassNamesForHelix>
     <ExtractTestClassNamesPrefix>Aspire.Templates.Tests</ExtractTestClassNamesPrefix>
 
     <!--
diff --git a/tests/Directory.Build.targets b/tests/Directory.Build.targets
index 1493871f5a3..a18ad0736dc 100644
--- a/tests/Directory.Build.targets
+++ b/tests/Directory.Build.targets
@@ -3,23 +3,14 @@
 
   <Import Project="$(TestsSharedRepoTestingDir)Aspire.RepoTesting.targets" />
 
-  <ItemGroup Condition=" '$(IsTestProject)' == 'true' and '$(ExcludeTestUtilities)' != 'true' ">
-    <ProjectReference Include="$(RepoRoot)tests\Aspire.TestUtilities\Aspire.TestUtilities.csproj" />
-  </ItemGroup>
-
   <PropertyGroup>
     <!-- forward the settings file path to RunTests target in arcade -->
     <VSTestRunSettingsFile Condition="'$(VSTestRunSettingsFile)' == ''">$(RunSettingsFilePath)</VSTestRunSettingsFile>
 
     <DeployRunSettingsFile Condition="'$(DeployRunSettingsFile)' == ''">true</DeployRunSettingsFile>
     <!-- Use a separate xunit.runner.json for helix that disables parallel test runs -->
-    <XunitRunnerJson Condition="'$(XunitRunnerJson)' == '' and '$(ArchiveTests)' == 'true'">$(RepoRoot)tests\helix\xunit.runner.json</XunitRunnerJson>
+    <XunitRunnerJson Condition="'$(XunitRunnerJson)' == '' and '$(PrepareForHelix)' == 'true'">$(RepoRoot)tests\helix\xunit.runner.json</XunitRunnerJson>
     <XunitRunnerJson Condition="'$(XunitRunnerJson)' == ''">$(RepositoryEngineeringDir)testing\xunit.runner.json</XunitRunnerJson>
-
-    <RunTestsOnGithubActions Condition="'$(RunTestsOnGithubActions)' == '' and ('$(IsTestProject)' == 'true' and '$(IsTestUtilityProject)' != 'true')">true</RunTestsOnGithubActions>
-    <RunTestsOnHelix Condition="'$(RunTestsOnHelix)' == '' and ('$(IsTestProject)' == 'true' and '$(IsTestUtilityProject)' != 'true')">true</RunTestsOnHelix>
-    <!-- this is for pipeline tests -->
-    <SkipTests Condition="'$(SkipTests)' == '' and ('$(IsTestUtilityProject)' == 'true' or '$(RunTestsOnHelix)' == 'true')">true</SkipTests>
   </PropertyGroup>
 
   <ItemGroup>
@@ -28,7 +19,7 @@
   </ItemGroup>
 
   <Target Name="ZipTestArchive" AfterTargets="Build"
-          Condition="'$(ArchiveTests)' == 'true' and '$(RunTestsOnHelix)' == 'true' and '$(IsTestUtilityProject)' != 'true' and '$(IsCrossTargetingBuild)' != 'true'">
+          Condition=" '$(IsTestProject)' == 'true' and '$(PrepareForHelix)' == 'true' and '$(RunOnAzdoHelix)' == 'true' and '$(IsTestUtilityProject)' != 'true' and '$(IsCrossTargetingBuild)' != 'true'">
     <Error Condition="'$(TestArchiveTestsDir)' == ''" Text="TestArchiveTestsDir property to archive the test folder must be set." />
     <PropertyGroup>
       <TestsArchiveSourceDir Condition="'$(TestsArchiveSourceDir)' == ''">$(OutDir)</TestsArchiveSourceDir>
@@ -44,7 +35,7 @@
 
   <!-- Used for running one helix job per test class -->
   <Target Name="ExtractTestClassNames"
-          Condition="'$(ExtractTestClassNamesForHelix)' == 'true' and '$(ArchiveTests)' == 'true' and '$(IsTestUtilityProject)' != 'true'"
+          Condition=" '$(IsTestProject)' == 'true' and '$(ExtractTestClassNamesForHelix)' == 'true' and '$(PrepareForHelix)' == 'true' and '$(IsTestUtilityProject)' != 'true'"
           BeforeTargets="ZipTestArchive">
 
     <Error Condition="'$(ExtractTestClassNamesPrefix)' == ''"
@@ -75,7 +66,7 @@
 
   <Target Name="GetRunTestsOnGithubActions" Returns="@(TestProject)">
     <ItemGroup>
-      <TestProject Include="$(MSBuildProjectFullPath)" RunTestsOnGithubActions="$(RunTestsOnGithubActions)" />
+      <TestProject Include="$(MSBuildProjectFullPath)" RunTestsOnGithubActions="$(RunOnGithubActions)" />
     </ItemGroup>
   </Target>
 
diff --git a/tests/README.md b/tests/README.md
index 5f622f9c182..6f00d2e77ff 100644
--- a/tests/README.md
+++ b/tests/README.md
@@ -1,19 +1,26 @@
 # Helix
 
-The helix CI job builds `tests/helix/send-to-helix-ci.proj`, which in turns builds the `Test` target on `tests/helix/send-to-helix-inner.proj`. This inner project uses the Helix SDK to construct `@(HelixWorkItem)`s, and send them to helix to run.
+The Helix CI job builds `tests/helix/send-to-helix-ci.proj`, which in turns builds the `Test` target on `tests/helix/send-to-helix-inner.proj`. This inner project uses the Helix SDK to construct `@(HelixWorkItem)`s, and send them to Helix to run.
 
 - `tests/helix/send-to-helix-basictests.targets` - this prepares all the tests that don't need special preparation
-- `tests/helix/send-to-helix-endtoend-tests.targets` - this is for tests that require a sdk+workload installed
+- `tests/helix/send-to-helix-endtoend-tests.targets` - this is for tests that require a SDK+workload installed
 
-## Install sdk+workload from artifacts
+## Install SDK+workload from artifacts
 
 1. `.\build.cmd -pack`
 2. `dotnet build tests\workloads.proj`
 
-.. which results in `artifacts\bin\dotnet-tests` which has a sdk (version from `global.json`) with the `aspire` workload installed using packs from `artifacts/packages`.
+.. which results in `artifacts\bin\dotnet-tests` which has a SDK (version from `global.json`) with the `aspire` workload installed using packs from `artifacts/packages`.
 
 ## Controlling test runs on CI
 
-- Tests on PRs run in github actions. Individual test projects can be disabled for PRs with the property `$(RunTestsOnGithubActions)` which defaults to `true`.
+- Tests on pull-requests run in GitHub Actions. Individual test projects can be opted-out by setting appropriate MSBuild properties:
+  - `<RunOnGithubActionsWindows>false</RunOnGithubActionsWindows>` and/or
+  - `<RunOnGithubActionsLinux>false</RunOnGithubActionsLinux>`.
 
-- Tests for rolling builds run on the build machine, and helix. Use `$(RunTestsOnHelix)` which defaults to `true`. If set to `false` then it would run on the build machine. But to skip the tests completely set `$(SkipTests)=true` also.
+- Tests for rolling builds run on the build machine and Helix.
+Individual test projects can be opted-out by setting appropriate MSBuild properties:
+  - `<RunOnAzdoCIWindows>false</RunOnAzdoCIWindows>` and/or
+  - `<RunOnAzdoCILinux>false</RunOnAzdoCILinux>` and/or
+  - `<RunOnAzdoHelixWindows>false</RunOnAzdoHelixWindows>` and/or
+  - `<RunOnAzdoHelixLinux>false</RunOnAzdoHelixLinux>`.
diff --git a/tests/Shared/RepoTesting/Aspire.RepoTesting.targets b/tests/Shared/RepoTesting/Aspire.RepoTesting.targets
index deb1a291271..2681b98d267 100644
--- a/tests/Shared/RepoTesting/Aspire.RepoTesting.targets
+++ b/tests/Shared/RepoTesting/Aspire.RepoTesting.targets
@@ -37,7 +37,7 @@
 
   <PropertyGroup>
     <!-- copy by default only when archiving tests, and for test projects that support running out of repo -->
-    <DeployOutsideOfRepoSupportFiles Condition="'$(DeployOutsideOfRepoSupportFiles)' == '' and '$(ArchiveTests)' == 'true' and '$(IsTestProject)' == 'true'">true</DeployOutsideOfRepoSupportFiles>
+    <DeployOutsideOfRepoSupportFiles Condition="'$(DeployOutsideOfRepoSupportFiles)' == '' and '$(PrepareForHelix)' == 'true' and '$(IsTestProject)' == 'true'">true</DeployOutsideOfRepoSupportFiles>
 
     <IncludeTestPackages Condition="'$(IncludeTestPackages)' == '' and ('$(IsTestProject)' == 'true' or '$(IsTestUtilityProject)' == 'true')">true</IncludeTestPackages>
     <GeneratedPackagesVersionsPropsPath Condition="'$(GeneratedPackagesVersionsPropsPath)' == ''">$(IntermediateOutputPath)Directory.Packages.Versions.props</GeneratedPackagesVersionsPropsPath>
@@ -93,7 +93,9 @@
     <PropertyForHelixRun Include="PackageVersion" />
   </ItemGroup>
 
-  <Target Name="_UpdateArchiveSourcePath" BeforeTargets="ZipTestArchive" Condition="'$(ArchiveTests)' == 'true' and '$(DeployOutsideOfRepoSupportFilesRelativeDir)' != ''">
+  <Target Name="_UpdateArchiveSourcePath"
+          BeforeTargets="ZipTestArchive"
+          Condition=" '$(IsTestProject)' == 'true' and '$(PrepareForHelix)' == 'true' and '$(DeployOutsideOfRepoSupportFilesRelativeDir)' != ''">
     <PropertyGroup>
       <TestsArchiveSourceDir>$(OutDir)$(DeployOutsideOfRepoSupportFilesRelativeDir)</TestsArchiveSourceDir>
     </PropertyGroup>


Reviews:
user: login: copilot-pull-request-reviewer[bot]
body: ## Pull Request Overview

This PR revises the documentation in tests/README.md to reflect updates in variable naming for controlling test environments and project test capabilities. Key changes include updating text for clarity and consistency with renamed MSBuild properties, along with minor formatting and capitalization improvements.
- Updated CI and Helix instructions to match variable renaming
- Improved capitalization and consistency in documentation

<details>
<summary>Files not reviewed (13)</summary>

* **eng/Testing.props**: Language not supported
* **eng/Testing.targets**: Language not supported
* **tests/Aspire.Cli.Tests/Aspire.Cli.Tests.csproj**: Language not supported
* **tests/Aspire.Dashboard.Tests/Aspire.Dashboard.Tests.csproj**: Language not supported
* **tests/Aspire.Elastic.Clients.Elasticsearch.Tests/Aspire.Elastic.Clients.Elasticsearch.Tests.csproj**: Language not supported
* **tests/Aspire.EndToEnd.Tests/Aspire.EndToEnd.Tests.csproj**: Language not supported
* **tests/Aspire.Hosting.Docker.Tests/Aspire.Hosting.Docker.Tests.csproj**: Language not supported
* **tests/Aspire.Hosting.Testing.Tests/Aspire.Hosting.Testing.Tests.csproj**: Language not supported
* **tests/Aspire.Hosting.Tests/Aspire.Hosting.Tests.csproj**: Language not supported
* **tests/Aspire.Oracle.EntityFrameworkCore.Tests/Aspire.Oracle.EntityFrameworkCore.Tests.csproj**: Language not supported
* **tests/Aspire.Playground.Tests/Aspire.Playground.Tests.csproj**: Language not supported
* **tests/Directory.Build.targets**: Language not supported
* **tests/Shared/RepoTesting/Aspire.RepoTesting.targets**: Language not supported
</details>



state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T08:05:42Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T08:21:27Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-03T09:32:40Z
user: login: radical
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-04T00:34:06Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T00:38:18Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-04T01:00:25Z
user: login: radical
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-04T02:31:29Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T00:05:18Z
user: login: radical
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T00:05:38Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T00:13:58Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T00:17:21Z
user: login: radical
body: Looks good. Added some comments. Is the azdo build for this looking good too?
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T00:17:44Z
user: login: radical
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T00:18:47Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T00:23:26Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T00:24:49Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T00:42:57Z
user: login: radical
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-08T04:00:41Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-08T04:26:46Z
user: login: radical
body: LGTM! Thank you for working on this, and patience with the review process!

Feel free to merge once the latest azdo run is green with the same test count :)
state: APPROVED
author_association: MEMBER
submitted_at: 2025-04-08T04:51:56Z
user: login: Youssef1313
state: COMMENTED
author_association: MEMBER
submitted_at: 2025-04-09T14:07:55Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-09T22:59:02Z
user: login: RussKie
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-04-10T02:41:37Z

Review comments:
diff_hunk: @@ -1,19 +1,25 @@
 # Helix
 
-The helix CI job builds `tests/helix/send-to-helix-ci.proj`, which in turns builds the `Test` target on `tests/helix/send-to-helix-inner.proj`. This inner project uses the Helix SDK to construct `@(HelixWorkItem)`s, and send them to helix to run.
+The Helix CI job builds `tests/helix/send-to-helix-ci.proj`, which in turns builds the `Test` target on `tests/helix/send-to-helix-inner.proj`. This inner project uses the Helix SDK to construct `@(HelixWorkItem)`s, and send them to Helix to run.
 
path: tests/README.md
user: login: Copilot
body: Consider replacing 'in turns builds' with 'in turn builds' to improve grammatical accuracy.
```suggestion
The Helix CI job builds `tests/helix/send-to-helix-ci.proj`, which in turn builds the `Test` target on `tests/helix/send-to-helix-inner.proj`. This inner project uses the Helix SDK to construct `@(HelixWorkItem)`s, and send them to Helix to run.
```
created_at: 2025-04-03T08:05:42Z
author_association: CONTRIBUTOR
diff_hunk: @@ -4,13 +4,13 @@
     <TargetFramework>$(DefaultTargetFramework)</TargetFramework>
     <!-- Set this explicitly so the project can build without arcade -->
     <IsTestProject>true</IsTestProject>
-    <ExcludeTestUtilities>true</ExcludeTestUtilities>
+    <IncludeTestUtilities>false</IncludeTestUtilities>
 
-    <!-- no docker support on helix/windows yet -->
-    <RunTestsOnHelix Condition="'$(OS)' != 'Windows_NT'">true</RunTestsOnHelix>
path: tests/Aspire.Playground.Tests/Aspire.Playground.Tests.csproj
user: login: RussKie
body: I added `RunsOnHelixWindows` and `RunsOnHelixLinux` props because of this.

I understand that these two props have no direct impact (because Helix payload is bootstrapped in its own way), but they make it much easier to reason about each test project capabilities.
created_at: 2025-04-03T08:21:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
path: eng/Testing.targets
user: login: RussKie
body: Eventually, these will be turned into a proper documentation.
created_at: 2025-04-03T09:32:40Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunsOnGithubActionsWindows>true</RunsOnGithubActionsWindows>
path: eng/Testing.props
user: login: radical
body: IMHO, these should be named `RunOn..` instead of `RunsOn` because we want to use this to indicate whether the project is choosing to *run on* here or not, as ` By default any test can run on all test platforms`.
created_at: 2025-04-03T18:54:49Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
path: eng/Testing.targets
user: login: radical
body: This will never be true because the `$(HELIX_CORRELATION_ID)` is only set on a helix agent. Instead of this we can pass a new property `PrepareForHelix=true` from `BuildAndTest.yml`, and based on that we set `ArchiveTests=true`. And you can use that same property here to know that this build is for running on helix.
created_at: 2025-04-03T18:55:50Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
path: eng/Testing.targets
user: login: radical
body: Why are we overriding this to be `false` when it has been set by default to `true` in the props file. Also the individual projects can modify this.
created_at: 2025-04-03T19:07:56Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
+    <RunsOnGithubActions Condition=" '$(RunsOnGithubActionsWindows)' == 'true' or '$(RunsOnGithubActionsLinux)' == 'true' ">true</RunsOnGithubActions>
path: eng/Testing.targets
user: login: radical
body: This seems to be a computed "local" property. I would suggest using the `_` prefix for the name.
created_at: 2025-04-03T19:08:43Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
+    <RunsOnGithubActions Condition=" '$(RunsOnGithubActionsWindows)' == 'true' or '$(RunsOnGithubActionsLinux)' == 'true' ">true</RunsOnGithubActions>
+
+    <RunsOnHelix>false</RunsOnHelix>
+    <RunsOnHelix Condition=" '$(RunsOnHelixWindows)' == 'true' or '$(RunsOnHelixLinux)' == 'true' ">true</RunsOnHelix>
path: eng/Testing.targets
user: login: radical
body: Running on helix, and azdo are mutually exclusive. So, I think we should have property like `RunOnAzdo` with two possible values - `pipeline`, or `helix`. So, if we are running in Azdo, then this property would be relevant.
created_at: 2025-04-04T00:30:44Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
+    <RunsOnGithubActions Condition=" '$(RunsOnGithubActionsWindows)' == 'true' or '$(RunsOnGithubActionsLinux)' == 'true' ">true</RunsOnGithubActions>
path: eng/Testing.targets
user: login: RussKie
body: No, this is a global flag that can be used in other places instead of checking `RunsOnGithubActionsWindows` or `RunsOnGithubActionsLinux` individually.
E.g.:
```xml
  <Target Name="RunTests"
          Outputs="%(TestToRun.ResultsStdOutPath)"
          Condition=" '$(SkipTests)' != 'true' and '$(IsGitHubActionsRunner)' == 'true' and '$(RunsOnGithubActions)' == 'true' ">
```
created_at: 2025-04-04T00:38:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
path: eng/Testing.targets
user: login: RussKie
body: In the props file we're settings both `RunsOnGithubActionsWindows` and `RunOnGithubActionsLinux`, and each individual test project can override the defaults as necessary.
`RunsOnGithubActions` is an aggregate computed property, which is useful for general purposes. See https://github.com/dotnet/aspire/pull/8518#discussion_r2027925589 for more details.
created_at: 2025-04-04T01:00:25Z
author_association: CONTRIBUTOR
diff_hunk: @@ -49,7 +49,7 @@ runs:
           "/t:Build;ExtractTestClassNames"
           /bl:${{ github.workspace }}/artifacts/log/Debug/BuildTemplatesTests.binlog
           -p:ExtractTestClassNamesForHelix=true
-          -p:ArchiveTests=true
+          -p:RunHelixTests=true
path: .github/actions/enumerate-tests/action.yml
user: login: radical
body: Maybe `PrepareForHelixTests` because this will only prepare the archives, and not actually send anything to helix.
created_at: 2025-04-04T02:25:00Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
path: eng/Testing.targets
user: login: radical
body: Could you please help me understand why we are creating separate properties for that?
created_at: 2025-04-04T02:29:13Z
author_association: MEMBER
diff_hunk: @@ -49,7 +49,7 @@ runs:
           "/t:Build;ExtractTestClassNames"
           /bl:${{ github.workspace }}/artifacts/log/Debug/BuildTemplatesTests.binlog
           -p:ExtractTestClassNamesForHelix=true
-          -p:ArchiveTests=true
+          -p:RunHelixTests=true
path: .github/actions/enumerate-tests/action.yml
user: login: RussKie
body: Renamed
created_at: 2025-04-08T00:05:18Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCI>true</RunOnAzdoCI>
path: eng/Testing.props
user: login: radical
body: Does this need to be split into two too?
created_at: 2025-04-08T00:05:38Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,92 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(IsAzdoCIRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(IsAzdoHelixRunner)' == '' and '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
path: eng/Testing.targets
user: login: radical
body: nit: We don't need to check whether the property is empty or not. We are setting the value based on some environment properties. And if for a particular run we want to force which runner it is then that property could be set on the command line thus completely overriding these.
created_at: 2025-04-08T00:13:17Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,92 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(IsAzdoCIRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(IsAzdoHelixRunner)' == '' and '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunOnGithubActions>false</RunOnGithubActions>
+    <RunOnGithubActions Condition=" '$(RunOnGithubActionsWindows)' == 'true' or '$(RunOnGithubActionsLinux)' == 'true' ">true</RunOnGithubActions>
+
+    <RunOnAzdoHelix>false</RunOnAzdoHelix>
+    <RunOnAzdoHelix Condition=" '$(RunOnAzdoHelixWindows)' == 'true' or '$(RunOnAzdoHelixLinux)' == 'true' ">true</RunOnAzdoHelix>
+
+    <!-- If a test is run on Helix, then we don't run the test on AzDO -->
+    <RunOnAzdoCI Condition=" '$(RunOnAzdoHelix)' == 'true' ">false</RunOnAzdoCI>
+  </PropertyGroup>
+
+  <PropertyGroup Condition=" '$(SkipTests)' == '' and '$(IsTestProject)' == 'true' ">
+    <!-- Skip tests by default unless explicitly set to false -->
+    <SkipTests>true</SkipTests>
+
+    <!-- Only run tests if the build is running on GitHub Actions  -->
+    <SkipTests Condition=" '$(IsGitHubActionsRunner)' == 'true' and '$(RunOnGithubActions)' == 'true' ">false</SkipTests>
+
+    <!-- Only run tests if the build is running on Helix infra  -->
+    <SkipTests Condition=" '$(IsAzdoHelixRunner)' == 'true' and '$(RunOnAzdoHelix)' == 'true' ">false</SkipTests>
+
+    <!-- Otherwise, run tests on AzDO CI agents -->
+    <SkipTests Condition=" '$(IsAzdoCIRunner)' == 'true' and '$(RunOnAzdoCI)' == 'true' ">false</SkipTests>
+  </PropertyGroup>
+
+  <ItemGroup Condition=" '$(IsTestProject)' == 'true' and '$(IncludeTestUtilities)' == 'true' ">
+    <ProjectReference Include="$(RepoRoot)tests\Aspire.TestUtilities\Aspire.TestUtilities.csproj" />
+  </ItemGroup>
+
+  <!--
+    The following target is used to announce the test capabilities of the project.
+    -->
+  <Target Name="_AnnounceProjectTestCapabilities" BeforeTargets="RunTests" Condition="'$(IsTestProject)' == 'true'">
+    <PropertyGroup>
+      <_IsGitHubActionsRunner Condition="'$(IsGitHubActionsRunner)' == ''">false</_IsGitHubActionsRunner>
+      <_IsGitHubActionsRunner Condition="'$(IsGitHubActionsRunner)' != ''">$(IsGitHubActionsRunner)</_IsGitHubActionsRunner>
+      <_IsAzdoCIRunner Condition="'$(IsAzdoCIRunner)' == ''">false</_IsAzdoCIRunner>
+      <_IsAzdoCIRunner Condition="'$(IsAzdoCIRunner)' != ''">$(IsAzdoCIRunner)</_IsAzdoCIRunner>
+      <_IsAzdoHelixRunner Condition="'$(IsAzdoHelixRunner)' == ''">false</_IsAzdoHelixRunner>
+      <_IsAzdoHelixRunner Condition="'$(IsAzdoHelixRunner)' != ''">$(IsAzdoHelixRunner)</_IsAzdoHelixRunner>
path: eng/Testing.targets
user: login: radical
body: nit: this would be more idiomatic:
```suggestion
      <_IsGitHubActionsRunner>$(IsGitHubActionsRunner)</_IsGitHubActionsRunner>
      <_IsGitHubActionsRunner Condition="'$(_IsGitHubActionsRunner)' == ''">false</_IsGitHubActionsRunner>
      <_IsAzdoCIRunner>$(IsAzdoCIRunner)</_IsAzdoCIRunner>
      <_IsAzdoCIRunner Condition="'$(_IsAzdoCIRunner)' == ''">false</_IsAzdoCIRunner>
      <_IsAzdoHelixRunner>$(IsAzdoHelixRunner)</_IsAzdoHelixRunner>
      <_IsAzdoHelixRunner Condition="'$(_IsAzdoHelixRunner)' == ''">false</_IsAzdoHelixRunner>
```

created_at: 2025-04-08T00:13:50Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
+    <RunsOnGithubActions Condition=" '$(RunsOnGithubActionsWindows)' == 'true' or '$(RunsOnGithubActionsLinux)' == 'true' ">true</RunsOnGithubActions>
+
+    <RunsOnHelix>false</RunsOnHelix>
+    <RunsOnHelix Condition=" '$(RunsOnHelixWindows)' == 'true' or '$(RunsOnHelixLinux)' == 'true' ">true</RunsOnHelix>
path: eng/Testing.targets
user: login: RussKie
body: Yes, this is handled in https://github.com/dotnet/aspire/pull/8518/files#diff-fb9d910fd40b64c36548859e4b6d19264d5b3bab9e79c515617181e760fb31b5 line:41
created_at: 2025-04-08T00:13:58Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCI>true</RunOnAzdoCI>
path: eng/Testing.props
user: login: RussKie
body: _Possibly_, but I haven't seen a use for it in the existing implementations. Currently, we run all tests on the same build agent, so separating the property in to `RunOnAzdoWindows` and `RunOnAzdoLinux` wouldn't add any value.
However, once we move off Helix and (if) start running tests in AzDO on different OS, then adding new properties may make total sense.
created_at: 2025-04-08T00:17:20Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCI>true</RunOnAzdoCI>
path: eng/Testing.props
user: login: radical
body: IMHO, that seems at odds with the reasoning for splitting the properties at all - clarity, and consistency.
created_at: 2025-04-08T00:18:47Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,91 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoRunner:                indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsHelix:                     indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+        - RunsOnGithubActions:         indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunsOnGithubActionsWindows:  indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunsOnGithubActionsLinux:    indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunsOnAzdo:                  indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunsOnHelix:                 indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunsOnHelixWindows:          indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunsOnHelixLinux:            indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoRunner Condition=" '$(IsAzdoRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoRunner>
+
+    <!-- See https://github.com/dotnet/arcade/blob/main/src/Microsoft.DotNet.Helix/Sdk/Readme.md#common-helix-client-environment-variables -->
+    <IsHelix Condition=" '$(IsHelix)' == '' and '$(HELIX_CORRELATION_ID)' != '' ">true</IsHelix>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunsOnGithubActions>false</RunsOnGithubActions>
path: eng/Testing.targets
user: login: RussKie
body: This is a stepping stone.

In the current implementation there are situations where a project may only be run on a specific OS (e.g., some tests can only be run on Linux). To generate a matrix, we need to know which OS a project could be run on. The full matrix can be generated in a single step, and conditioning on OS won't work for this reason; we need each project to tell us instead where it can run.

The overacrching computed property is a "helper", which allows us to simplify the code - e.g., use `Condition=" '$(RunsOnGithubActions)' == 'true' "` vs `Condition=" '$(RunsOnGithubActionsWindows)' == 'true' or  '$(RunsOnGithubActionsLinux)' == 'true' "`
created_at: 2025-04-08T00:23:26Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,3 +1,92 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps; default is true; overridable
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(IsGitHubActionsRunner)' == '' and '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(IsAzdoCIRunner)' == '' and '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(IsAzdoHelixRunner)' == '' and '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
path: eng/Testing.targets
user: login: RussKie
body: We do to be able simulate different runs locally.

[EDIT] Technically, you're correct. Locally, `IsGitHubActionsRunner` can be set by setting `/p:GITHUB_ACTIONS=true`; `IsAzdoCIRunner` can be set by `/p:SYSTEM_TEAMPROJECT=bla`; `IsAzdoHelixRunner` - by setting `/p:PrepareForHelix=true`.
created_at: 2025-04-08T00:24:49Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCI>true</RunOnAzdoCI>
path: eng/Testing.props
user: login: RussKie
body: Agree to a degree. GHA and Helix run on different OS, whereas CI doesn't. So, splitting the property doesn't feel justified.
My primary objective right now is GHA-related test infra. I haven't looked at the Helix/CI in details, and I'm trying to make minimally necessary changes to avoid any disruptions there. 
I agree that splitting the Helix properties may look excessive, and they may be removed in the future. For now, they have minimal impact (if any at all).
created_at: 2025-04-08T00:42:57Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCI>true</RunOnAzdoCI>
path: eng/Testing.props
user: login: radical
body: Isn't "CI" the pipeline (non-helix) tests which run on both Linux, and Windows?
created_at: 2025-04-08T04:00:41Z
author_association: MEMBER
diff_hunk: @@ -1,4 +1,15 @@
 <Project>
+  <PropertyGroup>
+    <IncludeTestUtilities>true</IncludeTestUtilities>
+
+    <!-- By default any test can run on all test platforms -->
+    <RunOnGithubActionsWindows>true</RunOnGithubActionsWindows>
+    <RunOnGithubActionsLinux>true</RunOnGithubActionsLinux>
+    <RunOnAzdoCI>true</RunOnAzdoCI>
path: eng/Testing.props
user: login: RussKie
body: At this stage this is totally immaterial.
created_at: 2025-04-08T04:26:46Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,3 +1,96 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable. Locally this can be set by "/p:GITHUB_ACTIONS=true".
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable. Locally this can be set by "/p:SYSTEM_TEAMPROJECT=foo".
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable. Locally this can be set by "/p:PrepareForHelix=true".
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable.
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable.
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed.
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable.
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable.
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps (either Windows or Linux); always false, if RunOnAzdoHelix=true; computed.
+        - RunOnAzdoCIWindows:          indicates whether tests should run on Windows in Azure DevOps; default is true; overridable.
+        - RunOnAzdoCILinux:            indicates whether tests should run on Linux in Azure DevOps; default is true; overridable.
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed.
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable.
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable.
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunOnGithubActions>false</RunOnGithubActions>
+    <RunOnGithubActions Condition=" '$(RunOnGithubActionsWindows)' == 'true' or '$(RunOnGithubActionsLinux)' == 'true' ">true</RunOnGithubActions>
path: eng/Testing.targets
user: login: Youssef1313
body: Is this logic correct?
Shouldn't `RunOnGithubActionsWindows` be considered only when on Windows, and `RunOnGithubActionsLinux` be considered only on Linux, instead of ORing them together without any OS checks?

Currently, it seems like Playground is run on GitHub Actions on Windows (VSTest just ignores when no tests are run, but with my PR for MTP I'm getting zero tests ran for Playground)

Could you please double check @RussKie? Am I missing something here?
created_at: 2025-04-09T14:07:55Z
author_association: MEMBER
diff_hunk: @@ -1,3 +1,96 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable. Locally this can be set by "/p:GITHUB_ACTIONS=true".
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable. Locally this can be set by "/p:SYSTEM_TEAMPROJECT=foo".
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable. Locally this can be set by "/p:PrepareForHelix=true".
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable.
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable.
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed.
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable.
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable.
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps (either Windows or Linux); always false, if RunOnAzdoHelix=true; computed.
+        - RunOnAzdoCIWindows:          indicates whether tests should run on Windows in Azure DevOps; default is true; overridable.
+        - RunOnAzdoCILinux:            indicates whether tests should run on Linux in Azure DevOps; default is true; overridable.
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed.
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable.
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable.
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunOnGithubActions>false</RunOnGithubActions>
+    <RunOnGithubActions Condition=" '$(RunOnGithubActionsWindows)' == 'true' or '$(RunOnGithubActionsLinux)' == 'true' ">true</RunOnGithubActions>
path: eng/Testing.targets
user: login: RussKie
body: Yes, the logic is correct.
These variables denote the "capabilities":
https://github.com/dotnet/aspire/blob/ac098f78e71602efa45f94bfb2918e0103e809a0/eng/Testing.targets#L13-L22

...and used to generate runsheets, which then executed on individual build agents.

You can see how it is being used in https://github.com/dotnet/aspire/pull/8618/files#diff-ce47bb41900ee3082587fce1184e86392a2c25a05882281792f04e8e8abc51f4.
created_at: 2025-04-09T22:59:02Z
author_association: CONTRIBUTOR
diff_hunk: @@ -1,3 +1,96 @@
 <Project>
 
+  <!--
+      Environment variables:
+        - IsGitHubActionsRunner:       indicates whether tests are currently run on GitHub Actions; computed, overridable. Locally this can be set by "/p:GITHUB_ACTIONS=true".
+        - IsAzdoCIRunner:              indicates whether tests are currently run on Azure DevOps; computed, overridable. Locally this can be set by "/p:SYSTEM_TEAMPROJECT=foo".
+        - IsAzdoHelixRunner:           indicates whether tests are currently run on Helix; computed, overridable. Locally this can be set by "/p:PrepareForHelix=true".
+
+      Project capabilities:
+        - IsTestProject:               indicates whether the project is a test project; default is false; computed, overridable.
+        - IncludeTestUtilities:        indicates whether the test project must not include the TestUtilities project reference; default is false; overridable.
+
+      Project requirements:
+        - RunOnGithubActions:          indicates whether tests should run on GitHub Actions (either Windows or Linux); computed.
+        - RunOnGithubActionsWindows:   indicates whether tests should run on Windows in GitHub Actions; default is true; overridable.
+        - RunOnGithubActionsLinux:     indicates whether tests should run on Linux in GitHub Actions; default is true; overridable.
+        - RunOnAzdoCI:                 indicates whether tests should run on Azure DevOps (either Windows or Linux); always false, if RunOnAzdoHelix=true; computed.
+        - RunOnAzdoCIWindows:          indicates whether tests should run on Windows in Azure DevOps; default is true; overridable.
+        - RunOnAzdoCILinux:            indicates whether tests should run on Linux in Azure DevOps; default is true; overridable.
+        - RunOnAzdoHelix:              indicates whether tests should run on Helix (either Windows or Linux); computed.
+        - RunOnAzdoHelixWindows:       indicates whether tests should run on Windows in Helix; default is true; overridable.
+        - RunOnAzdoHelixLinux:         indicates whether tests should run on Linux in Helix; default is true; overridable.
+    -->
+
+  <PropertyGroup>
+    <!-- See https://docs.github.com/actions/writing-workflows/choosing-what-your-workflow-does/store-information-in-variables#default-environment-variables -->
+    <IsGitHubActionsRunner Condition=" '$(GITHUB_ACTIONS)' == 'true' ">true</IsGitHubActionsRunner>
+
+    <!-- See https://learn.microsoft.com/azure/devops/pipelines/build/variables#system-variables -->
+    <IsAzdoCIRunner Condition=" '$(SYSTEM_TEAMPROJECT)' != '' ">true</IsAzdoCIRunner>
+
+    <IsAzdoHelixRunner Condition=" '$(PrepareForHelix)' == 'true' ">true</IsAzdoHelixRunner>
+  </PropertyGroup>
+
+  <PropertyGroup>
+    <RunOnGithubActions>false</RunOnGithubActions>
+    <RunOnGithubActions Condition=" '$(RunOnGithubActionsWindows)' == 'true' or '$(RunOnGithubActionsLinux)' == 'true' ">true</RunOnGithubActions>
path: eng/Testing.targets
user: login: RussKie
body: After a third look and two cups of tea later, I see the issue now. Thank you for pointing it out.
`SkipTests` should be OS-aware, so that we don't run a test on Windows, if the test project declared it couldn't be run on Windows. This is getting fixed in #8687.
created_at: 2025-04-10T02:41:37Z
author_association: CONTRIBUTOR

PR comments:
user: login: radical
created_at: 2025-04-04T02:36:20Z
body: We should also run a Azdo build to check that nothing breaks.
author_association: MEMBER
user: login: RussKie
created_at: 2025-04-08T01:40:35Z
body: > Is the azdo build for this looking good too?

Yes, both a PR and a full manual build
author_association: CONTRIBUTOR
user: login: radical
created_at: 2025-04-08T04:39:12Z
body: Waiting on an outerloop tests run for this - https://github.com/dotnet/aspire/actions/runs/14324978740/job/40148735516
author_association: MEMBER