From 0112f7f0e40540a58fbcd2427f900bca5589c4df Mon Sep 17 00:00:00 2001 From: Zanie Blue Date: Wed, 18 Jun 2025 07:15:49 -0500 Subject: [PATCH] Use a dev drive for testing on Windows --- .github/workflows/ci.yaml | 16 +++++++ .github/workflows/setup-dev-drive.ps1 | 62 +++++++++++++++++++++++++++ 2 files changed, 78 insertions(+) create mode 100644 .github/workflows/setup-dev-drive.ps1 diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index 3014769c94..b06610ef1e 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -321,14 +321,30 @@ jobs: - uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # v4.2.2 with: persist-credentials: false + - name: Setup Dev Drive + run: ${{ github.workspace }}/.github/workflows/setup-dev-drive.ps1 + + # actions/checkout does not let us clone into anywhere outside `github.workspace`, so we have to copy the clone + # the fuzz corpus links are broken so we remove them + - name: Copy Git Repo to Dev Drive + run: | + Remove-Item -Path ".\fuzz\corpus" -Recurse + Copy-Item -Path "${{ github.workspace }}" -Destination "${{ env.RUFF_WORKSPACE }}" -Recurse + - uses: Swatinem/rust-cache@9d47c6ad4b02e050fd481d890b2ea34778fd09d6 # v2.7.8 + with: + workspaces: ${{ env.RUFF_WORKSPACE }} + - name: "Install Rust toolchain" + working-directory: ${{ env.RUFF_WORKSPACE }} run: rustup show + - name: "Install cargo nextest" uses: taiki-e/install-action@d12e869b89167df346dd0ff65da342d1fb1202fb # v2.53.2 with: tool: cargo-nextest - name: "Run tests" + working-directory: ${{ env.RUFF_WORKSPACE }} shell: bash env: NEXTEST_PROFILE: "ci" diff --git a/.github/workflows/setup-dev-drive.ps1 b/.github/workflows/setup-dev-drive.ps1 new file mode 100644 index 0000000000..244093d844 --- /dev/null +++ b/.github/workflows/setup-dev-drive.ps1 @@ -0,0 +1,62 @@ +# Configures a drive for testing in CI. + +# When not using a GitHub Actions "larger runner", the `D:` drive is present and +# has similar or better performance characteristics than a ReFS dev drive. +# Sometimes using a larger runner is still more performant (e.g., when running +# the test suite) and we need to create a dev drive. This script automatically +# configures the appropriate drive. + +# Note we use `Get-PSDrive` is not sufficient because the drive letter is assigned. +if (Test-Path "D:\") { + Write-Output "Using existing drive at D:" + $Drive = "D:" +} else { + # The size (20 GB) is chosen empirically to be large enough for our + # workflows; larger drives can take longer to set up. + $Volume = New-VHD -Path C:/ruff_dev_drive.vhdx -SizeBytes 20GB | + Mount-VHD -Passthru | + Initialize-Disk -Passthru | + New-Partition -AssignDriveLetter -UseMaximumSize | + Format-Volume -DevDrive -Confirm:$false -Force + + $Drive = "$($Volume.DriveLetter):" + + # Set the drive as trusted + # See https://learn.microsoft.com/en-us/windows/dev-drive/#how-do-i-designate-a-dev-drive-as-trusted + fsutil devdrv trust $Drive + + # Disable antivirus filtering on dev drives + # See https://learn.microsoft.com/en-us/windows/dev-drive/#how-do-i-configure-additional-filters-on-dev-drive + fsutil devdrv enable /disallowAv + + # Remount so the changes take effect + Dismount-VHD -Path C:/ruff_dev_drive.vhdx + Mount-VHD -Path C:/ruff_dev_drive.vhdx + + # Show some debug information + Write-Output $Volume + fsutil devdrv query $Drive + + Write-Output "Using Dev Drive at $Volume" +} + +$Tmp = "$($Drive)\ruff-tmp" + +# Create the directory ahead of time in an attempt to avoid race-conditions +New-Item $Tmp -ItemType Directory + +# Move Cargo to the dev drive +New-Item -Path "$($Drive)/.cargo/bin" -ItemType Directory -Force +Copy-Item -Path "C:/Users/runneradmin/.cargo/*" -Destination "$($Drive)/.cargo/" -Recurse -Force + +Write-Output ` + "DEV_DRIVE=$($Drive)" ` + "TMP=$($Tmp)" ` + "TEMP=$($Tmp)" ` + "UV_INTERNAL__TEST_DIR=$($Tmp)" ` + "RUSTUP_HOME=$($Drive)/.rustup" ` + "CARGO_HOME=$($Drive)/.cargo" ` + "RUFF_WORKSPACE=$($Drive)/ruff" ` + "PATH=$($Drive)/.cargo/bin;$env:PATH" ` + >> $env:GITHUB_ENV +