ek-ui 0.2.21

ek 生态常驻主界面(egui/eframe):插件即界面——观测页 + 日志页,车头与 UI 同插件
Documentation
# One-command quality gate for ek-ui.
# Runs: cargo fmt --check / cargo test / cargo clippy -D warnings / cargo doc
#       / scripts/check-package.ps1
# Usage: powershell -ExecutionPolicy Bypass -File scripts/gate.ps1 [-AllowDirty]
# NOTE: ASCII-only on purpose (Windows PowerShell 5.1 decodes BOM-less .ps1 as ANSI).
[CmdletBinding()]
param(
    [switch]$AllowDirty
)

$ErrorActionPreference = 'Continue'

$root = Split-Path -Parent $PSScriptRoot
Push-Location $root
try {
    Write-Host "toolchain:" -ForegroundColor Cyan
    & rustfmt --version
    & rustc --version
    & cargo --version

    $results = New-Object System.Collections.ArrayList

    function Invoke-Gate {
        param([string]$Name, [scriptblock]$Body)
        Write-Host ""
        Write-Host ("=== " + $Name + " ===") -ForegroundColor Cyan
        & $Body
        $code = $LASTEXITCODE
        if ($null -eq $code) { $code = 0 }
        if ($code -eq 0) {
            Write-Host ("PASS  " + $Name) -ForegroundColor Green
            [void]$results.Add([pscustomobject]@{ Name = $Name; Ok = $true })
        } else {
            Write-Host ("FAIL  " + $Name + "  (exit " + $code + ")") -ForegroundColor Red
            [void]$results.Add([pscustomobject]@{ Name = $Name; Ok = $false })
        }
    }

    Invoke-Gate 'cargo fmt --check' { cargo fmt --check }
    Invoke-Gate 'cargo test' { cargo test }
    Invoke-Gate 'cargo clippy --all-targets -- -D warnings' { cargo clippy --all-targets -- -D warnings }
    Invoke-Gate 'cargo doc --no-deps' { cargo doc --no-deps }

    $guard = Join-Path $PSScriptRoot 'check-package.ps1'
    if ($AllowDirty) {
        Invoke-Gate 'scripts/check-package.ps1 -AllowDirty' { & $guard -AllowDirty }
    } else {
        Invoke-Gate 'scripts/check-package.ps1 (strict)' { & $guard }
    }

    Write-Host ""
    Write-Host "===== gate summary =====" -ForegroundColor Cyan
    $failed = 0
    foreach ($r in $results) {
        if ($r.Ok) {
            Write-Host ("  PASS  " + $r.Name) -ForegroundColor Green
        } else {
            Write-Host ("  FAIL  " + $r.Name) -ForegroundColor Red
            $failed++
        }
    }

    if ($failed -eq 0) {
        Write-Host "ALL GATES PASSED" -ForegroundColor Green
        exit 0
    } else {
        Write-Host ("GATES FAILED: " + $failed) -ForegroundColor Red
        exit 1
    }
} finally {
    Pop-Location
}