From d2ecf34e4bc92c7e2ca52b67cb04570de1e91b37 Mon Sep 17 00:00:00 2001 From: max-ieremenko <> Date: Sat, 22 Nov 2025 16:33:53 +0100 Subject: [PATCH] smoke tests --- Build/build-tasks.ps1 | 12 +++++- Build/scripts/Test-CmdTool.ps1 | 19 +++++++++ Build/scripts/Test-SdkTool.ps1 | 31 +++++++++++++++ Build/tasks/tool-test.ps1 | 71 ++++++++++++++++++++++++++++++++++ 4 files changed, 132 insertions(+), 1 deletion(-) create mode 100644 Build/scripts/Test-CmdTool.ps1 create mode 100644 Build/scripts/Test-SdkTool.ps1 create mode 100644 Build/tasks/tool-test.ps1 diff --git a/Build/build-tasks.ps1 b/Build/build-tasks.ps1 index 8b7e71c..225d064 100644 --- a/Build/build-tasks.ps1 +++ b/Build/build-tasks.ps1 @@ -5,7 +5,7 @@ param ( $GithubToken ) -task LocalBuild Initialize, Clean, CiBuild, PsCoreTest, UpdateExamples +task LocalBuild Initialize, Clean, CiBuild, PsCoreTest, ToolTest, UpdateExamples task CiBuild Build, ThirdPartyNotices, UnitTest, Pack task Pack PackGlobalTool, PackPowerShellModule, PackManualDownload, PackTest @@ -160,4 +160,14 @@ task UpdateExamples { } Build-Parallel $builds -ShowParameter ExamplePath -MaximumBuilds 1 +} + +task ToolTest { + $builds = @() + foreach ($framework in $settings.frameworks) { + $builds += @{ File = 'tasks/tool-test.ps1'; BinPath = $settings.output; Framework = $framework; ToolType = 'cmd'; ToolVersion = $settings.version } + $builds += @{ File = 'tasks/tool-test.ps1'; BinPath = $settings.output; Framework = $framework; ToolType = 'sdk'; ToolVersion = $settings.version } + } + + Build-Parallel $builds -ShowParameter Framework, ToolType -MaximumBuilds 3 } \ No newline at end of file diff --git a/Build/scripts/Test-CmdTool.ps1 b/Build/scripts/Test-CmdTool.ps1 new file mode 100644 index 0000000..50dab49 --- /dev/null +++ b/Build/scripts/Test-CmdTool.ps1 @@ -0,0 +1,19 @@ +[CmdletBinding()] +param ( + [Parameter(Mandatory = $true)] + [ValidateScript({ Test-Path $_ })] + [string] + $Path +) + +$ErrorActionPreference = 'Stop' +$ProgressPreference = 'SilentlyContinue' +Set-StrictMode -Version Latest + +$tmp = 'ThirdPartyLibraries' +Expand-Archive -Path $Path -DestinationPath $tmp + +dotnet "$tmp/ThirdPartyLibraries.dll" +if ($LASTEXITCODE) { + throw 'dotnet ThirdPartyLibraries.dll failed.' +} diff --git a/Build/scripts/Test-SdkTool.ps1 b/Build/scripts/Test-SdkTool.ps1 new file mode 100644 index 0000000..b0b467b --- /dev/null +++ b/Build/scripts/Test-SdkTool.ps1 @@ -0,0 +1,31 @@ +[CmdletBinding()] +param ( + [Parameter(Mandatory = $true)] + [ValidateScript({ Test-Path $_ })] + [string] + $Source, + + [Parameter(Mandatory)] + [string] + $Version +) + +$ErrorActionPreference = 'Stop' +$ProgressPreference = 'SilentlyContinue' +Set-StrictMode -Version Latest + +dotnet tool install ` + --local ` + --create-manifest-if-needed ` + --version $Version ` + --add-source $Source ` + --verbosity quiet ` + ThirdPartyLibraries.GlobalTool +if ($LASTEXITCODE) { + throw 'dotnet tool install failed.' +} + +dotnet ThirdPartyLibraries +if ($LASTEXITCODE) { + throw 'dotnet ThirdPartyLibraries failed.' +} diff --git a/Build/tasks/tool-test.ps1 b/Build/tasks/tool-test.ps1 new file mode 100644 index 0000000..18c09c9 --- /dev/null +++ b/Build/tasks/tool-test.ps1 @@ -0,0 +1,71 @@ +[CmdletBinding()] +param ( + [Parameter(Mandatory)] + [ValidateScript({ Test-Path $_ })] + [string] + $BinPath, + + [Parameter(Mandatory)] + [ValidateSet('net8.0', 'net9.0', 'net10.0')] + [string] + $Framework, + + [Parameter(Mandatory)] + [ValidateSet('sdk', 'cmd')] + [string] + $ToolType, + + [Parameter(Mandatory)] + [string] + $ToolVersion +) + +task . Pull, TestDotNet, TestCmd + +Enter-Build { + $sdkImage = $( + $version = $Framework.TrimStart('net') + "mcr.microsoft.com/dotnet/sdk:$version" + ) +} + +task Pull { + exec { + docker pull --quiet $sdkImage + } +} + +task TestDotNet -If ($ToolType -eq 'sdk') { + $scripts = Join-Path $PSScriptRoot '../scripts' + + exec { + docker run ` + -it ` + --rm ` + --entrypoint pwsh ` + -v "$($scripts):/app/scripts" ` + -v "$($BinPath):/app/bin" ` + --workdir '/tmp' ` + $sdkImage ` + '/app/scripts/Test-SdkTool.ps1' ` + -Version $ToolVersion ` + -Source '/app/bin' + } +} + +task TestCmd -If ($ToolType -eq 'cmd') { + $scripts = Join-Path $PSScriptRoot '../scripts' + + exec { + docker run ` + -it ` + --rm ` + --entrypoint pwsh ` + -v "$($scripts):/app/scripts" ` + -v "$($BinPath):/app/bin" ` + --workdir '/tmp' ` + $sdkImage ` + '/app/scripts/Test-CmdTool.ps1' ` + -Path "/app/bin/ThirdPartyLibraries.$ToolVersion-$Framework.zip" + } +} \ No newline at end of file