Skip to content

Publish rolling Nightly builds and complete Windows local IPC support - #839

Merged
LunaStev merged 6 commits into
wavefnd:masterfrom
LunaStev:feat/rolling-nightly
Oct 2, 2026
Merged

LunaStev merged 6 commits into
wavefnd:masterfrom
LunaStev:feat/rolling-nightly

Conversation

@LunaStev

@LunaStev LunaStev commented Oct 2, 2026 •

Copy link
Copy Markdown
Member

Summary

Publish validated master builds through a rolling Nightly release and complete the Windows local IPC fixes from #796 and #797. The contributor commits retain their original authors and messages; a follow-up commit completes the implementation and regression coverage.

Publish one rolling nightly tag and Wave Nightly GitHub pre-release after a successful canonical master run of Wave CI. Build the exact validated SHA using the existing eight distribution package plans, then publish generation-specific archives, checksums, and metadata. Release notes identify the source commit, compiler version, build time, and workflow run.

Keep the current download generation available while uploading and verifying its replacement. Reject older or divergent candidates, handle interrupted publication on retry, and remove obsolete assets only after promotion succeeds. There is no scheduled rebuild without a master update; manual dispatch retries a specified successful CI run.

Motivation

Closes #831. Closes #795. Closes #793. Part of #832.

The existing Windows pathname stream API always returned unsupported, and empty event sets reached an invalid WSAPoll call. This adds pathname streams and preserves zero, finite, and infinite empty-wait semantics.

Users need a direct download of the most recent successfully validated master build. Failed validation or packaging must preserve the previous working Nightly.

Deployment dependency: wavefnd/wave-platform#145 must be merged and its installers deployed before this workflow can pass its gate. The gate checks the reviewed SHA-256 of both public installer scripts, and checks again before publication. Future installer changes require updating these pins. This prevents publishing Nightly while the live versioned installers could select it.

Target and compatibility impact

Windows IPC:

  • Windows 10 1803+ pathname AF_UNIX/SOCK_STREAM support uses the SDK address layout, UTF-8 paths of at most 107 bytes excluding NUL, and validation before socket creation. Invalid input leaves the address output unchanged.
  • Close operations do not remove socket paths. Callers explicitly use unix_remove, including after a successful bind followed by a failed listen. Existing paths are never automatically removed before bind.
  • Unavailable Winsock address-family/protocol/socket types are classified as unsupported while retaining their native error codes. Abstract addresses remain explicitly unsupported by this API.
  • Empty event sets return immediately only for timeout zero; finite waits use Sleep(timeout), and infinite waits use Sleep(INFINITE). Nonempty sets retain their existing WSAPoll behavior.

Nightly:

  • Reuses distribution packaging for Linux amd64/ARM64/RISC-V64/LoongArch64, macOS amd64/ARM64, and Windows MSVC amd64/ARM64.
  • YAML orchestrates jobs; source validation, packaging dispatch, asset verification, and publication are handled through python -m tools.ci.release --channel nightly.
  • Common CI must succeed for the canonical master push and all jobs of that run attempt. Package jobs check out the validated SHA; only the serialized publisher has repository write permission.
  • Nightly remains a pre-release and is never marked as the latest versioned release. Existing versioned release behavior and language semantics are unchanged.
  • Nightly installation is by direct artifact download. The companion installer PR rejects explicit Nightly installation and skips it during automatic version selection.

Validation

CI follow-ups:

  • Linux amd64 and the Linux-hosted RISC-V lane failed linking the Windows Unix-socket mock because the runner's clang defaults to PIE. The mock link now explicitly uses -no-pie, matching Wave's static object output. The OS-boundary regression passed with a local clang wrapper imposing a PIE default.
  • Windows amd64 passed its native IPC tests and examples but timed out in the WASI proc_exit(7) host test. The synchronous command host now reads, compiles, and instantiates its module synchronously, removing the asynchronous startup path. Existing timer-keepalive exit tests remain, with trap and invalid-module failures added. The Windows timeout was not reproduced locally; CI must confirm this mitigation.
  • python3 -m unittest tools.test_ci tools.test_nightly: 37 passed. Rust formatting, JavaScript syntax, and whitespace checks passed.
  • README build badge and destination now reference ci.yml.

