ci: locate swift.exe after winget install in Windows spike #2
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: Windows spike | |
| # Throwaway spike (step 1 of PLAN.md): try to build the shared core | |
| # (Sources/HeadlessProtocol) with Swift-for-Windows on a real runner. | |
| # Delete this file once the spike outcome is recorded. | |
| on: | |
| push: | |
| branches: [spike/windows-core] | |
| workflow_dispatch: | |
| permissions: | |
| contents: read | |
| jobs: | |
| core-build: | |
| runs-on: windows-latest | |
| steps: | |
| - uses: actions/checkout@v4 | |
| - name: Install Swift toolchain | |
| shell: pwsh | |
| run: | | |
| winget install --id Swift.Toolchain -e --source winget ` | |
| --accept-source-agreements --accept-package-agreements | |
| $candidates = @( | |
| (Join-Path $env:LOCALAPPDATA 'Programs\Swift\bin'), | |
| 'C:\Swift\bin', | |
| (Join-Path $env:LOCALAPPDATA 'Microsoft\WinGet\Packages') | |
| ) | |
| $swiftBin = $null | |
| foreach ($c in $candidates) { | |
| if (Test-Path (Join-Path $c 'swift.exe')) { $swiftBin = $c; break } | |
| } | |
| if (-not $swiftBin) { | |
| $found = Get-ChildItem $env:LOCALAPPDATA,'C:\' -Recurse -Filter 'swift.exe' ` | |
| -ErrorAction SilentlyContinue -Depth 5 | Select-Object -First 1 | |
| if ($found) { $swiftBin = $found.DirectoryName } | |
| } | |
| if (-not $swiftBin) { throw 'swift.exe not found after winget install' } | |
| Write-Host "Found swift at: $swiftBin" | |
| Add-Content $env:GITHUB_PATH $swiftBin | |
| - name: Set up MSVC environment | |
| uses: ilammy/msvc-dev-cmd@v1 | |
| - name: Show toolchain | |
| shell: pwsh | |
| run: swift --version | |
| - name: Build shared core (HeadlessProtocol) | |
| shell: pwsh | |
| working-directory: apps/headless | |
| run: swift build --target HeadlessProtocol --build-tests-off 2>&1 | Tee-Object core-build.log | |
| - name: Build protocol test executable | |
| if: success() || failure() | |
| shell: pwsh | |
| working-directory: apps/headless | |
| run: swift build --product headless-protocol-tests 2>&1 | Tee-Object tests-build.log | |
| - name: Upload build logs | |
| if: always() | |
| uses: actions/upload-artifact@v4 | |
| with: | |
| name: windows-spike-logs | |
| path: | | |
| apps/headless/core-build.log | |
| apps/headless/tests-build.log | |
| if-no-files-found: ignore |