Files
bruno 7b5aa6fcc9
CI / fmt, clippy and tests (ubuntu-latest) (push) Successful in 21m0s
CI / browser end-to-end (Chromium + fixture) (push) Skipped
CI / fmt, clippy and tests (windows-latest) (push) Canceled after 0s
Add initial llm-bridge project
2026-09-18 18:01:07 -04:00

77 lines
2.4 KiB
PowerShell

<#
.SYNOPSIS
Run the same gates as the CI workflow, on this machine.
.DESCRIPTION
Mirrors .github/workflows/ci.yml so a change can be checked before pushing:
formatting, clippy with warnings as errors, the unit and integration tests
(no browser, no network), the doc tests and a release build.
The browser end-to-end suite needs a real Chromium and is opt-in: pass -E2e
to add it after the other gates.
.EXAMPLE
./scripts/ci.ps1
./scripts/ci.ps1 -E2e
./scripts/ci.ps1 -SkipRelease
#>
param(
[switch]$E2e,
[switch]$SkipRelease
)
$ErrorActionPreference = 'Stop'
$root = Split-Path -Parent (Split-Path -Parent $MyInvocation.MyCommand.Path)
Push-Location $root
$script:failed = @()
function Invoke-Gate {
param([string]$Name, [string[]]$Arguments)
Write-Host "== $Name" -ForegroundColor Cyan
Write-Host " cargo $($Arguments -join ' ')" -ForegroundColor DarkGray
& cargo @Arguments
if ($LASTEXITCODE -ne 0) {
Write-Host " FAILED ($LASTEXITCODE)" -ForegroundColor Red
$script:failed += $Name
} else {
Write-Host " ok" -ForegroundColor Green
}
}
Invoke-Gate 'formatting' @('fmt', '--all', '--check')
Invoke-Gate 'clippy' @('clippy', '--all-targets', '--locked', '--', '-D', 'warnings')
Invoke-Gate 'tests' @('test', '--locked', '--all-targets')
Invoke-Gate 'doc tests' @('test', '--locked', '--doc')
if (-not $SkipRelease) {
Invoke-Gate 'release build' @('build', '--locked', '--release')
}
if ($E2e) {
# The browser suite is #[ignore]d by default and needs a real browser.
$chrome = @(
"$env:ProgramFiles\Google\Chrome\Application\chrome.exe",
"$env:LOCALAPPDATA\Google\Chrome\Application\chrome.exe",
"$env:ProgramFiles\Microsoft\Edge\Application\msedge.exe",
"$env:LOCALAPPDATA\BraveSoftware\Brave-Browser\Application\brave.exe"
) | Where-Object { Test-Path $_ } | Select-Object -First 1
if (-not $chrome) {
Write-Warning 'no Chromium-based browser found: skipping the browser suite'
} else {
$env:CHROME = $chrome
Invoke-Gate 'browser e2e' @('test', '--test', 'e2e_browser', '--', '--ignored', '--test-threads=1')
}
}
Pop-Location
if ($script:failed.Count -gt 0) {
Write-Host ''
Write-Host "failed gates: $($script:failed -join ', ')" -ForegroundColor Red
exit 1
}
Write-Host ''
Write-Host 'all gates passed' -ForegroundColor Green
exit 0