Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
50 changes: 37 additions & 13 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -74,26 +74,34 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest, macos-latest, windows-latest]
# Bundled regrtests are required to pass (see RFC 0026). The
# runner gates on `tests/regrtest/expectations.toml` by default, so
# any divergence — pass → fail, fail → pass — fails the job. Pull
# requests update both the test and the baseline in the same
# commit.
#
# The windows leg is advisory via the baseline's `measured_os`
# stamp (RFC 0063 WS7), not via CI config: the runner prints the
# full report, uploads the measured artifact below, and exits 0 on
# unexpected results until a measured Windows baseline is
# transplanted and "windows" joins the stamp.
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
- uses: Swatinem/rust-cache@v2
- name: Build weavepy CLI
run: cargo build --release -p weavepy-cli
- name: Run bundled regrtests (subprocess, parallel)
shell: bash
run: |
cargo run --release -p weavepy-cli -- regrtest \
--mode subprocess \
--workers 4 \
--timeout 60
- name: Append regrtest report to job summary
if: always()
shell: bash
run: |
{
echo "## WeavePy regrtest"
Expand All @@ -113,7 +121,7 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest, macos-latest, windows-latest]
# RFC 0058 — the benchmark lane. Gates on WeavePy/CPython *ratios*
# against the per-platform baselines/bench-{os}-{arch}.json (RFC
# 0062 WS3; host-independent, unlike absolute times); the 25%
Expand All @@ -129,18 +137,21 @@ jobs:
- name: Build weavepy CLI + bench harness
run: cargo build --release -p weavepy-cli -p weavepy-bench
- name: Run bench gate
# Linux has no committed per-platform baseline yet, so the gate
# is advisory there (--allow-missing-baseline prints a note and
# exits 0). It graduates to strict once a measured
# bench-linux-x86_64.json is committed — drop the flag then.
# macOS gates strictly against bench-macos-aarch64.json.
# Linux and Windows have no committed per-platform baseline
# yet, so the gate is advisory there (--allow-missing-baseline
# prints a note and exits 0). Each leg graduates to strict once
# its measured bench-{os}-x86_64.json is committed — drop the
# flag for that OS then (RFC 0062 for linux, RFC 0063 for
# windows). macOS gates strictly against bench-macos-aarch64.json.
shell: bash
run: |
target/release/weavepy-bench gate --pct=25 \
--weavepy=target/release/weavepy \
${{ matrix.os == 'ubuntu-latest' && '--allow-missing-baseline' || '' }} \
${{ (matrix.os == 'ubuntu-latest' || matrix.os == 'windows-latest') && '--allow-missing-baseline' || '' }} \
| tee bench-report.md
- name: Append bench report to job summary
if: always()
shell: bash
run: |
{
echo "## WeavePy bench"
Expand All @@ -160,14 +171,17 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest, macos-latest, windows-latest]
# RFC 0062 WS3 — the ecosystem lane in CI. Installs the manifest's
# packages from an offline wheel cache into venvs running under the
# built weavepy, runs each row's probe (and package self-tests),
# and gates on tests/ecosystem/expectations.toml. Blocking, same
# policy as regrtest. The host CPython is only used by the wheel
# fetcher (pip download needs a real Python); the runners' system
# cc covers source builds.
#
# The windows leg is advisory via the baseline's `measured_os`
# stamp (RFC 0063 WS7), not via CI config — see the regrtest job.
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
Expand All @@ -183,8 +197,12 @@ jobs:
- name: Build weavepy CLI
run: cargo build --release -p weavepy-cli
- name: Fetch ecosystem wheels (no-op on cache hit)
run: python3 tools/ecosystem_fetch.py --dest target/ecosystem-wheels
# `python`, not `python3`: setup-python exposes both on
# ubuntu/macos (same 3.13 interpreter) but only `python` on
# windows runners.
run: python tools/ecosystem_fetch.py --dest target/ecosystem-wheels
- name: Run ecosystem harness
shell: bash
run: |
cargo run --release -p weavepy-conformance -- ecosystem \
--wheels target/ecosystem-wheels \
Expand All @@ -197,11 +215,13 @@ jobs:
strategy:
fail-fast: false
matrix:
os: [ubuntu-latest, macos-latest]
os: [ubuntu-latest, macos-latest, windows-latest]
# RFC 0062 — builds the relocatable artifact from the release CLI
# and runs `weavepy-dist check` against it (boot, stdlib, venv +
# pip smoke). The pip leg reuses the offline wheel cache from the
# ecosystem job's actions/cache key.
# ecosystem job's actions/cache key. On windows the builder emits
# the RFC 0063 WS6 zip artifact / NT layout; the check command is
# identical.
steps:
- uses: actions/checkout@v4
- uses: dtolnay/rust-toolchain@stable
Expand All @@ -217,8 +237,12 @@ jobs:
- name: Build weavepy CLI
run: cargo build --release -p weavepy-cli
- name: Fetch ecosystem wheels (no-op on cache hit)
run: python3 tools/ecosystem_fetch.py --dest target/ecosystem-wheels
# `python`, not `python3`: setup-python exposes both on
# ubuntu/macos (same 3.13 interpreter) but only `python` on
# windows runners.
run: python tools/ecosystem_fetch.py --dest target/ecosystem-wheels
- name: Run dist check
shell: bash
run: |
cargo run --release -p weavepy-dist -- check \
--wheels target/ecosystem-wheels
Expand Down
1 change: 1 addition & 0 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

28 changes: 28 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -140,6 +140,34 @@ parking_lot = "0.12"
crossbeam-channel = "0.5"
crossbeam-utils = "0.8"

# RFC 0063 — the Windows wave: NT-native stdlib core (`_winapi`,
# `msvcrt`, `winreg`, `_overlapped`, the CRT fd model, Winsock
# `select`). Target-scoped to Windows builds only; the feature list
# is the union of the Win32 namespaces those modules consume.
windows-sys = { version = "0.61", features = [
"Win32_Foundation",
"Win32_Globalization",
"Win32_Networking_WinSock",
"Win32_Security",
"Win32_Security_Cryptography",
"Win32_Storage_FileSystem",
"Win32_System_Console",
"Win32_System_Diagnostics_Debug",
"Win32_System_Environment",
"Win32_System_IO",
"Win32_System_Ioctl",
"Win32_System_LibraryLoader",
"Win32_System_Memory",
"Win32_System_Pipes",
"Win32_System_Registry",
"Win32_System_SystemInformation",
"Win32_System_SystemServices",
"Win32_System_Threading",
"Win32_System_WindowsProgramming",
"Win32_UI_Shell",
"Win32_UI_WindowsAndMessaging",
] }

# RFC 0032 — tier-2 JIT backend (Cranelift). Only compiled when the
# `jit` feature is enabled (off by default); CI exercises it via
# `--all-features`. MSRV floor for these is Rust 1.93.
Expand Down
Loading
Loading