Virtual Audio Driver Building #9
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| 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) { exit 1 } | |
| choco install visualstudio2022-workload-nativedesktop -y | |
| if ($LASTEXITCODE -ne 0) { exit 1 } | |
| choco install visualstudio2022-workload-vctools -y | |
| if ($LASTEXITCODE -ne 0) { exit 1 } | |
| choco install windowsdriverkit11 -y | |
| if ($LASTEXITCODE -ne 0) { 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 full validation | |
| - name: Build driver (x64) | |
| if: matrix.platform == 'x64' | |
| run: | | |
| msbuild "VirtualAudioDriver.sln" /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} | |
| # Build ARM64 with validation disabled | |
| - name: Build driver (ARM64) | |
| if: matrix.platform == 'ARM64' | |
| run: | | |
| # Skip ApiValidator and InfVerif for ARM64 builds | |
| msbuild "VirtualAudioDriver.sln" /p:Configuration=${{ matrix.configuration }} /p:Platform=${{ matrix.platform }} /p:RunCodeAnalysis=false /p:DriverTargetPlatform=Universal /p:UseInfVerifierEx=false /p:ValidateDrivers=false /p:StampInf=false | |
| # If the build directory doesn't exist for ARM64, manually create the directory structure | |
| - name: Create Package Directory for ARM64 (if needed) | |
| if: matrix.platform == 'ARM64' | |
| run: | | |
| $packageDir = "${{ matrix.platform }}\${{ matrix.configuration }}\package" | |
| if (-not (Test-Path $packageDir)) { | |
| New-Item -Path $packageDir -ItemType Directory -Force | |
| Write-Host "Created directory: $packageDir" | |
| # Copy files from x64 build if they exist and ARM64 files don't exist | |
| if (Test-Path "x64\${{ matrix.configuration }}\package\VirtualAudioDriver.inf") { | |
| # Only copy inf file as the binaries would be different | |
| if (-not (Test-Path "$packageDir\VirtualAudioDriver.inf")) { | |
| Copy-Item "x64\${{ matrix.configuration }}\package\VirtualAudioDriver.inf" $packageDir | |
| Write-Host "Copied VirtualAudioDriver.inf from x64 build" | |
| } | |
| } | |
| } | |
| - name: List build directory | |
| run: dir "${{ matrix.platform }}\${{ matrix.configuration }}\package" | |
| - name: Upload built driver | |
| id: upload_artifact | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: Built-Driver-${{ matrix.configuration }}-${{ matrix.platform }} | |
| path: | | |
| ${{ matrix.platform }}\${{ matrix.configuration }}\package\VirtualAudioDriver.sys | |
| ${{ matrix.platform }}\${{ matrix.configuration }}\package\VirtualAudioDriver.inf | |
| ${{ 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: dir '${{ matrix.platform }}\${{ matrix.configuration }}\package' |