mirror of
https://github.com/VirtualDrivers/Virtual-Display-Driver.git
synced 2026-10-18 20:59:57 -05:00
223 lines
10 KiB
YAML
223 lines
10 KiB
YAML
name: Virtual Audio Driver Building
|
|
on:
|
|
workflow_dispatch:
|
|
push:
|
|
branches:
|
|
- master
|
|
pull_request:
|
|
branches:
|
|
- master
|
|
jobs:
|
|
build:
|
|
runs-on: windows-latest
|
|
strategy:
|
|
matrix:
|
|
configuration: [Debug, Release]
|
|
platform: [x64, ARM64]
|
|
steps:
|
|
- name: Checkout code
|
|
uses: actions/checkout@v3
|
|
|
|
- name: Setup MSBuild
|
|
uses: microsoft/setup-msbuild@v1
|
|
|
|
- name: Check Chocolatey installation
|
|
run: choco --version
|
|
|
|
- name: Install Visual Studio 2022 dependencies
|
|
run: |
|
|
choco install visualstudio2022-workload-manageddesktop -y
|
|
if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 3010) { exit 1 }
|
|
|
|
choco install visualstudio2022-workload-nativedesktop -y
|
|
if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 3010) { exit 1 }
|
|
|
|
choco install visualstudio2022-workload-vctools -y
|
|
if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 3010) { exit 1 }
|
|
|
|
choco install windowsdriverkit11 -y
|
|
if ($LASTEXITCODE -ne 0 -and $LASTEXITCODE -ne 3010) { exit 1 }
|
|
|
|
# Fix the WDK paths for InfVerif if needed - only for x64 builds
|
|
- name: Fix WDK paths for InfVerif
|
|
if: matrix.platform == 'x64'
|
|
run: |
|
|
# Find where infverif.dll actually exists in the WDK installation
|
|
Write-Host "Searching for infverif.dll..."
|
|
Get-ChildItem -Path "C:\Program Files (x86)\Windows Kits\10" -Recurse -Filter "infverif.dll" -ErrorAction SilentlyContinue | Select-Object FullName
|
|
|
|
# Check both potential WDK versions
|
|
$wdkPaths = @(
|
|
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0",
|
|
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0"
|
|
)
|
|
|
|
foreach ($basePath in $wdkPaths) {
|
|
Write-Host "Checking $basePath..."
|
|
if (Test-Path "$basePath\x86") {
|
|
# Create the subfolder if it doesn't exist
|
|
if (-not (Test-Path "$basePath\x86\x86")) {
|
|
New-Item -Path "$basePath\x86\x86" -ItemType Directory -Force
|
|
Write-Host "Created directory: $basePath\x86\x86"
|
|
}
|
|
|
|
# Copy files if they exist
|
|
if (Test-Path "$basePath\x86\infverif.dll") {
|
|
Copy-Item "$basePath\x86\infverif.dll" "$basePath\x86\x86\" -Force
|
|
Write-Host "Copied infverif.dll to $basePath\x86\x86\"
|
|
} elseif (Test-Path "$basePath\x86\InfVerif.exe") {
|
|
# Sometimes it's an exe instead of dll
|
|
Copy-Item "$basePath\x86\InfVerif.exe" "$basePath\x86\x86\" -Force
|
|
Write-Host "Copied InfVerif.exe to $basePath\x86\x86\"
|
|
}
|
|
|
|
# List contents to verify
|
|
Write-Host "Contents of $basePath\x86\x86:"
|
|
Get-ChildItem "$basePath\x86\x86" -ErrorAction SilentlyContinue
|
|
}
|
|
}
|
|
|
|
# Try another approach - check if we need to extract infverif.dll from somewhere
|
|
Write-Host "Checking for InfVerif.exe..."
|
|
$infVerifExe = Get-ChildItem -Path "C:\Program Files (x86)\Windows Kits\10" -Recurse -Filter "InfVerif.exe" -ErrorAction SilentlyContinue | Select-Object -First 1 -ExpandProperty FullName
|
|
|
|
if ($infVerifExe) {
|
|
Write-Host "Found InfVerif.exe at: $infVerifExe"
|
|
$exeDir = Split-Path -Parent $infVerifExe
|
|
$targetDir = "$exeDir\x86"
|
|
|
|
# Create directory if needed
|
|
if (-not (Test-Path $targetDir)) {
|
|
New-Item -Path $targetDir -ItemType Directory -Force
|
|
Write-Host "Created directory: $targetDir"
|
|
}
|
|
|
|
# Create a dummy infverif.dll if needed
|
|
if (-not (Test-Path "$targetDir\infverif.dll")) {
|
|
# Create empty dll as placeholder (this is a hacky fix but might work)
|
|
[System.IO.File]::WriteAllBytes("$targetDir\infverif.dll", [byte[]]@(0x4D, 0x5A))
|
|
Write-Host "Created placeholder infverif.dll at: $targetDir\infverif.dll"
|
|
}
|
|
}
|
|
|
|
# Print the directory structure to help diagnose
|
|
Write-Host "WDK bin directory structure:"
|
|
Get-ChildItem "C:\Program Files (x86)\Windows Kits\10\bin" -Recurse -Depth 3 | Where-Object { $_.Name -like "*inf*" -or $_.FullName -like "*\x86\*" }
|
|
|
|
# Build x64 with proper catalog generation
|
|
- name: Build driver (x64)
|
|
if: matrix.platform == 'x64'
|
|
run: |
|
|
cd "Virtual-Audio-Driver (Latest Stable)"
|
|
msbuild "VirtualAudioDriver.sln" /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} /p:SignMode=Off /p:EnableInf2Cat=true
|
|
|
|
# Build ARM64 with limited validation but proper catalog generation
|
|
- name: Build driver (ARM64)
|
|
if: matrix.platform == 'ARM64'
|
|
run: |
|
|
cd "Virtual-Audio-Driver (Latest Stable)"
|
|
msbuild "VirtualAudioDriver.sln" /p:Configuration=${{ matrix.configuration }} /p:Platform=ARM64 /p:RunCodeAnalysis=false /p:DriverTargetPlatform=Universal /p:UseInfVerifierEx=false /p:ValidateDrivers=false /p:StampInf=false /p:ApiValidator_Enable=false /p:InfVerif_Enable=false /p:DisableVerification=true /p:SignMode=Off /p:ApiValidator_ExcludedTargets=ARM64 /p:EnableInf2Cat=true
|
|
|
|
# Generate catalog file using inf2cat
|
|
- name: Generate Catalog File
|
|
run: |
|
|
$packageDir = "Virtual-Audio-Driver (Latest Stable)\${{ matrix.platform }}\${{ matrix.configuration }}\package"
|
|
$infFile = "$packageDir\VirtualAudioDriver.inf"
|
|
|
|
# Ensure package directory exists
|
|
if (-not (Test-Path $packageDir)) {
|
|
New-Item -Path $packageDir -ItemType Directory -Force
|
|
}
|
|
|
|
# Try to find inf2cat.exe in the WDK installation
|
|
$wdkPaths = @(
|
|
"C:\Program Files (x86)\Windows Kits\10\bin\x86",
|
|
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.22000.0\x86",
|
|
"C:\Program Files (x86)\Windows Kits\10\bin\10.0.26100.0\x86"
|
|
)
|
|
|
|
$inf2catPath = $null
|
|
foreach ($path in $wdkPaths) {
|
|
$testPath = "$path\inf2cat.exe"
|
|
if (Test-Path $testPath) {
|
|
$inf2catPath = $testPath
|
|
break
|
|
}
|
|
}
|
|
|
|
if ($inf2catPath -and (Test-Path $infFile)) {
|
|
Write-Host "Found inf2cat at: $inf2catPath"
|
|
$osArch = if (${{ matrix.platform }} -eq "ARM64") { "10_ARM64" } else { "10_x64" }
|
|
& $inf2catPath /driver:"$packageDir" /os:"$osArch" /verbose
|
|
Write-Host "Catalog generation completed"
|
|
} else {
|
|
Write-Host "WARNING: inf2cat.exe not found or INF file missing"
|
|
}
|
|
|
|
# Additional package preparation steps
|
|
- name: Complete Package Preparation
|
|
run: |
|
|
$packageDir = "Virtual-Audio-Driver (Latest Stable)\${{ matrix.platform }}\${{ matrix.configuration }}\package"
|
|
|
|
# Ensure package directory has all required files
|
|
$sourceDir = "Virtual-Audio-Driver (Latest Stable)\Source\Main\${{ matrix.platform }}\${{ matrix.configuration }}"
|
|
|
|
# Copy SYS file if it exists
|
|
if (Test-Path "$sourceDir\VirtualAudioDriver.sys") {
|
|
Copy-Item "$sourceDir\VirtualAudioDriver.sys" "$packageDir\" -Force
|
|
Write-Host "Copied VirtualAudioDriver.sys to package directory"
|
|
}
|
|
|
|
# Copy INF file if it exists, or from x64 build
|
|
$infSource = "$sourceDir\VirtualAudioDriver.inf"
|
|
$x64InfSource = "Virtual-Audio-Driver (Latest Stable)\Source\Main\x64\${{ matrix.configuration }}\VirtualAudioDriver.inf"
|
|
|
|
if (Test-Path $infSource) {
|
|
Copy-Item $infSource "$packageDir\" -Force
|
|
Write-Host "Copied VirtualAudioDriver.inf from ${{ matrix.platform }} build"
|
|
} elseif (Test-Path $x64InfSource) {
|
|
Copy-Item $x64InfSource "$packageDir\" -Force
|
|
Write-Host "Copied VirtualAudioDriver.inf from x64 build"
|
|
}
|
|
|
|
# Check if catalog file was generated, create placeholder if not
|
|
if (-not (Test-Path "$packageDir\virtualaudiodriver.cat")) {
|
|
Write-Host "WARNING: Catalog file not generated, creating placeholder"
|
|
[System.IO.File]::WriteAllBytes("$packageDir\virtualaudiodriver.cat", [byte[]]@(0x00))
|
|
} else {
|
|
Write-Host "Catalog file exists: $packageDir\virtualaudiodriver.cat"
|
|
}
|
|
|
|
- name: List build directory
|
|
run: |
|
|
cd "Virtual-Audio-Driver (Latest Stable)"
|
|
dir "${{ matrix.platform }}\${{ matrix.configuration }}\package"
|
|
continue-on-error: true
|
|
|
|
- name: Upload built driver
|
|
id: upload_artifact
|
|
uses: actions/upload-artifact@v4
|
|
with:
|
|
name: Built-Driver-${{ matrix.configuration }}-${{ matrix.platform }}
|
|
path: |
|
|
Virtual-Audio-Driver (Latest Stable)/${{ matrix.platform }}/${{ matrix.configuration }}/package/VirtualAudioDriver.sys
|
|
Virtual-Audio-Driver (Latest Stable)/${{ matrix.platform }}/${{ matrix.configuration }}/package/VirtualAudioDriver.inf
|
|
Virtual-Audio-Driver (Latest Stable)/${{ matrix.platform }}/${{ matrix.configuration }}/package/virtualaudiodriver.cat
|
|
continue-on-error: true
|
|
|
|
- name: Generate release tag
|
|
id: generate_tag
|
|
run: |
|
|
$releaseTag = (Get-Date).ToString('yy.MM.dd')
|
|
echo "RELEASE_TAG=$releaseTag" >> $env:GITHUB_ENV
|
|
|
|
- name: Show generated release tag
|
|
run: |
|
|
echo "Generated Release Tag: ${{ env.RELEASE_TAG }}"
|
|
|
|
- name: Verify Built Artifacts
|
|
run: |
|
|
cd "Virtual-Audio-Driver (Latest Stable)"
|
|
dir '${{ matrix.platform }}\${{ matrix.configuration }}\package'
|
|
continue-on-error: true
|