diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 449c537..60b1560 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -76,6 +76,16 @@ jobs: steps: - uses: actions/checkout@v4 - uses: dtolnay/rust-toolchain@stable + - name: PowerShell syntax check + shell: pwsh + run: | + $errors = $null + $tokens = $null + [System.Management.Automation.Language.Parser]::ParseFile("install.ps1", [ref]$tokens, [ref]$errors) | Out-Null + if ($errors.Count -gt 0) { + $errors | ForEach-Object { Write-Error $_ } + exit 1 + } - name: Build Windows client run: cargo build --release --bin dosh-client --bin dosh-bench - name: Test Windows client diff --git a/tests/release_scripts.rs b/tests/release_scripts.rs index 32fda97..6f1ff17 100644 --- a/tests/release_scripts.rs +++ b/tests/release_scripts.rs @@ -89,6 +89,13 @@ fn release_gates_test_all_targets() { .expect("windows-client job"); assert!(windows_client.contains("runs-on: windows-latest")); assert!(windows_client.contains("name: Test Windows client")); + assert!(windows_client.contains("name: PowerShell syntax check")); + assert!(windows_client.contains("shell: pwsh")); + assert!( + windows_client + .contains("[System.Management.Automation.Language.Parser]::ParseFile(\"install.ps1\""), + "Windows CI must parse the installer with PowerShell" + ); assert!( windows_client.contains("run: cargo test --all-targets"), "Windows CI must run Rust tests, not only build/package"