Skip to content

Commit

Permalink
Improve version info, vsix installation, and update building locally …
Browse files Browse the repository at this point in the history
…documentation
  • Loading branch information
NeoAdonis authored Jun 27, 2024
2 parents 3327adf + f9eb04d commit 77a4528
Show file tree
Hide file tree
Showing 7 changed files with 68 additions and 84 deletions.
90 changes: 30 additions & 60 deletions .github/scripts/Install-Vsix.ps1
Original file line number Diff line number Diff line change
@@ -1,68 +1,38 @@
<#
.SYNOPSIS
Checks WDK vsix version and downloads and installs as necessary.
Download and install the latest WDK VSIX.
#>

[CmdletBinding()]
param(
[bool]$optimize = $false
)

$root = Get-Location

# launch developer powershell (if necessary)
if (-not $env:VSCMD_VER) {
Import-Module (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*\Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
Enter-VsDevShell -VsInstallPath (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*")
cd $root
# set uri by resolving amd64 vsix
$uri = "https://marketplace.visualstudio.com$((Invoke-WebRequest -Uri "https://marketplace.visualstudio.com/items?itemName=DriverDeveloperKits-WDK.WDKVsix").Links | Where-Object outerHTML -like '*(amd64)*' | select -expand href)"

# set download version
$uri_version = ([regex]'(\d+\.)(\d+\.)(\d+\.)(\d+)').Matches($uri).Value

# set msbuild path
$msbuild_path = (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*\MSBuild\")

# download vsix, expand, and store the downloaded version extracted from the extension manifest
"Downloading WDK VSIX version: $uri_version..."
Invoke-WebRequest -Uri "$uri" -OutFile wdk.zip
"Expanding WDK VSIX archive..."
Expand-Archive ".\wdk.zip" .\
"Extracting version from manifest..."
$downloaded_version = ([xml](Get-Content .\extension.vsixmanifest)).PackageManifest.Metadata.Identity.Version
"Downloaded WDK VSIX version: $downloaded_version"

# copy msbuild files, extension manifest, and check installed version from the extension manifest
"Copying WDK extension files to build path..."
cp (".\`$MSBuild\*", ".\extension.vsixmanifest") "$msbuild_path" -Recurse -Force
"Extracting version from copied manifest..."
$installed_version = ([xml](Get-Content ${msbuild_path}\extension.vsixmanifest)).PackageManifest.Metadata.Identity.Version
"Installed WDK VSIX Version: $installed_version"
if (-not ("$downloaded_version" -eq "$installed_version")) {
"WDK VSIX installation failed due to version mismatch"
exit 1
}

# source environment variables
. .\Env-Vars.ps1

$version = $env:SAMPLES_VSIX_VERSION
$uri = $env:SAMPLES_VSIX_URI

function PrintWdkVsix {
$installed = ls "${env:ProgramData}\Microsoft\VisualStudio\Packages\Microsoft.Windows.DriverKit,version=*" | Select -ExpandProperty Name
"WDK Vsix Version: $installed"
}

function TestWdkVsix {
Test-Path "${env:ProgramData}\Microsoft\VisualStudio\Packages\Microsoft.Windows.DriverKit,version=$version"
}

if ($optimize) {
"---> Downloading vsix and configuring build environment..."
Invoke-WebRequest -Uri "$uri" -OutFile wdk.zip
Expand-Archive ".\wdk.zip" .\
cp ".\`$MSBuild\*" (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*\MSBuild\") -Recurse -Force
"<--- Finished"
}
else {
"Getting installed WDK vsix..."
PrintWdkVsix
"Checking the WDK.vsix version installed..."
if (-not (TestWdkVsix)) {
"The correct WDK vsix is not installed."
"Will attempt to download and install now..."
Invoke-WebRequest -Uri "$uri" -OutFile wdk.vsix
"Finished downloading."
"Starting install process. This will take some time to complete..."
Start-Process vsixinstaller -ArgumentList "/f /q /sp .\wdk.vsix" -wait
"The install process has finished."
"Checking the WDK.vsix version installed..."
if (TestWdkVsix) {
PrintWdkVsix
"The WDK vsix version is OK"
}
else {
"The WDK vsix install FAILED"
Write-Host "`u{274C} wdk vsix install had an issue"
Write-Error "the wdk vsix cannot be installed at this time"
exit 1
}
}
}
# set github environment variable for vsix version
"SAMPLES_VSIX_VERSION=$installed_version" | Out-File -FilePath "$env:GITHUB_ENV" -Append
2 changes: 1 addition & 1 deletion .github/workflows/Code-Scanning.yml
Original file line number Diff line number Diff line change
Expand Up @@ -38,7 +38,7 @@ jobs:
submodules: 'recursive'

- name: Install WDK VSIX
run: .\.github\scripts\Install-Vsix.ps1 -optimize:$true
run: .\.github\scripts\Install-Vsix.ps1

- name: Install Nuget Packages
run: nuget restore .\packages.config -PackagesDirectory .\packages\
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci-pr.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
submodules: 'recursive'

- name: Install WDK VSIX
run: .\.github\scripts\Install-Vsix.ps1 -optimize:$true
run: .\.github\scripts\Install-Vsix.ps1

- name: Install Nuget Packages
run: nuget restore .\packages.config -PackagesDirectory .\packages\
Expand Down
2 changes: 1 addition & 1 deletion .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ jobs:
submodules: 'recursive'

- name: Install WDK VSIX
run: .\.github\scripts\Install-Vsix.ps1 -optimize:$true
run: .\.github\scripts\Install-Vsix.ps1

- name: Install Nuget Packages
run: nuget restore .\packages.config -PackagesDirectory .\packages\
Expand Down
41 changes: 30 additions & 11 deletions Build-SampleSet.ps1
Original file line number Diff line number Diff line change
Expand Up @@ -10,16 +10,13 @@ param(

$root = Get-Location

# launch developer powershell (if necessary)
# launch developer powershell (if necessary to prevent multiple developer sessions)
if (-not $env:VSCMD_VER) {
Import-Module (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*\Common7\Tools\Microsoft.VisualStudio.DevShell.dll")
Enter-VsDevShell -VsInstallPath (Resolve-Path "$env:ProgramFiles\Microsoft Visual Studio\2022\*")
cd $root
}

# source environment variables
. .\Env-Vars.ps1

$ThrottleFactor = 5
$LogicalProcessors = (Get-CIMInstance -Class 'CIM_Processor' -Verbose:$false).NumberOfLogicalProcessors

Expand Down Expand Up @@ -56,26 +53,34 @@ finally {
}

#
# Determine build environment: 'GitHub', 'NuGet', 'EWDK', or 'WDK'. Only used to determine build number.
# Determine build environment: 'GitHub', 'NuGet', 'EWDK', or 'WDK'.
# Determine build number (used for exclusions based on build number). Five digits. Say, '22621'.
# Determine NuGet package version (if applicable).
# Determine WDK vsix version.
#
$build_environment=""
$build_number=0
$nuget_package_version=0
$vsix_version=""
#
# In Github we build using Nuget only and source version from repo .\Env-Vars.ps1.
# In Github we build using NuGet and get the version from packages and vsix version from env var set from the install vsix step.
#
if ($env:GITHUB_REPOSITORY) {
$build_environment="GitHub"
$build_number=$env:SAMPLES_BUILD_NUMBER
$nuget_package_version=([regex]'(?<=x64\.)(\d+\.)(\d+\.)(\d+\.)(\d+)').Matches((Get-Childitem .\packages\*WDK.x64* -Name)).Value
$build_number=$nuget_package_version.split('.')[2]
$vsix_version = $env:SAMPLES_VSIX_VERSION
}
#
# WDK NuGet will require presence of a folder 'packages'. The version is sourced from repo .\Env-Vars.ps1.
#
# Hack: If user has hydrated nuget packages, then use those. That will be indicated by presence of a folder named .\packages.
# Hack: If user has hydrated nuget packages, then use those. That will be indicated by presence of a folder named '.\packages'.
# Further, we need to test that the directory has been hydrated using '.\packages\*'.
#
elseif(Test-Path(".\packages")) {
elseif(Test-Path(".\packages\*")) {
$build_environment=("NuGet")
$build_number=$env:SAMPLES_BUILD_NUMBER
$nuget_package_version=([regex]'(?<=x64\.)(\d+\.)(\d+\.)(\d+\.)(\d+)').Matches((Get-Childitem .\packages\*WDK.x64* -Name)).Value
$build_number=$nuget_package_version.split('.')[2]
}
#
# EWDK sets environment variable BuildLab. For example 'ni_release_svc_prod1.22621.2428'.
Expand All @@ -101,7 +106,19 @@ else {
Write-Error "Could not determine build environment."
exit 1
}

#
# Get the vsix version from packages if not set
if (-not $vsix_version) {
$vsix_version = ls "${env:ProgramData}\Microsoft\VisualStudio\Packages\Microsoft.Windows.DriverKit,version=*" | Select -ExpandProperty Name
if ($vsix_version) {
$vsix_version = $vsix_version.split('=')[1]
}
else {
Write-Error "No version of the WDK VSIX could be found. The WDK VSIX is not installed."
exit 1
}
}
#
#
# InfVerif_AdditionalOptions
#
Expand Down Expand Up @@ -165,6 +182,8 @@ $SolutionsTotal = $sampleSet.Count * $Configurations.Count * $Platforms.Count

Write-Output ("Build Environment: " + $build_environment)
Write-Output ("Build Number: " + $build_number)
if (($build_environment -eq "GitHub") -or ($build_environment -eq "NuGet")) { Write-Output ("Nuget Package Version: " + $nuget_package_version) }
Write-Output ("WDK VSIX Version: " + $vsix_version)
Write-Output ("Samples: " + $sampleSet.Count)
Write-Output ("Configurations: " + $Configurations.Count + " (" + $Configurations + ")")
Write-Output ("Platforms: " + $Platforms.Count + " (" + $Platforms + ")")
Expand Down
6 changes: 5 additions & 1 deletion Building-Locally.md
Original file line number Diff line number Diff line change
Expand Up @@ -79,7 +79,11 @@ To build the Windows Driver Samples you need a "driver build environment". In e

### Option A: Use WDK NuGet Packages
* See [Download the Windows Driver Kit (WDK)](https://learn.microsoft.com/en-us/windows-hardware/drivers/download-the-wdk) for instructions on how to install Visual Studio, but only complete "Step 1". You do not need to install the SDK or the WDK.
* Install the Visual Studio Windows Driver Kit Extension (WDK.vsix). Open Visual Studio -> Extensions -> Manage Extensions... -> Online -> Visual Studio Market Place -> Windows Driver Kit -> 10.0.26100.0 -> Download
* Install the Visual Studio Windows Driver Kit Extension (WDK.vsix).
* Open Visual Studio -> Extensions -> Manage Extensions... -> Browse.
* In the search bar type: `Windows Driver Kit`.
* Find the `Microsoft` signed extension.
* Click the Install button.
* Launch a "Developer Command Prompt for VS 2022".
* Restore WDK packages from feed :

Expand Down
9 changes: 0 additions & 9 deletions Env-Vars.ps1

This file was deleted.

0 comments on commit 77a4528

Please sign in to comment.