Skip to content

Sync prototyping to main: ML flavor docs, VSIX coverage (95.13%), hygiene #69

Sync prototyping to main: ML flavor docs, VSIX coverage (95.13%), hygiene

Sync prototyping to main: ML flavor docs, VSIX coverage (95.13%), hygiene #69

Workflow file for this run

name: CI (Windows)
# Windows build + smoke test for the Osprey compiler (Rust). Like ci.yml, this
# runs ONLY on PRs to main — merging to main triggers nothing.
on:
pull_request:
branches: [main]
# Website-only PRs don't touch the compiler — skip the Windows build entirely.
# windows-core is NOT a required status check, so skipping the whole workflow
# via path filtering here is safe and won't leave a pending check blocking the
# merge. (ci.yml's required `ci` job uses job-level `if` skipping instead.)
paths-ignore:
- 'website/**'
workflow_dispatch:
concurrency:
group: ${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: true
jobs:
windows-core:
name: Windows Core Build & Smoke Test
runs-on: windows-latest
timeout-minutes: 25
steps:
- uses: actions/checkout@v4
- name: Install Rust (stable)
uses: dtolnay/rust-toolchain@stable
- name: Cache cargo registry + target
uses: actions/cache@v4
with:
path: |
~/.cargo/registry/index/
~/.cargo/registry/cache/
~/.cargo/git/db/
target/
key: ${{ runner.os }}-cargo-osprey-${{ hashFiles('Cargo.lock') }}
restore-keys: ${{ runner.os }}-cargo-osprey-
# gcc + winpthreads back the fiber/effects C runtime; the `clang` package
# provides the MinGW clang driver (`/ucrt64/bin/clang.exe`) osprey shells
# out to when linking — the `llvm` package ships only the LLVM tools
# (llc/opt), not the driver, so without `clang` osprey would fall back to
# the runner's system MSVC clang and fail to link the MinGW runtime.
- uses: msys2/setup-msys2@v2
with:
msystem: UCRT64
path-type: inherit
update: true
install: >-
make
mingw-w64-ucrt-x86_64-gcc
mingw-w64-ucrt-x86_64-clang
mingw-w64-ucrt-x86_64-llvm
mingw-w64-ucrt-x86_64-pkgconf
mingw-w64-ucrt-x86_64-openssl
# Build the C runtime archives with the MinGW toolchain. The root
# Makefile auto-detects this MSYS2 shell (via $MSYSTEM) and runs the
# recipe under bash; only the compiler/archiver need overriding.
- name: Build C runtime archives (MinGW)
shell: msys2 {0}
run: make _runtime CC=gcc AR=ar
- name: Build osprey (release)
run: cargo build --release -p osprey-cli
- name: Verify version contract
shell: msys2 {0}
run: |
set -euo pipefail
./target/release/osprey.exe --version | grep -Fx "osprey 0.0.0-dev"
# osprey.exe is a NATIVE Windows process: when it shells out to link the
# emitted IR it searches the Windows PATH, where the runner's system
# (MSVC-target) clang shadows the MSYS2 one — that clang can't link the
# MinGW-built runtime archive. Pin OSPREY_CC to the UCRT64 clang via a
# Windows-style path (cygpath -m) so native CreateProcess can find it.
- name: Pin the MinGW clang for osprey --run
shell: msys2 {0}
run: |
set -euo pipefail
CC_PATH="$(cygpath -m /ucrt64/bin/clang.exe)"
"$CC_PATH" --version | head -1
echo "OSPREY_CC=$CC_PATH" >> "$GITHUB_ENV"
# fiber_showcase exercises spawn/await/yield/channels/select — i.e. the
# winpthreads-backed fiber runtime. feature_omnibus covers lists/maps/
# strings/pattern-matching. Neither uses HTTP, so both are valid core
# Windows smoke tests; clang resolves to the MSYS2 LLVM inside this shell.
- name: Smoke test — fiber showcase
shell: msys2 {0}
run: |
set -euo pipefail
./target/release/osprey.exe examples/tested/fiber/fiber_showcase.osp --run --quiet > out.txt
cat out.txt
grep -Fq "=== Fiber Showcase Complete ===" out.txt
grep -Fq "map-reduce total = 1400" out.txt
grep -Fq "pipeline = 200" out.txt
- name: Smoke test — feature omnibus
shell: msys2 {0}
run: |
set -euo pipefail
./target/release/osprey.exe examples/tested/basics/feature_omnibus.osp --run --quiet > omni.txt
cat omni.txt