# Windows client CI — runs on the self-hosted Windows runner (home-windows-1, host mode; see
# scripts/ci/setup-windows-runner.ps1). Build + clippy + fmt + test the WinUI 3 client
# (windows-reactor + D3D11/SwapChainPanel + WASAPI + SDL3) on x86_64-pc-windows-msvc.
#
# The MSVC/WinUI/FFmpeg toolchain (cargo/rustup on ASCII paths, NASM, CMake, LLVM, FFmpeg,
# CARGO_HOME, CMAKE_POLICY_VERSION_MINIMUM, …) is baked into the runner's daemon env. Two
# per-checkout vars are set in a step:
#   - CARGO_WORKSPACE_DIR  windows-reactor's build.rs unwraps it + stages the Win App SDK
#                          NuGets/winmd under it (from GITHUB_WORKSPACE).
#   - CARGO_TARGET_DIR=C:\t  the runner's host workdir is buried deep under
#                          C:\Windows\System32\config\systemprofile\.cache\act\<hash>\hostexecutor\,
#                          so the default target\ path blows past Windows' MAX_PATH (260) inside the
#                          CMake-from-source builds (audiopus_sys / SDL3) — MSBuild's tracker then
#                          can't create its .tlog (DirectoryNotFoundException -> MSB6003). A short
#                          root keeps every nested path well under the limit.
#
# Steps use `shell: pwsh` (PowerShell 7) deliberately: Windows PowerShell 5.1's
# `Out-File -Encoding utf8` prepends a UTF-8 BOM that corrupts the first GITHUB_ENV line (the
# CARGO_WORKSPACE_DIR var silently never gets set -> reactor build.rs panics). pwsh writes no BOM.
# The runner's daemon wrapper puts C:\Program Files\PowerShell\7 on PATH so the job finds pwsh.
name: windows

on:
  push:
    branches: [main]
    paths:
      - 'crates/punktfunk-client-windows/**'
      - 'crates/punktfunk-core/**'
      - 'Cargo.lock'
      - 'Cargo.toml'
      - '.gitea/workflows/windows.yml'
  pull_request:
    paths:
      - 'crates/punktfunk-client-windows/**'
      - 'crates/punktfunk-core/**'
      - 'Cargo.lock'
      - 'Cargo.toml'
      - '.gitea/workflows/windows.yml'
  workflow_dispatch:

jobs:
  build:
    runs-on: windows-amd64
    timeout-minutes: 60
    steps:
      - uses: actions/checkout@v4

      - name: Configure + toolchain versions
        shell: pwsh
        run: |
          "CARGO_WORKSPACE_DIR=$env:GITHUB_WORKSPACE" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
          "CARGO_TARGET_DIR=C:\t" | Out-File -FilePath $env:GITHUB_ENV -Append -Encoding utf8
          rustc --version
          cargo --version
          node --version
          Write-Output "workspace: $env:GITHUB_WORKSPACE"

      - name: Build
        shell: pwsh
        run: cargo build -p punktfunk-client-windows

      - name: Clippy (-D warnings)
        shell: pwsh
        run: cargo clippy -p punktfunk-client-windows --all-targets -- -D warnings

      - name: Rustfmt check
        shell: pwsh
        run: cargo fmt -p punktfunk-client-windows -- --check

      - name: Test
        shell: pwsh
        run: cargo test -p punktfunk-client-windows
