Skip to content

Commit 91bb561

Browse files
restructuring CI to reduce time-to-failure for scanning
1 parent 8a3af10 commit 91bb561

File tree

3 files changed

+45
-23
lines changed

3 files changed

+45
-23
lines changed

check-vulnerabilities.ps1

+5
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,11 @@ if (-not (Test-Path $projectPath))
77
}
88

99
cd $projectPath
10+
11+
$cmd = "restore"
12+
Write-Host "dotnet $cmd"
13+
dotnet $cmd | Tee-Object $logFilePath
14+
1015
$cmd = "list", "package", "--include-transitive", "--vulnerable"
1116
Write-Host "dotnet $cmd"
1217
dotnet $cmd | Tee-Object $logFilePath

eng/ci/templates/public/jobs/build-test-public.yml

+3-3
Original file line numberDiff line numberDiff line change
@@ -38,6 +38,9 @@ jobs:
3838
.\validateWorkerVersions.ps1
3939
displayName: 'Validate worker versions'
4040
condition: ne(variables['skipWorkerVersionValidation'], 'true')
41+
- pwsh: |
42+
.\check-vulnerabilities.ps1
43+
displayName: "Check for security vulnerabilities"
4144
- pwsh: |
4245
.\build.ps1
4346
env:
@@ -46,9 +49,6 @@ jobs:
4649
IsPublicBuild: true
4750
IsCodeqlBuild: false
4851
displayName: 'Executing build script'
49-
- pwsh: |
50-
.\check-vulnerabilities.ps1
51-
displayName: "Check for security vulnerabilities"
5252
- task: PublishTestResults@2
5353
inputs:
5454
testResultsFormat: 'VSTest'

pipelineUtilities.psm1

+37-20
Original file line numberDiff line numberDiff line change
@@ -81,22 +81,46 @@ function AddLocalDotnetDirPath {
8181
}
8282
}
8383

84-
function Find-Dotnet
84+
function Find-DotnetVersionsToInstall
8585
{
8686
AddLocalDotnetDirPath
8787
$listSdksOutput = dotnet --list-sdks
8888
$installedDotnetSdks = $listSdksOutput | ForEach-Object { $_.Split(" ")[0] }
8989
Write-Host "Detected dotnet SDKs: $($installedDotnetSdks -join ', ')"
90+
$missingVersions = [System.Collections.Generic.List[string]]::new()
9091
foreach ($majorMinorVersion in $DotnetSDKVersionRequirements.Keys) {
9192
$minimalVersion = "$majorMinorVersion.$($DotnetSDKVersionRequirements[$majorMinorVersion].MinimalPatch)"
9293
$firstAcceptable = $installedDotnetSdks |
9394
Where-Object { $_.StartsWith("$majorMinorVersion.") } |
9495
Where-Object { [System.Management.Automation.SemanticVersion]::new($_) -ge [System.Management.Automation.SemanticVersion]::new($minimalVersion) } |
9596
Select-Object -First 1
96-
if (-not $firstAcceptable) {
97-
throw "Cannot find the dotnet SDK for .NET Core $majorMinorVersion. Version $minimalVersion or higher is required. Please specify '-Bootstrap' to install build dependencies."
97+
if ($firstAcceptable) {
98+
Write-Host "Found dotnet SDK $firstAcceptable for .NET Core $majorMinorVersion"
99+
}
100+
else {
101+
Write-Host "Cannot find the dotnet SDK for .NET Core $majorMinorVersion. Version $minimalVersion or higher is required."
102+
$missingVersions.Add("$majorMinorVersion.$($DotnetSDKVersionRequirements[$majorMinorVersion].DefaultPatch)")
98103
}
99104
}
105+
return $missingVersions
106+
}
107+
108+
109+
$installScript = if ($IsWindows) { "dotnet-install.ps1" } else { "dotnet-install.sh" }
110+
$obtainUrl = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain"
111+
112+
function Install-DotnetVersion($Version,$Channel) {
113+
if ((Test-Path $installScript) -ne $True) {
114+
Write-Host "Downloading dotnet-install script"
115+
Invoke-WebRequest -Uri $obtainUrl/$installScript -OutFile $installScript
116+
}
117+
118+
Write-Host "Installing dotnet SDK version $Version"
119+
if ($IsWindows) {
120+
& .\$installScript -InstallDir "$env:ProgramFiles/dotnet" -Channel $Channel -Version $Version
121+
} else {
122+
bash ./$installScript --install-dir /usr/share/dotnet -c $Channel -v $Version
123+
}
100124
}
101125

102126
function Install-Dotnet {
@@ -105,25 +129,18 @@ function Install-Dotnet {
105129
[string]$Channel = 'release'
106130
)
107131
try {
108-
Find-Dotnet
109-
return # Simply return if we find dotnet SDk with the correct version
110-
} catch { }
111-
$obtainUrl = "https://raw.githubusercontent.com/dotnet/cli/master/scripts/obtain"
112-
try {
113-
$installScript = if ($IsWindows) { "dotnet-install.ps1" } else { "dotnet-install.sh" }
114-
Invoke-WebRequest -Uri $obtainUrl/$installScript -OutFile $installScript
115-
foreach ($majorMinorVersion in $DotnetSDKVersionRequirements.Keys) {
116-
$version = "$majorMinorVersion.$($DotnetSDKVersionRequirements[$majorMinorVersion].DefaultPatch)"
117-
Write-Host "Installing dotnet SDK version $version"
118-
if ($IsWindows) {
119-
& .\$installScript -InstallDir "$env:ProgramFiles/dotnet" -Channel $Channel -Version $Version
120-
} else {
121-
bash ./$installScript --install-dir /usr/share/dotnet -c $Channel -v $Version
122-
}
132+
$missingVersions = Find-DotnetVersionsToInstall
133+
if ($missingVersions.Count -eq 0) {
134+
return
135+
}
136+
foreach ($missingMajorMinorVersion in $missingVersions) {
137+
Install-DotnetVersion -Version $missingMajorMinorVersion -Channel $Channel
123138
}
124139
AddLocalDotnetDirPath
125-
}
140+
}
126141
finally {
127-
Remove-Item $installScript -Force -ErrorAction SilentlyContinue
142+
if (Test-Path $installScript) {
143+
Remove-Item $installScript -Force -ErrorAction SilentlyContinue
144+
}
128145
}
129146
}

0 commit comments

Comments
 (0)