Windows IPC changes:

  • cargo +1.89 test --locked --jobs 2 --no-default-features --features llvm-target-core64 --test native_providers windows_pathname_streams_and_empty_events: 16 O0/O2 object builds for Windows amd64 and ARM64 passed.
  • The same Cargo configuration with --test native_providers native_provider_os_boundary_failures passed. New OS-boundary mocks exercise address validation, socket/bind/listen/connect failures, resource closure and preservation of the original error, and empty/nonempty waits at O0/O2.
  • --test native_providers network_error_tables_and_async_sleep_results_run_on_native_hosts passed on Linux.
  • --test codegen_regressions std_net_compiles_for_every_supported_socket_abi passed for the existing networking examples across the supported socket ABIs.
  • Clippy for native_providers and boundary_regressions with the same features and -D warnings, cargo +1.89 fmt --all -- --check, and git diff --check passed.
  • The updated net_unix example passed Linux execution and Windows amd64/ARM64 object compilation at O0/O2. Linux socket execution required running outside the filesystem/network sandbox.
  • Native Windows amd64/ARM64 regression execution passed at ff5b5ce0 in run 37001816771. Tests cover byte exchange, shutdown/EOF, explicit deletion and rebinding, occupied/missing paths, UTF-8 and 107/108-byte boundaries, finite waits, and a bounded child-process check of infinite blocking. These native runs were on CI, not local Windows execution.

Nightly validation:

  • Python tools test suite: 242 tests, 27 skipped, successful. Includes 18 tools.test_nightly tests using an in-memory GitHub implementation; no live publication.
  • Regressions cover source eligibility, incomplete/corrupt packages, installer deployment pins, upload failure, digest mismatch, older candidates, duplicate publication, rollback, lost API responses, interrupted promotion, and cleanup retries.
  • Actionlint passed for the new workflow, with the existing Windows ARM runner label supplied in its runner configuration.
  • Workflow graph checks confirmed all eight distributions are required for publication, exact-SHA checkouts, restricted permissions, and serialized publication.
  • Python syntax checks and git diff --check passed. Companion Bash and PowerShell installer regressions passed.
  • Actual multi-platform package builds and live GitHub release publication were not run locally. They remain workflow validation; this PR does not claim an end-to-end published Nightly.

Checklist

  • Commits include a DCO Signed-off-by line.
  • Tests cover new behavior or the PR explains why no test is needed.
  • User-facing changes include documentation or diagnostics updates (generated release notes and installer rejection diagnostics).
  • The change preserves the license boundary between the compiler and std/.

LunaStev and others added 5 commits October 2, 2026 19:27
Signed-off-by: LunaStev <luna@lunastev.org>
The Windows local-address provider always returns -95, and the Windows branches of `_unix_socket` and `unix_remove` do the same. Consequently, portabl...

Signed-off-by: chenzeyan54-commits <chenzeyan54-commits@users.noreply.github.com>
(cherry picked from commit 950ae4f)
Signed-off-by: LunaStev <luna@lunastev.org>
(cherry picked from commit dd90054)
Signed-off-by: LunaStev <luna@lunastev.org>
(cherry picked from commit a5520b1)
Signed-off-by: LunaStev <luna@lunastev.org>
Use the Windows sockaddr_un layout and validate UTF-8 pathname bytes before
opening sockets. Enable the existing stream operations and explicit removal,
retaining native errors and closing sockets on failed setup.

Preserve finite and infinite empty event waits through Sleep without calling
WSAPoll with no descriptors. Cover native Windows targets and injected OS
failures, including cleanup errors, byte boundaries, and timeout behavior.

Follow up on wavefnd#796 and wavefnd#797; address wavefnd#795 and wavefnd#793.

Signed-off-by: LunaStev <luna@lunastev.org>
@LunaStev LunaStev changed the title Publish validated master builds through a rolling Nightly release Publish rolling Nightly builds and complete Windows local IPC support Oct 2, 2026
Link OS-boundary mocks without PIE, exercise fatal WASI exits with live host handles, and point the README build badge at ci.yml.

Signed-off-by: LunaStev <luna@lunastev.org>
@LunaStev
LunaStev merged commit 4fe815e into wavefnd:master Oct 2, 2026
26 checks passed
@LunaStev LunaStev mentioned this pull request Oct 2, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

3 participants