feat(ci): cross-compile a 64-bit Windows agent build #124

Merged
Claude-Run merged 1 commit from feat/VA-122-windows-cross-compile-ci into main 2026-07-08 03:50:07 +02:00
Member

Add a build-only Windows cross-compile on the existing Linux/openSUSE runner (no Windows runner) and upgrade the Windows-target compile check to clippy so the cfg(windows) modules stop bit-rotting. Scope is build + compile-check only: no signing, no publishing, no self-update wiring (deferred to VA-123/VA-124/VA-125).

New oci-build/release-windows.Dockerfile mirrors release.Dockerfile's export-to-scratch pattern but cross-compiles the vervain-agent binary for x86_64-pc-windows-gnu with mingw-w64. The mingw gcc cross-compiles rusqlite's bundled SQLCipher + vendored OpenSSL C sources from Linux, so the build stays --locked against the committed Cargo.lock. New .forgejo/workflows/build-windows.yml runs it on the same crates/**, Cargo.*, and toolchain paths as build-package.yml (plus its own Dockerfile and workflow path) and uploads vervain-agent.exe as a CI artifact rather than to the generic package.

Upgrade check.Dockerfile's Windows step from cargo check to cargo clippy --workspace --target x86_64-pc-windows-gnu -- --deny warnings so the Windows cfg paths are linted on every push/PR. That surfaced four pieces of Windows bit-rot behind Linux-only code: an unused tokio::process::Command import in vervain-agent-kvm, an unused std::path::Path import and never-constructed StatvfsStats struct in host/disks.rs, a never-used touch_slot_field in dispatch.rs, and an unused clap::ValueEnum import in main.rs. Each is now gated with cfg(target_os = "linux") so the Windows build is warning-clean, and the clippy gate mechanically fails if any reappear.

#VA-122

Add a build-only Windows cross-compile on the existing Linux/openSUSE runner (no Windows runner) and upgrade the Windows-target compile check to clippy so the cfg(windows) modules stop bit-rotting. Scope is build + compile-check only: no signing, no publishing, no self-update wiring (deferred to VA-123/VA-124/VA-125). New oci-build/release-windows.Dockerfile mirrors release.Dockerfile's export-to-scratch pattern but cross-compiles the vervain-agent binary for x86_64-pc-windows-gnu with mingw-w64. The mingw gcc cross-compiles rusqlite's bundled SQLCipher + vendored OpenSSL C sources from Linux, so the build stays --locked against the committed Cargo.lock. New .forgejo/workflows/build-windows.yml runs it on the same crates/**, Cargo.*, and toolchain paths as build-package.yml (plus its own Dockerfile and workflow path) and uploads vervain-agent.exe as a CI artifact rather than to the generic package. Upgrade check.Dockerfile's Windows step from cargo check to cargo clippy --workspace --target x86_64-pc-windows-gnu -- --deny warnings so the Windows cfg paths are linted on every push/PR. That surfaced four pieces of Windows bit-rot behind Linux-only code: an unused tokio::process::Command import in vervain-agent-kvm, an unused std::path::Path import and never-constructed StatvfsStats struct in host/disks.rs, a never-used touch_slot_field in dispatch.rs, and an unused clap::ValueEnum import in main.rs. Each is now gated with cfg(target_os = "linux") so the Windows build is warning-clean, and the clippy gate mechanically fails if any reappear. #VA-122
feat(ci): cross-compile a 64-bit Windows agent build
All checks were successful
Check / fmt + clippy + tests (pull_request) Successful in 4m23s
Create release / Create release from merged PR (pull_request) Has been skipped
9210d54589
Add a build-only Windows cross-compile on the existing Linux/openSUSE runner (no Windows runner) and upgrade the Windows-target compile check to clippy so the cfg(windows) modules stop bit-rotting. Scope is build + compile-check only: no signing, no publishing, no self-update wiring (deferred to VA-123/VA-124/VA-125).

New oci-build/release-windows.Dockerfile mirrors release.Dockerfile's export-to-scratch pattern but cross-compiles the vervain-agent binary for x86_64-pc-windows-gnu with mingw-w64. The mingw gcc cross-compiles rusqlite's bundled SQLCipher + vendored OpenSSL C sources from Linux, so the build stays --locked against the committed Cargo.lock. New .forgejo/workflows/build-windows.yml runs it on the same crates/**, Cargo.*, and toolchain paths as build-package.yml (plus its own Dockerfile and workflow path) and uploads vervain-agent.exe as a CI artifact rather than to the generic package.

Upgrade check.Dockerfile's Windows step from cargo check to cargo clippy --workspace --target x86_64-pc-windows-gnu -- --deny warnings so the Windows cfg paths are linted on every push/PR. That surfaced four pieces of Windows bit-rot behind Linux-only code: an unused tokio::process::Command import in vervain-agent-kvm, an unused std::path::Path import and never-constructed StatvfsStats struct in host/disks.rs, a never-used touch_slot_field in dispatch.rs, and an unused clap::ValueEnum import in main.rs. Each is now gated with cfg(target_os = "linux") so the Windows build is warning-clean, and the clippy gate mechanically fails if any reappear.

#VA-122
Claude-Run deleted branch feat/VA-122-windows-cross-compile-ci 2026-07-08 03:50:08 +02:00
Sign in to join this conversation.
No reviewers
No labels
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set

Reference
psa-systems/vervain-agent!124
No description provided.