diff --git a/azure-pipelines.yml b/azure-pipelines.yml index a80ead0d75..478c10289a 100644 --- a/azure-pipelines.yml +++ b/azure-pipelines.yml @@ -170,6 +170,34 @@ stages: ArtifactName: TestResults_Windows_$(_BuildConfig) condition: failed() + - job: WindowsSamples + timeoutInMinutes: 30 + pool: + name: NetCore-Public + demands: ImageOverride -equals windows.vs2022preview.amd64.open + strategy: + matrix: + Release: + _BuildConfig: Release + Debug: + _BuildConfig: Debug + steps: + - task: PowerShell@2 + displayName: 'Install Windows SDK' + inputs: + targetType: filePath + filePath: './eng/install-windows-sdk.ps1' + failOnStderr: true + showWarnings: true + + - task: PowerShell@2 + displayName: 'Build Samples' + inputs: + targetType: filePath + filePath: './eng/build-samples.ps1' + arguments: '-Configuration $(_BuildConfig)' + failOnStderr: false + - job: Linux timeoutInMinutes: 90 pool: diff --git a/eng/build-samples.ps1 b/eng/build-samples.ps1 new file mode 100755 index 0000000000..838fc153ee --- /dev/null +++ b/eng/build-samples.ps1 @@ -0,0 +1,96 @@ +#!/usr/bin/env pwsh +<# +.SYNOPSIS + Builds all sample projects in the samples/public folder. + +.DESCRIPTION + This script iterates through all solution files in samples/public and builds them. + It can be used both locally by developers and in CI pipelines. + +.PARAMETER Configuration + The build configuration to use (default: Release). + +.PARAMETER TreatWarningsAsErrors + Whether to treat warnings as errors (default: false). + +.EXAMPLE + .\eng\build-samples.ps1 + Builds all samples in Release configuration. + +.EXAMPLE + .\eng\build-samples.ps1 -Configuration Debug + Builds all samples in Debug configuration. +#> + +[CmdletBinding()] +param( + [string]$Configuration = "Release", + [switch]$TreatWarningsAsErrors +) + +Set-StrictMode -Version Latest +$ErrorActionPreference = "Stop" + +$repoRoot = Split-Path -Parent $PSScriptRoot +$samplesFolder = "$repoRoot/samples/public" + +# Source the arcade tools to get access to InitializeDotNetCli +. "$PSScriptRoot/common/tools.ps1" + +# Initialize .NET CLI to ensure correct SDK version is available +$dotnetRoot = InitializeDotNetCli -install:$true +$dotnetPath = "$dotnetRoot/dotnet.exe" + +Write-Host "Building samples in: $samplesFolder" +Write-Host "Configuration: $Configuration" +Write-Host "" + +$failed = $false +$successCount = 0 +$failureCount = 0 + +# Find all solution files in samples/public +$solutions = Get-ChildItem -Path $samplesFolder -Filter "*.sln" -Recurse + +# Exclude RunnerVsVSTest.sln as it's too slow for CI +$solutions = $solutions | Where-Object { $_.Name -ne "RunnerVsVSTest.sln" } + +foreach ($solution in $solutions) { + Write-Host "Building solution: $($solution.FullName)" + + $buildArgs = @( + "build", + $solution.FullName, + "--configuration", $Configuration, + "/p:TreatWarningsAsErrors=$TreatWarningsAsErrors" + ) + + & $dotnetPath $buildArgs + + if ($LASTEXITCODE -ne 0) { + Write-Host "ERROR: Failed to build $($solution.Name)" + $failed = $true + $failureCount++ + } + else { + Write-Host "SUCCESS: Built $($solution.Name)" + $successCount++ + } + + Write-Host "" +} + +Write-Host "========================================" +Write-Host "Build Summary:" +Write-Host " Total solutions: $($solutions.Count)" +Write-Host " Succeeded: $successCount" +Write-Host " Failed: $failureCount" +Write-Host "========================================" + +if ($failed) { + Write-Host "One or more samples failed to build" + exit 1 +} + +Write-Host "All samples built successfully!" +exit 0 diff --git a/samples/public/mstest-runner/Simple1/Simple1.sln b/samples/public/mstest-runner/Simple1/Simple1.sln new file mode 100644 index 0000000000..09a5e60fe6 --- /dev/null +++ b/samples/public/mstest-runner/Simple1/Simple1.sln @@ -0,0 +1,22 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "Simple1", "Simple1.csproj", "{2AE4FD73-ECFB-4AB0-A02D-A1863750C012}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {2AE4FD73-ECFB-4AB0-A02D-A1863750C012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {2AE4FD73-ECFB-4AB0-A02D-A1863750C012}.Debug|Any CPU.Build.0 = Debug|Any CPU + {2AE4FD73-ECFB-4AB0-A02D-A1863750C012}.Release|Any CPU.ActiveCfg = Release|Any CPU + {2AE4FD73-ECFB-4AB0-A02D-A1863750C012}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection +EndGlobal diff --git a/samples/public/mstest-runner/runner_vs_vstest/RunnerVsVSTest.sln b/samples/public/mstest-runner/runner_vs_vstest/RunnerVsVSTest.sln new file mode 100644 index 0000000000..2d3a375a4e --- /dev/null +++ b/samples/public/mstest-runner/runner_vs_vstest/RunnerVsVSTest.sln @@ -0,0 +1,69 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31903.59 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "10C_100M", "10C_100M", "{409754A0-EACE-40B2-6272-539A6337F573}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "10C100M", "10C_100M\10C100M.csproj", "{53174F83-E486-480A-A8C5-2C281A3E8215}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "100C100M", "100C_100M\100C100M.csproj", "{C6DEC71F-D6AB-4D01-9800-E375F0D58C07}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "1000C100M", "1000C_100M\1000C100M.csproj", "{A73ABB71-CDBC-4789-AAEA-629B8A9BA514}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Debug|x64 = Debug|x64 + Debug|x86 = Debug|x86 + Release|Any CPU = Release|Any CPU + Release|x64 = Release|x64 + Release|x86 = Release|x86 + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {53174F83-E486-480A-A8C5-2C281A3E8215}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Debug|Any CPU.Build.0 = Debug|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Debug|x64.ActiveCfg = Debug|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Debug|x64.Build.0 = Debug|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Debug|x86.ActiveCfg = Debug|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Debug|x86.Build.0 = Debug|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Release|Any CPU.ActiveCfg = Release|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Release|Any CPU.Build.0 = Release|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Release|x64.ActiveCfg = Release|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Release|x64.Build.0 = Release|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Release|x86.ActiveCfg = Release|Any CPU + {53174F83-E486-480A-A8C5-2C281A3E8215}.Release|x86.Build.0 = Release|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Debug|Any CPU.Build.0 = Debug|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Debug|x64.ActiveCfg = Debug|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Debug|x64.Build.0 = Debug|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Debug|x86.ActiveCfg = Debug|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Debug|x86.Build.0 = Debug|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Release|Any CPU.ActiveCfg = Release|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Release|Any CPU.Build.0 = Release|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Release|x64.ActiveCfg = Release|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Release|x64.Build.0 = Release|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Release|x86.ActiveCfg = Release|Any CPU + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07}.Release|x86.Build.0 = Release|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Debug|Any CPU.Build.0 = Debug|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Debug|x64.ActiveCfg = Debug|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Debug|x64.Build.0 = Debug|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Debug|x86.ActiveCfg = Debug|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Debug|x86.Build.0 = Debug|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Release|Any CPU.ActiveCfg = Release|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Release|Any CPU.Build.0 = Release|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Release|x64.ActiveCfg = Release|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Release|x64.Build.0 = Release|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Release|x86.ActiveCfg = Release|Any CPU + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514}.Release|x86.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(NestedProjects) = preSolution + {53174F83-E486-480A-A8C5-2C281A3E8215} = {409754A0-EACE-40B2-6272-539A6337F573} + {C6DEC71F-D6AB-4D01-9800-E375F0D58C07} = {409754A0-EACE-40B2-6272-539A6337F573} + {A73ABB71-CDBC-4789-AAEA-629B8A9BA514} = {409754A0-EACE-40B2-6272-539A6337F573} + EndGlobalSection +EndGlobal