Skip to content

feat(ci): build and ship Windows x64 prebuilds#128

Draft
szegedi wants to merge 1 commit intomainfrom
attila/windows-prebuilds
Draft

feat(ci): build and ship Windows x64 prebuilds#128
szegedi wants to merge 1 commit intomainfrom
attila/windows-prebuilds

Conversation

@szegedi
Copy link
Copy Markdown
Contributor

@szegedi szegedi commented May 4, 2026

What

Adds win32-x64 to the action-prebuildify only: filter on both build.yml and release.yml, plus the two supporting fixes needed for the Windows artifact pipeline:

  • scripts/copy-artifacts.js preserves .exe on Windows when copying Rust [[bin]] outputs (e.g. crashtracker-receiver). Without this, the file gets copied without extension and can't be CreateProcess'd.
  • load.js appends .exe on Windows when looking up binaries (both in build/Release and in prebuilds/win32-x64), so libdatadog.find('crashtracker-receiver', true) resolves to the right file.

Why

dd-trace-js's crashtracker is currently a silent no-op on Windows because @datadog/libdatadog ships no Windows prebuild, so libdatadog.load('crashtracker') throws and the wrapper falls back to the noop crashtracker. As a result, repeated Windows-only STATUS_STACK_BUFFER_OVERRUN (0xC0000409) crashes in the dd-trace-js profiler tests produce no crash reports — see PROF-14469.

Upstream libdd-crashtracker (libdatadog v29) already supports Windows: its Cargo.toml has a [target.'cfg(windows)'.dependencies] windows = "0.59.0" block and the default features include collector_windows (in-process collector). Our crates/crashtracker/src/bin/receiver.rs already has a #[cfg(not(unix))] fn main(){} stub.

Test plan

This PR exists primarily to see whether the Windows runner build succeeds. Most likely point of failure is aws-lc-sys (pulled in by rustls with the aws-lc-rs provider). If that breaks on Windows, simplest follow-up is switching the Windows build to the ring provider, or making aws-lc-rs Unix-only.

Related

  • PROF-14469 — Windows worker crashes (STATUS_STACK_BUFFER_OVERRUN) on profiler unit-test process exit

Adds win32-x64 to the action-prebuildify "only" filter on both build
and release workflows.

Two supporting fixes for the Windows artifact pipeline:

- scripts/copy-artifacts.js now preserves the .exe extension on
  Windows when copying Rust [[bin]] outputs (e.g. crashtracker-receiver),
  so the file remains executable after CreateProcess.
- load.js's binary-finder appends .exe on Windows when looking up
  binaries (both in build/Release and in prebuilds/win32-x64), so
  callers like libdatadog.find('crashtracker-receiver', true) resolve
  to the right file.

Upstream libdd-crashtracker (libdatadog v29) already supports Windows
via its collector_windows feature; the receiver binary is a no-op stub
on non-unix targets but still needs to be a real .exe for the in-process
collector path to accept the receiver path.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant