Some checks failed
joule-code conformance gate / joule-moq-relay, its own energy on a counter (macos) (push) Successful in 52s
joule-code conformance gate / Build + round-trip C1-C4 vectors (push) Successful in 1m38s
joule-code conformance gate / joule-moq-relay, every target (push) Successful in 3m7s
repository checks / lockfiles, advisories, tests in CI, workflow hygiene, spec and section references, public text (push) Failing after 4m22s
wai release binaries build on Windows / the seven release binaries · windows (push) Successful in 14m14s
joule-code conformance gate / joule-moq-ingest, every target (push) Successful in 21m40s
joule-moq-room room service / joule-moq-room · does this change touch it (push) Has been cancelled
joule-moq-room room service / joule-moq-room, every target (push) Has been cancelled
cpu_us() declared POSIX getrusage for every target, so linking wai-ingest for x86_64-pc-windows-msvc failed (LNK2019, unresolved external symbol getrusage) and wai-v0.5.0's Windows leg produced no archive. It is now getrusage on unix, GetProcessTimes (kernel32) on Windows, and zero where a platform gives no process CPU time. Nothing built those binaries on Windows before a release. A new workflow builds the same seven the Windows archive holds, with the release job's directories, packages, features and --locked, in debug (which links each one): nightly, and on a push to main that changes a joule-code crate the archive builds from. Checked: joule-contrib type-checks and passes clippy -D warnings for x86_64-pc-windows-msvc, and its 33 lib tests pass natively (Thor). Changelog: none Co-Authored-By: Claude Opus 5.5 <[email protected]>
78 lines
3.9 KiB
YAML
78 lines
3.9 KiB
YAML
name: wai release binaries build on Windows
|
|
|
|
# The Windows archive of a wai release holds seven binaries: wai, wai-relay, wai-room, wai-ingest,
|
|
# wai-remote-host, wai-pack and wai-quantum (wai-release.yml's Windows job). Until this workflow,
|
|
# only the release itself built them on Windows, so a Windows-only break reached the release:
|
|
# wai-v0.5.0's Windows leg failed to link wai-ingest, because joule-contrib declared POSIX
|
|
# getrusage unconditionally (unresolved external symbol getrusage).
|
|
#
|
|
# This builds the same seven binaries for x86_64-pc-windows-msvc, as the release does (same
|
|
# directories, packages, features and --locked), so a link or compile error shows up on main.
|
|
# It is a debug build: it links every binary, which is what catches a missing symbol, in a
|
|
# fraction of a release build's time on the one Windows runner. It runs nightly, and on a push to
|
|
# main that changes a crate the Windows archive builds from joule-code (wai-rs, wai-pack and
|
|
# wai-quantum-cli have Windows jobs of their own).
|
|
#
|
|
# Windows runner notes: shell pwsh (PowerShell 7); the runner injects CI=true, cleared as the
|
|
# release job clears it.
|
|
|
|
concurrency:
|
|
group: ${{ github.workflow }}-${{ github.event_name == 'push' && github.sha || github.ref }}
|
|
|
|
on:
|
|
schedule:
|
|
- cron: '20 5 * * *'
|
|
push:
|
|
branches: [main]
|
|
paths:
|
|
- 'joule-code/joule-code-rs/Cargo.lock'
|
|
- 'joule-code/joule-code-rs/Cargo.toml'
|
|
- 'joule-code/joule-code-rs/crates/joule-contrib/**'
|
|
- 'joule-code/joule-code-rs/crates/joule-moq-ingest/**'
|
|
- 'joule-code/joule-code-rs/crates/joule-moq-relay/**'
|
|
- 'joule-code/joule-code-rs/crates/joule-moq-room/**'
|
|
- 'joule-code/joule-code-rs/crates/joule-moq-remote/**'
|
|
- '.github/workflows/wai-release-windows-build.yml'
|
|
|
|
env:
|
|
CARGO_TERM_COLOR: always
|
|
|
|
jobs:
|
|
build:
|
|
name: the seven release binaries · windows
|
|
runs-on: windows
|
|
timeout-minutes: 120
|
|
env:
|
|
CI: ""
|
|
steps:
|
|
- uses: actions/checkout@v5
|
|
- name: Build each binary the Windows archive holds
|
|
shell: pwsh
|
|
run: |
|
|
$ErrorActionPreference = 'Stop'
|
|
Remove-Item Env:CI -ErrorAction SilentlyContinue
|
|
$t = "x86_64-pc-windows-msvc"
|
|
$builds = @(
|
|
@{ dir = 'wai\wai-rs'; bin = 'wai'; args = @('--no-default-features', '--features', 'quickstart', '--bin', 'wai') },
|
|
@{ dir = 'joule-code\joule-code-rs'; bin = 'wai-relay'; args = @('-p', 'joule-moq-relay', '--bin', 'wai-relay') },
|
|
@{ dir = 'joule-code\joule-code-rs\crates\joule-moq-room'; bin = 'wai-room'; args = @('--bin', 'wai-room') },
|
|
@{ dir = 'joule-code\joule-code-rs'; bin = 'wai-ingest'; args = @('-p', 'joule-moq-ingest', '--bin', 'wai-ingest') },
|
|
@{ dir = 'joule-code\joule-code-rs\crates\joule-moq-remote'; bin = 'wai-remote-host'; args = @('--bin', 'wai-remote-host') },
|
|
@{ dir = 'wai\wai-pack'; bin = 'wai-pack'; args = @('--bin', 'wai-pack') },
|
|
@{ dir = 'wai\wai-quantum-cli'; bin = 'wai-quantum'; args = @('--bin', 'wai-quantum') }
|
|
)
|
|
$failed = @()
|
|
foreach ($b in $builds) {
|
|
Push-Location $b.dir
|
|
cargo build --locked --target $t @($b.args)
|
|
if ($LASTEXITCODE -ne 0) { $failed += $b.bin; Write-Host "::error::the Windows build of $($b.bin) failed" }
|
|
else {
|
|
$target = (cargo metadata --format-version 1 --no-deps --locked | ConvertFrom-Json).target_directory
|
|
$exe = Join-Path $target "$t\debug\$($b.bin).exe"
|
|
if (-not (Test-Path $exe)) { $failed += $b.bin; Write-Host "::error::$($b.bin).exe was not produced" }
|
|
else { Write-Host "built $($b.bin).exe" }
|
|
}
|
|
Pop-Location
|
|
}
|
|
if ($failed.Count -gt 0) { throw "the Windows build failed for: $($failed -join ', ')" }
|
|
Write-Host "all seven release binaries build and link for $t"
|