Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
35 commits
Select commit Hold shift + click to select a range
1bc77ea
Add dynamic runtimesettings (#8341)
bschnurr Dec 3, 2025
5f28f04
update ComponentBuildUnderTest
bschnurr Dec 4, 2025
e1ac46b
try uploading test data to azure artifacts
bschnurr Dec 4, 2025
25176ca
disable codeql if not commit in main or release
bschnurr Dec 4, 2025
039f680
faster checkout
bschnurr Dec 4, 2025
8f97614
try to skip signing when building installer
bschnurr Dec 4, 2025
4971b21
disable sbom
bschnurr Dec 4, 2025
80f7ce5
add persistCredentials: true
bschnurr Dec 4, 2025
ec63b1c
move testdata to its own job for faster testing
bschnurr Dec 4, 2025
cd09e07
Update azure-pipelines.yml for Azure Pipelines
bschnurr Dec 4, 2025
f1b8425
try adding a container name and pat flag
bschnurr Dec 5, 2025
2118765
Merge branch 'test-gate' of https://github.com/microsoft/PTVS into te…
bschnurr Dec 5, 2025
0294244
remove slash in buildNumber
bschnurr Dec 5, 2025
122e6e0
try folder
bschnurr Dec 5, 2025
118a128
add display name
bschnurr Dec 5, 2025
aa05ad8
try using isProduction: false to disable sdl
bschnurr Dec 5, 2025
66bc70a
try to download testdata
bschnurr Dec 5, 2025
6e973d1
change location of artifact download
bschnurr Dec 5, 2025
78f7ca2
try runId with metadata name
bschnurr Dec 5, 2025
1d406ad
try sourceRunId
bschnurr Dec 5, 2025
b5cb564
try dropMetadataContainerBuild
bschnurr Dec 5, 2025
2ff23cb
remove usePat false.. we need a PAT
bschnurr Dec 5, 2025
30f2b94
remove commenrts
bschnurr Dec 5, 2025
1a4b42e
try uploading RunSettings
bschnurr Dec 6, 2025
d8e3359
just copy default.runsettings to the folder we are already uploading.…
bschnurr Dec 6, 2025
d0a770c
update Bootstrapper to artifacts
bschnurr Dec 8, 2025
821ce99
change to MicroBuild output folder
bschnurr Dec 8, 2025
95c5b9e
customize buildnumber for artifacts drop so that there is no conflict…
bschnurr Dec 9, 2025
36d0b00
try fixing buildNumber artifactsDrop
bschnurr Dec 9, 2025
b0ea872
try chanigng bootloader folder to match output folder of MicroBuildBu…
bschnurr Dec 9, 2025
f1181a9
try microbuild output with pipeline artifact
bschnurr Dec 9, 2025
d0a9f7d
download microbuildoutputs
bschnurr Dec 9, 2025
f7cac4c
try using artifactsDrop for MicroBuildOutputs
bschnurr Dec 9, 2025
7afbe8f
use pipelineartifact for now
bschnurr Dec 9, 2025
2923b84
update to new test machines
bschnurr Dec 10, 2025
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
149 changes: 149 additions & 0 deletions Build/azuredevops/test/uitest-integration-stage.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
parameters:
- name: BinariesDirectory
type: string
default: '$(Drop)/binaries'
- name: CleanupProcesses
type: string
default: 'devenv, vshub, microsoft.vshub.server.httphost, python, ipy, microsoft.pythontools.analyzer, vstest.executionengine.x86, vstest.discoveryengine.x86'
- name: Drop
type: string
default: '$(System.ArtifactsDirectory)/$(DefinitionName)'
- name: TestFilterCriteria
type: string
default: 'Priority=0'
- name: UITestNames
type: string
default: ''

steps:
- task: ExtractFiles@1
displayName: Extract files
condition: succeeded()
inputs:
archiveFilePatterns: '${{ parameters.Drop }}/TestData/TestData.zip'
destinationFolder: '${{ parameters.Drop }}/TestData'
cleanDestinationFolder: false
overwriteExistingFiles: false

- task: PowerShell@2
displayName: Cleanup
condition: succeeded()
continueOnError: true
timeoutInMinutes: 5
inputs:
targetType: inline
arguments: '${{ parameters.CleanupProcesses }}'
script: |
param ([string[]]$names)
$running = Get-Process -Name $names -ErrorAction SilentlyContinue
while ($running) {
Write-Host 'Killing:'
$running
try {
$running | Stop-Process -Force
} catch {
}
Start-Sleep -Seconds 3
$running = Get-Process -Name $names -ErrorAction SilentlyContinue
}
errorActionPreference: stop
failOnStderr: true

- task: CopyFiles@2
displayName: Copy TestData into binaries
condition: succeeded()
continueOnError: true
inputs:
SourceFolder: '${{ parameters.Drop }}/TestData'
Contents: '**'
TargetFolder: '${{ parameters.BinariesDirectory }}/TestData'
CleanTargetFolder: 'true'
OverWrite: 'false'
flattenFolders: 'false'
preserveTimestamp: 'false'
retryCount: '0'

- task: CopyFiles@2
displayName: Copy runsettings to binary folder
condition: succeeded()
inputs:
SourceFolder: '${{ parameters.BinariesDirectory }}/TestData'
Contents: 'default.runsettings'
TargetFolder: '${{ parameters.BinariesDirectory }}'
CleanTargetFolder: 'false'
OverWrite: 'false'
flattenFolders: 'false'
preserveTimestamp: 'false'
retryCount: '0'

- task: PowerShell@2
displayName: Skip Verification
condition: succeeded()
inputs:
targetType: inline
script: |
reg import "${{ parameters.BinariesDirectory }}\TestData\EnableSkipVerification.reg"
errorActionPreference: stop
failOnStderr: false

- task: VSTest@2
displayName: '[MultiConfiguration] Run UI Test ${{ parameters.UITestNames }}'
condition: succeeded()
continueOnError: true
inputs:
testSelector: testAssemblies
testAssemblyVer2: '${{ parameters.UITestNames }}UITestsRunner.dll'
tcmTestRun: '$(test.RunId)'
searchFolder: '${{ parameters.BinariesDirectory }}'
resultsFolder: '$(Agent.TempDirectory)/TestResults'
testFiltercriteria: '${{ parameters.TestFilterCriteria }}'
runOnlyImpactedTests: false
runAllTestsAfterXBuilds: 50
uiTests: true
vstestLocationMethod: version
vsTestVersion: latest
runSettingsFile: '${{ parameters.BinariesDirectory }}/default.runsettings'
overrideTestrunParameters: '-TargetFrameworkVersion .NETFramework,Version=v4.7.2'
runInParallel: false
runTestsInIsolation: false
codeCoverageEnabled: true
distributionBatchType: basedOnExecutionTime
batchingBasedOnAgentsOption: autoBatchSize
customBatchSizeValue: 10
batchingBasedOnExecutionTimeOption: customTimeBatchSize
customRunTimePerBatchValue: 300
dontDistribute: false
testRunTitle: '${{ parameters.UITestNames }} UI Tests'
publishRunAttachments: true
failOnMinTestsNotRun: false
minimumExpectedTests: 1
diagnosticsEnabled: true
collectDumpOn: onAbortOnly
rerunFailedTests: true
rerunType: basedOnTestFailurePercentage
rerunFailedThreshold: 50
rerunFailedTestCasesMaxLimit: 5
rerunMaxAttempts: 2

- task: PowerShell@2
displayName: Cleanup
condition: succeeded()
timeoutInMinutes: 5
inputs:
targetType: inline
arguments: '${{ parameters.CleanupProcesses }}'
script: |
param ([string[]]$names)
$running = Get-Process -Name $names -ErrorAction SilentlyContinue
while ($running) {
Write-Host 'Killing:'
$running
try {
$running | Stop-Process -Force
} catch {
}
Start-Sleep -Seconds 3
$running = Get-Process -Name $names -ErrorAction SilentlyContinue
}
errorActionPreference: stop
failOnStderr: true
4 changes: 4 additions & 0 deletions Build/templates/build.yml
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,9 @@ parameters:
- name: ptvsPackageVersion
type: string
default: $(Build.BuildNumber)
- name: skipSigning
type: boolean
default: false

steps:

Expand Down Expand Up @@ -57,4 +60,5 @@ steps:
/p:BuildNumber=${{ parameters.ptvsPackageVersion }}
/p:BUILD_BINARIESDIRECTORY=$(Build.BinariesDirectory)
/p:BUILD_STAGINGDIRECTORY=$(Build.StagingDirectory)
/p:SkipSigning=${{ parameters.skipSigning }}
/bl:$(Build.SourcesDirectory)\logs\BuildInstaller.binlog'
22 changes: 13 additions & 9 deletions Python/Setup/signlayout.proj
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,10 @@
<PropertyGroup>
<OutputPath>$(BinariesOutputPath)</OutputPath>
<OutDir>$(BinariesOutputPath)</OutDir>
<!-- Opt-in flag to skip signing work -->
<SkipSigning Condition="'$(SkipSigning)'==''">false</SkipSigning>
<!-- When skipping, set MicroBuildSignType to None so MicroBuild signing targets are disabled -->
<MicroBuildSignType Condition="'$(SkipSigning)'=='true'">None</MicroBuildSignType>
</PropertyGroup>

<ItemDefinitionGroup>
Expand All @@ -17,7 +21,7 @@
</ManagedFiles>
</ItemDefinitionGroup>

<ItemGroup>
<ItemGroup Condition="'$(SkipSigning)'!='true'">
<_Languages Include="$(Languages)" />

<ManagedFiles Include="
Expand Down Expand Up @@ -73,7 +77,7 @@
</FilesToSign>
</ItemGroup>

<Target Name="_AddLocFiles" BeforeTargets="_PreserveUnsigned;ListFiles">
<Target Name="_AddLocFiles" BeforeTargets="_PreserveUnsigned;ListFiles" Condition="'$(SkipSigning)'!='true'">
<ItemGroup>
<LocFilesToSign Include="$(BinariesOutputPath)localize\**\*.resources.dll" />
<FilesToSign Include="@(LocFilesToSign)">
Expand All @@ -84,7 +88,7 @@
</FilesToSign>
</ItemGroup>
</Target>
<Target Name="_AddPylanceFiles" BeforeTargets="_PreserveUnsigned;ListFiles">
<Target Name="_AddPylanceFiles" BeforeTargets="_PreserveUnsigned;ListFiles" Condition="'$(SkipSigning)'!='true'">
<ItemGroup>
<PylanceFilesToSign Include="$(BinariesOutputPath)pylance\**\*.js" />
<FilesToSign Include="@(PylanceFilesToSign)">
Expand All @@ -96,17 +100,17 @@
</ItemGroup>
</Target>

<Target Name="_PreserveUnsigned" Inputs="%(FilesToSign.FullPath)" Outputs="%(FilesToSign.UnsignedPath)" BeforeTargets="SignFiles">
<Target Name="_PreserveUnsigned" Inputs="%(FilesToSign.FullPath)" Outputs="%(FilesToSign.UnsignedPath)" BeforeTargets="SignFiles" Condition="'$(SkipSigning)'!='true' and '@(FilesToSign)'!=''">
<Copy SourceFiles="%(FilesToSign.FullPath)" DestinationFiles="%(FilesToSign.UnsignedPath)" />
</Target>

<Target Name="ListFiles">
<Target Name="ListFiles" Condition="'$(SkipSigning)'!='true'">
<Message Text="OutputPath: $(OutputPath)" Importance="high" />
<Message Text="@(FilesToSign->'%(Identity) (%(Authenticode), %(StrongName)) - %(SignedPath)', '
')" Importance="high" />
</Target>

<Target Name="_GetBinariesInLayout">
<Target Name="_GetBinariesInLayout" Condition="'$(SkipSigning)'!='true'">
<ItemGroup>
<_BinariesInLayout Include="$(LayoutOutputPath)**\*.exe;$(LayoutOutputPath)**\*.dll" />
<_BinariesWithSignedSource Include="$(BinariesOutputPath)%(_BinariesInLayout.Filename)%(_BinariesInLayout.Extension)">
Expand All @@ -116,7 +120,7 @@
</ItemGroup>
</Target>

<Target Name="_GetJSFilesInLayout">
<Target Name="_GetJSFilesInLayout" Condition="'$(SkipSigning)'!='true'">
<ItemGroup>
<!-- Special case the pylance files -->
<_FilesInLayout Include="$(LayoutOutputPath)\Microsoft.PythonTools.Core\pylance\**\*.js" />
Expand All @@ -127,10 +131,10 @@
</ItemGroup>
</Target>


<Target Name="_UpdateLayoutWithSignedBinaries"
DependsOnTargets="_GetBinariesInLayout;_GetJsFilesInLayout"
AfterTargets="SignFiles">
AfterTargets="SignFiles"
Condition="'$(SkipSigning)'!='true'">
<Copy SourceFiles="%(_BinariesToCopy.FullPath)" DestinationFiles="%(_BinariesToCopy.TargetPath)" />
</Target>

Expand Down
2 changes: 1 addition & 1 deletion Python/Tests/Core.UI/TestExplorerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -65,7 +65,7 @@ public void RunAllUnittestProject(PythonVisualStudioApp app) {
var sln = app.CopyProjectForTest(@"TestData\TestExplorerUnittest.sln");
app.OpenProject(sln);

RunAllTests(app, AllUnittests);
RunAllTests(app, AllUnittests, Path.GetFileNameWithoutExtension(sln));
}

public void RunAllUnittestWorkspace(PythonVisualStudioApp app) {
Expand Down
2 changes: 2 additions & 0 deletions Python/Tests/PythonToolsUITestsRunner/TestExplorerTests.cs
Original file line number Diff line number Diff line change
Expand Up @@ -75,12 +75,14 @@ public void DebugPytestWorkspace() {
_vs.RunTest(nameof(PythonToolsUITests.TestExplorerTests.DebugPytestWorkspace));
}

[Ignore]
[TestMethod, Priority(UITestPriority.P0)]
[TestCategory("Installed")]
public void DebugUnittestProject() {
_vs.RunTest(nameof(PythonToolsUITests.TestExplorerTests.DebugUnittestProject));
}

[Ignore]
[TestMethod, Priority(UITestPriority.P0)]
[TestCategory("Installed")]
public void DebugUnittestWorkspace() {
Expand Down
Loading