diff --git a/.github/scripts/setup-dev-drive.ps1 b/.github/scripts/setup-dev-drive.ps1 index 26ca58b837..48eb78f952 100644 --- a/.github/scripts/setup-dev-drive.ps1 +++ b/.github/scripts/setup-dev-drive.ps1 @@ -1,14 +1,19 @@ -# Configure a fast drive for Windows CI jobs. +# Configure a Dev Drive for Windows CI jobs. # -# GitHub-hosted Windows runners do not always expose a secondary D: volume. When -# they do not, try to create a Dev Drive VHD and fall back to C: if the runner -# image does not allow that provisioning path. +# Try to create a Dev Drive VHD explicitly so Windows temp-heavy paths can use a +# trusted ReFS Dev Drive. Fall back to the runner-provided D: drive, then C:, if +# the runner image does not allow that provisioning path. -function Use-FallbackDrive { +function Select-FallbackDrive { param([string]$Reason) - Write-Warning "$Reason Falling back to C:" - return "C:" + if (Test-Path "D:\") { + Write-Warning "$Reason Falling back to existing drive at D:" + return "D:" + } else { + Write-Warning "$Reason Falling back to C:" + return "C:" + } } function Invoke-BestEffort { @@ -21,44 +26,40 @@ function Invoke-BestEffort { } } -if (Test-Path "D:\") { - Write-Output "Using existing drive at D:" - $Drive = "D:" -} else { - try { - $VhdPath = Join-Path $env:RUNNER_TEMP "codex-dev-drive.vhdx" - $SizeBytes = 64GB +try { + $VhdPath = Join-Path $env:RUNNER_TEMP "codex-dev-drive.vhdx" + $SizeBytes = 64GB - if (Test-Path $VhdPath) { - Remove-Item -Path $VhdPath -Force - } - - New-VHD -Path $VhdPath -SizeBytes $SizeBytes -Dynamic -ErrorAction Stop | Out-Null - $Mounted = Mount-VHD -Path $VhdPath -Passthru -ErrorAction Stop - $Disk = $Mounted | Get-Disk -ErrorAction Stop - $Disk | Initialize-Disk -PartitionStyle GPT -ErrorAction Stop - $Partition = $Disk | New-Partition -AssignDriveLetter -UseMaximumSize -ErrorAction Stop - $Volume = $Partition | Format-Volume -FileSystem ReFS -NewFileSystemLabel "CodexDevDrive" -DevDrive -Confirm:$false -Force -ErrorAction Stop - - $Drive = "$($Volume.DriveLetter):" - - Invoke-BestEffort { fsutil devdrv trust $Drive } "Trusting Dev Drive $Drive" - Invoke-BestEffort { fsutil devdrv enable /disallowAv } "Disabling AV filter attachment for Dev Drives" - try { - Dismount-VHD -Path $VhdPath - Mount-VHD -Path $VhdPath | Out-Null - } catch { - Write-Warning "Remounting Dev Drive $Drive failed: $($_.Exception.Message)" - if (-not (Test-Path "$Drive\")) { - throw - } - } - Invoke-BestEffort { fsutil devdrv query $Drive } "Querying Dev Drive $Drive" - - Write-Output "Using Dev Drive at $Drive" - } catch { - $Drive = Use-FallbackDrive "Failed to create Dev Drive: $($_.Exception.Message)" + if (Test-Path $VhdPath) { + Remove-Item -Path $VhdPath -Force } + + New-VHD -Path $VhdPath -SizeBytes $SizeBytes -Dynamic -ErrorAction Stop | Out-Null + $Mounted = Mount-VHD -Path $VhdPath -Passthru -ErrorAction Stop + $Disk = $Mounted | Get-Disk -ErrorAction Stop + $Disk | Initialize-Disk -PartitionStyle GPT -ErrorAction Stop + $Partition = $Disk | New-Partition -AssignDriveLetter -UseMaximumSize -ErrorAction Stop + $Volume = $Partition | Format-Volume -FileSystem ReFS -NewFileSystemLabel "CodexDevDrive" -DevDrive -Confirm:$false -Force -ErrorAction Stop + + $Drive = "$($Volume.DriveLetter):" + + Invoke-BestEffort { fsutil devdrv trust $Drive } "Trusting Dev Drive $Drive" + Invoke-BestEffort { fsutil devdrv enable /disallowAv } "Disabling AV filter attachment for Dev Drives" + try { + Dismount-VHD -Path $VhdPath + Mount-VHD -Path $VhdPath | Out-Null + } catch { + Write-Warning "Remounting Dev Drive $Drive failed: $($_.Exception.Message)" + if (-not (Test-Path "$Drive\")) { + throw + } + } + Invoke-BestEffort { fsutil devdrv query $Drive } "Querying Dev Drive $Drive" + + Write-Output "Using Dev Drive at $Drive" +} catch { + $Drive = Select-FallbackDrive "Failed to create Dev Drive: $($_.Exception.Message)" + Invoke-BestEffort { fsutil devdrv query $Drive } "Querying fallback drive $Drive" } $Tmp = "$Drive\codex-tmp"