From 833abe9d3c31d6a9aec58101e7d9af9d104b44eb Mon Sep 17 00:00:00 2001 From: Keith Mahoney Date: Thu, 20 Jun 2019 16:30:07 -0700 Subject: [PATCH 1/4] Add BuildId param to CreateTestBinariesDirFromLocalBuild.ps1 --- CreateTestBinariesDirFromLocalBuild.ps1 | 140 ++++++++++++++++++------ RunTestsOnTShellConnectedDevice.ps1 | 3 +- build/Helix/PrepareHelixPayload.ps1 | 4 +- 3 files changed, 111 insertions(+), 36 deletions(-) diff --git a/CreateTestBinariesDirFromLocalBuild.ps1 b/CreateTestBinariesDirFromLocalBuild.ps1 index a6e05cafde..0e7a97ec3e 100644 --- a/CreateTestBinariesDirFromLocalBuild.ps1 +++ b/CreateTestBinariesDirFromLocalBuild.ps1 @@ -1,11 +1,24 @@ [CmdletBinding()] param( - [switch]$NoBuild, - [switch]$Release, [String]$Flavor = "Debug", - [String]$Platform = "x86" + [String]$Platform = "x86", + [switch]$NoBuild, + [switch]$NugetPkgTests, + [switch]$FrameworkPkgTests, + [String]$BuildId ) +if($NugetPkgTests -and $FrameworkPkgTests) +{ + Write-Error "-NugetPkgTests and -FrameworkPkgTests are mutually exclusive" + exit 1 +} +if(!$BuildId -and $FrameworkPkgTests) +{ + Write-Error "-FrameworkPkgTests is only valid when using a -BuildId. Use -NugetPkgTests for testing locally." + exit 1 +} + function DoesTaefAppXNeedBuild { param( @@ -60,8 +73,15 @@ function DoesAppXNeedBuild } } +function New-TemporaryDirectory { + $parent = [System.IO.Path]::GetTempPath() + $name = [System.IO.Path]::GetRandomFileName() + New-Item -ItemType Directory -Path (Join-Path $parent $name) +} + # Clean up artifacts and HelixPayload directories: +$artifactsDir = "$PSScriptRoot\Artifacts" $artifactsDropDir = "$PSScriptRoot\Artifacts\drop" $helixpayloadDir = "$PSScriptRoot\HelixPayload\$Flavor\$Platform" if(Test-Path $artifactsDropDir) @@ -74,47 +94,101 @@ if(Test-Path $helixpayloadDir) Remove-Item $helixpayloadDir -Force -Recurse } -# Determine if we need to build the test binaries: -$muxDllFile = Get-Item "$PSScriptRoot\BuildOutput\$Flavor\$Platform\Microsoft.UI.Xaml\Microsoft.UI.Xaml.dll" +if($BuildId) +{ + $artifactName = "drop" + if($NugetPkgTests) + { + $artifactName = "NugetPkgTestsDrop" + } + elseif($FrameworkPkgTests) + { + $artifactName = "FrameworkPkgTestsDrop" + } + + $tempDir = New-TemporaryDirectory + $tempDirPath = $tempDir.FullName -$shouldBuild = $false; -$buildCmd = ""; -if(!$Release) -{ - $shouldBuild = $shouldBuild -Or (DoesTaefAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "MUXControlsTestApp" -Platform $Platform -Flavor $Flavor) - $shouldBuild = $shouldBuild -Or (DoesTaefAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "IXMPTestApp" -Platform $Platform -Flavor $Flavor) - $shouldBuild = $shouldBuild -Or (DoesAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "MUXControlsTestAppWPFPackage" -Platform $Platform -Flavor $Flavor -AppXPath "MUXControlsTestAppWPFPackage\AppPackages\MUXControlsTestAppWPFPackage_Test\MUXControlsTestAppWPFPackage.appx" -ExePath "MUXControlsTestAppWPF\MUXControlsTestAppWPF.exe" -ProjectPath "MUXControlsTestAppWPFPackage\MUXControlsTestAppWPFPackage.wapproj") - if($shouldBuild) + $downloadFileName = $artifactName + ".zip" + $downloadFilePath = Join-Path $tempDirPath $downloadFileName + + $dropData = Invoke-RestMethod -Uri "https://dev.azure.com/ms/microsoft-ui-xaml/_apis/build/builds/$buildId/artifacts?artifactName=$artifactName&api-version=4.1" -Method Get + + # Invoke-WebRequest is orders of magnitude slower when the progress indicator is being displayed. So temporarily disable it. + $ProgressPreferenceOld = $ProgressPreference + $ProgressPreference = "SilentlyContinue" + try + { + Write-Host "Downloading '$downloadFileName'. Please wait, this will take a few moments..." + Invoke-WebRequest -Uri $dropData.resource.downloadUrl -OutFile $downloadFilePath + } + finally { - $buildCmd = "$PSScriptRoot\build.cmd $($Platform.ToLower()) $($Flavor.ToLower()) /target test\MUXControlsTestApp\MUXControlsTestApp_TAEF:Publish /target test\IXMPTestApp\IXMPTestApp_TAEF:Publish /target test\MUXControlsTestAppWPF\MUXControlsTestAppWPFPackage:Publish" + $ProgressPreference = $ProgressPreferenceOld } + + Write-Host "Done!" + Write-Host "Downloaded file to $downloadFilePath" + + Write-Host "Extracting files to $artifactsDir" + Expand-Archive -Path $downloadFilePath -DestinationPath $artifactsDir + + & .\Tools\NugetWrapper.cmd restore build\Helix\packages.config -PackagesDirectory build\Helix\packages + & .\build\Helix\PrepareHelixPayload.ps1 -Platform $Platform -Configuration $Flavor -ArtifactName $artifactName + + Write-Verbose "Removing temp dir '$tempDirPath'" + Remove-Item -Force -Recurse $tempDirPath + + Write-Host "" + Write-Host "Test binaries dir created in $helixpayloadDir" } else { - $shouldBuild = $shouldBuild -Or (DoesAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "NugetPackageTestApp" -Platform $Platform -Flavor $Flavor -AppXPath "NugetPackageTestApp\AppPackages\NugetPackageTestApp_Test\NugetPackageTestApp.appx" -ExePath "NugetPackageTestApp\NugetPackageTestApp.exe" -ProjectPath "MUXControlsReleaseTest\NugetPackageTestApp\NugetPackageTestApp.csproj") - $shouldBuild = $shouldBuild -Or (DoesAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "NugetPackageTestAppCX" -Platform $Platform -Flavor $Flavor -AppXPath "NugetPackageTestAppCX\AppPackages\NugetPackageTestAppCX_Test\NugetPackageTestAppCX.appx" -ExePath "NugetPackageTestAppCX\NugetPackageTestAppCX.exe" -ProjectPath "MUXControlsReleaseTest\NugetPackageTestAppCX\NugetPackageTestAppCX.csproj") - if($shouldBuild) - { - $buildCmd = "$PSScriptRoot\build.cmd $($Platform.ToLower()) $($Flavor.ToLower()) /project D:\microsoft-ui-xaml\test\MUXControlsReleaseTest\MUXControlsReleaseTest.sln" + Write-Host "Creating test binaries dir from local build." + + # Determine if we need to build the test binaries: + $muxDllFile = Get-Item "$PSScriptRoot\BuildOutput\$Flavor\$Platform\Microsoft.UI.Xaml\Microsoft.UI.Xaml.dll" + + $shouldBuild = $false; + $buildCmd = ""; + if(!$NugetPkgTests) + { + $shouldBuild = $shouldBuild -Or (DoesTaefAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "MUXControlsTestApp" -Platform $Platform -Flavor $Flavor) + $shouldBuild = $shouldBuild -Or (DoesTaefAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "IXMPTestApp" -Platform $Platform -Flavor $Flavor) + $shouldBuild = $shouldBuild -Or (DoesAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "MUXControlsTestAppWPFPackage" -Platform $Platform -Flavor $Flavor -AppXPath "MUXControlsTestAppWPFPackage\AppPackages\MUXControlsTestAppWPFPackage_Test\MUXControlsTestAppWPFPackage.appx" -ExePath "MUXControlsTestAppWPF\MUXControlsTestAppWPF.exe" -ProjectPath "MUXControlsTestAppWPFPackage\MUXControlsTestAppWPFPackage.wapproj") + if($shouldBuild) + { + $buildCmd = "$PSScriptRoot\build.cmd $($Platform.ToLower()) $($Flavor.ToLower()) /target test\MUXControlsTestApp\MUXControlsTestApp_TAEF:Publish /target test\IXMPTestApp\IXMPTestApp_TAEF:Publish /target test\MUXControlsTestAppWPF\MUXControlsTestAppWPFPackage:Publish" + } } -} - -if($shouldBuild) -{ - if(!$NoBuild) + else { - Write-Host $buildCmd - Invoke-Expression $buildCmd + $shouldBuild = $shouldBuild -Or (DoesAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "NugetPackageTestApp" -Platform $Platform -Flavor $Flavor -AppXPath "NugetPackageTestApp\AppPackages\NugetPackageTestApp_Test\NugetPackageTestApp.appx" -ExePath "NugetPackageTestApp\NugetPackageTestApp.exe" -ProjectPath "MUXControlsReleaseTest\NugetPackageTestApp\NugetPackageTestApp.csproj") + $shouldBuild = $shouldBuild -Or (DoesAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "NugetPackageTestAppCX" -Platform $Platform -Flavor $Flavor -AppXPath "NugetPackageTestAppCX\AppPackages\NugetPackageTestAppCX_Test\NugetPackageTestAppCX.appx" -ExePath "NugetPackageTestAppCX\NugetPackageTestAppCX.exe" -ProjectPath "MUXControlsReleaseTest\NugetPackageTestAppCX\NugetPackageTestAppCX.csproj") + if($shouldBuild) + { + $buildCmd = "$PSScriptRoot\build.cmd $($Platform.ToLower()) $($Flavor.ToLower()) /project D:\microsoft-ui-xaml\test\MUXControlsReleaseTest\MUXControlsReleaseTest.sln" + } } - else + + if($shouldBuild) { - Write-Warning "Test binaries are out of date, but -NoBuild flag was specified so skipping build" + if(!$NoBuild) + { + Write-Host $buildCmd + Invoke-Expression $buildCmd + } + else + { + Write-Warning "Test binaries are out of date, but -NoBuild flag was specified so skipping build" + } } -} -& .\build\CopyFilesToStagingDir.ps1 -BuildOutputDir "$PSScriptRoot\BuildOutput\" -PublishDir $artifactsDropDir -Platform $Platform -Configuration $Flavor -PublishAppxFiles -& .\Tools\NugetWrapper.cmd restore build\Helix\packages.config -PackagesDirectory build\Helix\packages -& .\build\Helix\PrepareHelixPayload.ps1 -Platform $Platform -Configuration $Flavor + & .\build\CopyFilesToStagingDir.ps1 -BuildOutputDir "$PSScriptRoot\BuildOutput\" -PublishDir $artifactsDropDir -Platform $Platform -Configuration $Flavor -PublishAppxFiles + & .\Tools\NugetWrapper.cmd restore build\Helix\packages.config -PackagesDirectory build\Helix\packages + & .\build\Helix\PrepareHelixPayload.ps1 -Platform $Platform -Configuration $Flavor -Write-Host "Test binaries dir created in $helixpayloadDir" \ No newline at end of file + Write-Host "" + Write-Host "Test binaries dir created in $helixpayloadDir" +} diff --git a/RunTestsOnTShellConnectedDevice.ps1 b/RunTestsOnTShellConnectedDevice.ps1 index 079b962bbb..1f09fdfc0f 100644 --- a/RunTestsOnTShellConnectedDevice.ps1 +++ b/RunTestsOnTShellConnectedDevice.ps1 @@ -45,7 +45,8 @@ $ignoredOutput = cmdd if not exist $deviceDir mkdir $deviceDir if(!$NoDeploy) { - & .\CreateTestBinariesDirFromLocalBuild.ps1 -NoBuild:$NoBuild -Release:$Release -Flavor:$Flavor -Platform:$Platform + + & .\CreateTestBinariesDirFromBuild.ps1 -NoBuild:$NoBuild -NugetPkgTests:$Release -Flavor:$Flavor -Platform:$Platform } diff --git a/build/Helix/PrepareHelixPayload.ps1 b/build/Helix/PrepareHelixPayload.ps1 index ef363828e4..614144ff73 100644 --- a/build/Helix/PrepareHelixPayload.ps1 +++ b/build/Helix/PrepareHelixPayload.ps1 @@ -21,8 +21,6 @@ New-Item -ItemType Directory -Force -Path $payloadDir Copy-Item "$nugetPackagesDir\microsoft.windows.apps.test.1.0.181203002\lib\netcoreapp2.1\*.dll" $payloadDir Copy-Item "$nugetPackagesDir\taef.redist.wlk.10.31.180822002\build\Binaries\$Platform\*" $payloadDir Copy-Item "$nugetPackagesDir\taef.redist.wlk.10.31.180822002\build\Binaries\$Platform\CoreClr\*" $payloadDir -Copy-Item "$nugetPackagesDir\runtime.win-$Platform.microsoft.netcore.app.2.1.0\runtimes\win-$Platform\lib\netcoreapp2.1\*" $payloadDir -Copy-Item "$nugetPackagesDir\runtime.win-$Platform.microsoft.netcore.app.2.1.0\runtimes\win-$Platform\native\*" $payloadDir New-Item -ItemType Directory -Force -Path "$payloadDir\.NETCoreApp2.1\" Copy-Item "$nugetPackagesDir\runtime.win-$Platform.microsoft.netcore.app.2.1.0\runtimes\win-$Platform\lib\netcoreapp2.1\*" "$payloadDir\.NETCoreApp2.1\" Copy-Item "$nugetPackagesDir\runtime.win-$Platform.microsoft.netcore.app.2.1.0\runtimes\win-$Platform\native\*" "$payloadDir\.NETCoreApp2.1\" @@ -49,12 +47,14 @@ Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\ Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\MUXControlsTestApp_Test\Dependencies\$Platform\*" $payloadDir Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\IXMPTestApp_Test\*" $payloadDir Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\IXMPTestApp_Test\Dependencies\$Platform\*" $payloadDir + # NuGet test artifacts Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\Test\MUXControls.ReleaseTest.dll" $payloadDir Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\NugetPackageTestApp_Test\*" $payloadDir Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\NugetPackageTestApp_Test\Dependencies\$Platform\*" $payloadDir Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\NugetPackageTestAppCX_Test\*" $payloadDir Copy-If-Exists "$repoDirectory\Artifacts\$ArtifactName\$Configuration\$Platform\AppxPackages\NugetPackageTestAppCX_Test\Dependencies\$Platform\*" $payloadDir + # Copy files from the repo New-Item -ItemType Directory -Force -Path "$payloadDir\scripts" Copy-Item "build\helix\ConvertWttLogToXUnit.ps1" "$payloadDir\scripts" From 27756900cf81243847264cf38562b51f77fefb3b Mon Sep 17 00:00:00 2001 From: Keith Mahoney Date: Fri, 21 Jun 2019 10:18:57 -0700 Subject: [PATCH 2/4] rename CreateTestBinariesDirFromLocalBuild.ps1 to CreateTestBinariesDirFromBuild.ps1 --- ...iesDirFromLocalBuild.ps1 => CreateTestBinariesDirFromBuild.ps1 | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename CreateTestBinariesDirFromLocalBuild.ps1 => CreateTestBinariesDirFromBuild.ps1 (100%) diff --git a/CreateTestBinariesDirFromLocalBuild.ps1 b/CreateTestBinariesDirFromBuild.ps1 similarity index 100% rename from CreateTestBinariesDirFromLocalBuild.ps1 rename to CreateTestBinariesDirFromBuild.ps1 From 9e30b8f26f7d66fbac7f7aaf0907fb066b7fe0fd Mon Sep 17 00:00:00 2001 From: Keith Mahoney Date: Fri, 21 Jun 2019 10:34:08 -0700 Subject: [PATCH 3/4] Fix ShouldSkipPRBuild.ps1 to handle deleted/renamed files --- build/ShouldSkipPRBuild.ps1 | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/ShouldSkipPRBuild.ps1 b/build/ShouldSkipPRBuild.ps1 index 6222aa21e1..6d8e8efff6 100644 --- a/build/ShouldSkipPRBuild.ps1 +++ b/build/ShouldSkipPRBuild.ps1 @@ -11,7 +11,7 @@ function AllChangedFilesAreSkippable foreach($file in $files) { Write-Host "Checking '$file'" - $ext = (Get-Item $file).Extension + $ext = [System.IO.Path]::GetExtension($file) $fileIsSkippable = $ext -in $skipExts Write-Host "File '$file' is skippable: '$fileIsSkippable'" From 7301b037b386ee70c7d910f70934445106f09342 Mon Sep 17 00:00:00 2001 From: Keith Mahoney Date: Fri, 21 Jun 2019 15:24:17 -0700 Subject: [PATCH 4/4] CR Feedback --- CreateTestBinariesDirFromBuild.ps1 | 27 ++++++++++++++------------- RunTestsOnTShellConnectedDevice.ps1 | 8 ++++++-- 2 files changed, 20 insertions(+), 15 deletions(-) diff --git a/CreateTestBinariesDirFromBuild.ps1 b/CreateTestBinariesDirFromBuild.ps1 index 0e7a97ec3e..6244ca78a4 100644 --- a/CreateTestBinariesDirFromBuild.ps1 +++ b/CreateTestBinariesDirFromBuild.ps1 @@ -3,19 +3,14 @@ param( [String]$Flavor = "Debug", [String]$Platform = "x86", [switch]$NoBuild, - [switch]$NugetPkgTests, - [switch]$FrameworkPkgTests, - [String]$BuildId + [String]$BuildId, + [ValidateSet("DevTest", "NugetPkgTests", "FrameworkPkgTests")] + [string]$TestSuite = "DevTest" ) -if($NugetPkgTests -and $FrameworkPkgTests) +if(!$BuildId -and $TestSuite -eq "FrameworkPkgTests") { - Write-Error "-NugetPkgTests and -FrameworkPkgTests are mutually exclusive" - exit 1 -} -if(!$BuildId -and $FrameworkPkgTests) -{ - Write-Error "-FrameworkPkgTests is only valid when using a -BuildId. Use -NugetPkgTests for testing locally." + Write-Error "-TestSuite='FrameworkPkgTests' is only valid when using a -BuildId. Use -TestSuite='NugetPkgTests' for testing locally." exit 1 } @@ -97,15 +92,21 @@ if(Test-Path $helixpayloadDir) if($BuildId) { $artifactName = "drop" - if($NugetPkgTests) + if($TestSuite -eq "NugetPkgTests") { $artifactName = "NugetPkgTestsDrop" } - elseif($FrameworkPkgTests) + elseif($TestSuite -eq "FrameworkPkgTests") { $artifactName = "FrameworkPkgTestsDrop" } + $artifactTargetDir = "$artifactsDir\$artifactName" + if(Test-Path $artifactTargetDir) + { + Remove-Item $artifactTargetDir -Force -Recurse + } + $tempDir = New-TemporaryDirectory $tempDirPath = $tempDir.FullName @@ -151,7 +152,7 @@ else $shouldBuild = $false; $buildCmd = ""; - if(!$NugetPkgTests) + if($TestSuite -eq "DevTest") { $shouldBuild = $shouldBuild -Or (DoesTaefAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "MUXControlsTestApp" -Platform $Platform -Flavor $Flavor) $shouldBuild = $shouldBuild -Or (DoesTaefAppXNeedBuild -MuxDllFile $muxDllFile -ProjectName "IXMPTestApp" -Platform $Platform -Flavor $Flavor) diff --git a/RunTestsOnTShellConnectedDevice.ps1 b/RunTestsOnTShellConnectedDevice.ps1 index 1f09fdfc0f..f922fd9951 100644 --- a/RunTestsOnTShellConnectedDevice.ps1 +++ b/RunTestsOnTShellConnectedDevice.ps1 @@ -45,8 +45,12 @@ $ignoredOutput = cmdd if not exist $deviceDir mkdir $deviceDir if(!$NoDeploy) { - - & .\CreateTestBinariesDirFromBuild.ps1 -NoBuild:$NoBuild -NugetPkgTests:$Release -Flavor:$Flavor -Platform:$Platform + $testSuite = "DevTest" + if($Release) + { + $testSuite = "NugetPkgTests" + } + & .\CreateTestBinariesDirFromBuild.ps1 -NoBuild:$NoBuild -TestSuite:$testSuite -Flavor:$Flavor -Platform:$Platform }