Skip to content
This repository was archived by the owner on Jun 19, 2026. It is now read-only.

Add TypeScript structured lane rejection #1475

Add TypeScript structured lane rejection

Add TypeScript structured lane rejection #1475

Workflow file for this run

name: CI
on:
push:
branches: [main]
pull_request:
branches: [main]
merge_group:
env:
CARGO_TERM_COLOR: always
RUST_BACKTRACE: 1
jobs:
rust-lint:
name: Rust / Lint
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: clippy
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install protoc
run: sudo apt-get install -y protobuf-compiler
- name: Run clippy (strict)
run: cargo clippy --all-features --all-targets -- -D warnings
rust-tests:
name: Rust / Tests
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 30
env:
CARGO_BUILD_JOBS: "4"
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build Rust subject
run: cargo build --package subject-rust
- name: Test workspace (Rust-only)
run: >
cargo nextest run --workspace --jobs 2
-E 'not test(/lang_.*(typescript|swift)/) and not test(/(^|::)(typescript|swift)_/)'
- name: Check schema compatibility policy
run: bash scripts/check-schema-compat.sh
rust-doc:
name: Rust / Documentation
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install protoc
run: sudo apt-get install -y protobuf-compiler
- name: Build docs (xtask)
run: cargo xtask doc
rust-examples:
name: Rust / Examples
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Run all examples
run: |
for example in rust-examples/examples/*.rs; do
name="$(basename "${example}" .rs)"
echo "::group::${name}"
cargo run -p rust-examples --example "${name}"
echo "::endgroup::"
done
rust-miri:
name: Rust / Miri
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 20
steps:
- uses: actions/checkout@v6
- name: Install Rust nightly
uses: dtolnay/rust-toolchain@nightly
with:
components: miri
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Setup Miri
run: cargo +nightly miri setup
rust-conformance:
name: Conformance / Rust
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install wasm-pack
uses: taiki-e/install-action@wasm-pack
- name: Build subject
run: cargo build -p subject-rust --release
- name: Run Rust TCP subject matrix tests
run: >
cargo nextest run -p spec-tests --test spec_matrix
-E 'test(lang_rust_transport_tcp::)'
- name: Run Rust binary payload transport matrix (mem/tcp)
run: >
cargo nextest run -p spec-tests --test spec_matrix
-E 'test(lang_rust_to_rust_transport_mem_direction_bidirectional_binary_payload_transport_matrix)
| test(lang_rust_to_rust_transport_tcp_direction_bidirectional_binary_payload_transport_matrix)'
generated-bindings:
name: Generated / Bindings Sync
runs-on: bearcove-ubuntu-24.04
container:
image: swift:6.1
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- name: Trust checkout for Git inside container
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Show Swift version
run: swift --version
- name: Check Swift formatter
run: swift format --help
- name: Install Rust prerequisites
run: apt-get update && apt-get install -y build-essential curl ca-certificates
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Regenerate TypeScript and Swift bindings
run: cargo xtask codegen --typescript --swift
- name: Check generated bindings are committed
run: |
DRIFT="$(git status --porcelain -- typescript/generated swift/subject/Sources/subject-swift)"
if [ -n "$DRIFT" ]; then
echo "Generated bindings are out of date. Run: cargo xtask codegen --typescript --swift"
echo "$DRIFT"
git --no-pager diff -- typescript/generated swift/subject/Sources/subject-swift || true
exit 1
fi
typescript-conformance:
name: Conformance / TypeScript
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "25"
- name: Install pnpm
uses: pnpm/action-setup@v5
with:
version: 11
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install dependencies
run: pnpm install
- name: TypeScript typecheck (tsgo)
run: cd typescript && pnpm check
- name: Build TypeScript packages
run: cd typescript && pnpm run build
- name: Generate TypeScript bindings
run: cargo xtask codegen --typescript
- name: Install Playwright browsers
run: pnpm --filter "@bearcove/vox-playwright-tests" exec playwright install --with-deps chromium
- name: Build Rust WebSocket peer server
run: cargo build -p peer-server --bin ws-peer-server
- name: Run TypeScript browser tests
run: pnpm --filter "@bearcove/vox-playwright-tests" run test
- name: Run TypeScript TCP subject matrix tests
run: >
cargo nextest run -p spec-tests --test spec_matrix --run-ignored all -E 'test(lang_typescript_transport_tcp::)'
- name: Run TypeScript subject lifecycle tests
run: >
cargo nextest run -p spec-tests --test subject_lifecycle
-E 'test(/(^|::)typescript_/)'
swift-linux:
name: Conformance / Swift (Linux)
runs-on: bearcove-ubuntu-24.04
container:
image: swift:6.1
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- name: Trust checkout for Git inside container
run: git config --global --add safe.directory "$GITHUB_WORKSPACE"
- name: Show Swift version
run: swift --version
- name: Install Rust prerequisites
run: apt-get update && apt-get install -y build-essential curl ca-certificates
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build subject
run: swift build -c release --package-path swift/subject
- name: Run VoxRuntime Swift tests
run: swift test --no-parallel -Xlinker "-L${PWD}/target/release"
- name: Run Swift TCP subject matrix tests
run: >
cargo nextest run -p spec-tests --test spec_matrix --run-ignored all
-E 'test(lang_swift_transport_tcp::)'
- name: Run Swift subject lifecycle tests
run: >
cargo nextest run -p spec-tests --test subject_lifecycle
-E 'test(/(^|::)swift_/)'
rust-wasm:
name: Rust / WebAssembly
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Check vox-websocket for wasm32
run: cargo check --target wasm32-unknown-unknown -p vox-websocket
- name: Check wasm-browser-tests for wasm32
run: cargo check --target wasm32-unknown-unknown -p wasm-browser-tests
wasm-browser-tests:
name: Browser / Rust-Wasm
runs-on: bearcove-ubuntu-24.04
timeout-minutes: 15
steps:
- uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: "25"
- name: Install pnpm
uses: pnpm/action-setup@v5
with:
version: 11
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
targets: wasm32-unknown-unknown
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Install wasm-pack
uses: taiki-e/install-action@wasm-pack
- name: Build wasm targets
env:
CARGO_PROFILE_DEV_DEBUG: "false"
CARGO_PROFILE_DEV_OPT_LEVEL: "1"
run: |
wasm-pack build --dev --no-opt --target web rust/wasm-browser-tests --out-dir ../../wasm/tests/browser-wasm/pkg
wasm-pack build --dev --no-opt --target web rust/wasm-inprocess-tests --out-dir ../../wasm/tests/browser-inprocess/pkg
- name: Install dependencies
run: pnpm install
- name: Install Playwright browsers
run: pnpm --filter "@bearcove/vox-wasm-playwright-tests" exec playwright install --with-deps chromium
- name: Build Rust WebSocket peer server
run: cargo build -p peer-server --bin ws-peer-server
- name: Run Wasm browser tests
env:
VOX_SKIP_WASM_PACK_BUILD: "1"
run: pnpm --filter "@bearcove/vox-wasm-playwright-tests" run test
rust-windows:
name: Rust / Windows
runs-on: windows-latest
timeout-minutes: 30
steps:
- uses: actions/checkout@v6
- name: Install Rust
uses: dtolnay/rust-toolchain@stable
with:
components: rustfmt
- name: Install cargo-nextest
uses: taiki-e/install-action@nextest
- name: Cache cargo
uses: Swatinem/rust-cache@v2
- name: Build subject
run: cargo build -p subject-rust
- name: Test workspace (Rust-only, no cross-language)
run: >
cargo nextest run --workspace
-E 'not test(/lang_.*(typescript|swift)/) and not test(/(^|::)(typescript|swift)_/)'