mirror of
https://github.com/ZSeven-W/openpencil.git
synced 2026-05-31 19:04:29 +07:00
142 lines
5.6 KiB
YAML
142 lines
5.6 KiB
YAML
name: Rust check (native)
|
|
|
|
on:
|
|
pull_request:
|
|
paths:
|
|
- 'Cargo.toml'
|
|
- 'Cargo.lock'
|
|
- 'crates/**'
|
|
- 'rust-toolchain.toml'
|
|
- 'rustfmt.toml'
|
|
- 'deny.toml'
|
|
- 'tools/check-jian-boundaries.sh'
|
|
- 'tools/check-widget-boundary.sh'
|
|
- 'tools/dump-diagnostics-golden.ts'
|
|
- 'packages/pen-ai-skills/**'
|
|
- '.github/workflows/rust-check.yml'
|
|
# TS planner-prompt source — drives the parity drift guard.
|
|
- 'apps/web/src/services/ai/orchestrator-prompt-optimizer.ts'
|
|
push:
|
|
branches: ['**']
|
|
paths:
|
|
- 'Cargo.toml'
|
|
- 'Cargo.lock'
|
|
- 'crates/**'
|
|
- 'vendor/**'
|
|
- 'deny.toml'
|
|
- 'rust-toolchain.toml'
|
|
- 'rustfmt.toml'
|
|
- 'tools/check-jian-boundaries.sh'
|
|
- 'tools/check-widget-boundary.sh'
|
|
- 'tools/dump-diagnostics-golden.ts'
|
|
- 'packages/pen-ai-skills/**'
|
|
- '.github/workflows/rust-check.yml'
|
|
# TS planner-prompt source — drives the parity drift guard.
|
|
- 'apps/web/src/services/ai/orchestrator-prompt-optimizer.ts'
|
|
|
|
jobs:
|
|
check:
|
|
name: ${{ matrix.os }} / 1.94
|
|
runs-on: ${{ matrix.os }}
|
|
strategy:
|
|
fail-fast: false
|
|
matrix:
|
|
os: [macos-latest, ubuntu-latest, windows-latest]
|
|
steps:
|
|
# Keep LF line endings on the Windows runner so `cargo fmt --check`
|
|
# does not trip over CRLF-converted vendored sources.
|
|
- name: Disable autocrlf
|
|
run: git config --global core.autocrlf false
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
with:
|
|
toolchain: '1.94'
|
|
components: rustfmt, clippy
|
|
- uses: Swatinem/rust-cache@v2
|
|
# Linux GL prerequisites for winit's x11+wayland feature link.
|
|
# libxkbcommon-x11-dev / libwayland-dev are winit's link-time deps on
|
|
# Linux; the wayland-csd-adwaita feature pulls in xkbcommon + wayland-client.
|
|
- name: Install Linux GL prereqs
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
sudo apt-get update
|
|
sudo apt-get install -y \
|
|
libxkbcommon-dev libxkbcommon-x11-dev \
|
|
libwayland-dev libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev \
|
|
libegl1-mesa-dev libgles2-mesa-dev libgbm-dev mesa-utils \
|
|
libfreetype-dev libfontconfig1-dev fonts-noto-cjk
|
|
- run: cargo fmt --all -- --check
|
|
- run: cargo build --workspace
|
|
# GitHub-hosted runners are headless with no reliable Mesa software
|
|
# EGL, so STEP1A_REQUIRE_GPU is left unset: the op-host-native GPU
|
|
# smoke (memory_loop) self-uses the raster fallback instead of
|
|
# hard-failing on EGL init. Real-GPU coverage runs on dev machines.
|
|
- run: cargo test --workspace
|
|
- run: cargo clippy --workspace --all-targets -- -D warnings
|
|
# Step 1a Phase C Task 4: spec v19 §11 + §12.3 boundary invariants.
|
|
# Linux runner has the full mobile target stdlib (`rustup target add`
|
|
# in subsequent steps would handle ios/android cargo metadata too,
|
|
# but the script uses `cargo tree --target` which only needs the
|
|
# cfg-gate evaluation, not the actual target sysroot).
|
|
- name: Verify Jian boundary invariants
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
rustup target add aarch64-linux-android aarch64-apple-ios wasm32-unknown-unknown
|
|
bash tools/check-jian-boundaries.sh
|
|
|
|
- name: Verify Step 1b widget boundary (spec §1.4)
|
|
if: runner.os == 'Linux'
|
|
run: bash tools/check-widget-boundary.sh
|
|
|
|
- name: Install Bun
|
|
if: runner.os == 'Linux'
|
|
uses: oven-sh/setup-bun@v2
|
|
|
|
- name: Install JS deps
|
|
if: runner.os == 'Linux'
|
|
run: bun install --frozen-lockfile
|
|
|
|
- name: Planner-prompt parity drift guard
|
|
if: runner.os == 'Linux'
|
|
run: |
|
|
bun run crates/op-orchestrator/tools/dump-planner-golden.ts
|
|
git diff --exit-code crates/op-orchestrator/tests/planner-golden/ \
|
|
|| (echo "::error::planner golden drifted — rerun dump-planner-golden.ts" && exit 1)
|
|
|
|
deny:
|
|
name: cargo-deny (native)
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
- uses: dtolnay/rust-toolchain@stable
|
|
- uses: EmbarkStudios/cargo-deny-action@v2 # auto-updates within v2.x; runner cargo at this stage carries cargo-deny 0.18+ which handles modern transitive manifests (Phase 1 Task 1.8 finding)
|
|
with:
|
|
command: check
|
|
|
|
# S1 Plan C Task 6 — golden parity drift guard (spec §8, Risk R4).
|
|
# The TS `pen-ai-skills` diagnostics layer is the parity oracle for the
|
|
# Rust `op-design-lint` detectors. This job re-runs the golden-dump script
|
|
# against the live TS detectors and fails if the regenerated golden differs
|
|
# from the committed copy — catching a TS detector change that would
|
|
# silently stale the Rust parity baseline (`tests/parity.rs`).
|
|
diagnostics-golden-drift:
|
|
name: diagnostics golden drift
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- uses: actions/checkout@v4
|
|
with:
|
|
submodules: recursive
|
|
- uses: oven-sh/setup-bun@v2
|
|
- name: Install workspace dependencies
|
|
run: bun install --frozen-lockfile
|
|
- name: Regenerate diagnostics golden from the TS oracle
|
|
run: bun run tools/dump-diagnostics-golden.ts
|
|
- name: Fail on golden drift
|
|
# A non-empty diff means the committed golden no longer matches the
|
|
# TS detectors — regenerate locally (`bun run tools/dump-diagnostics-golden.ts`)
|
|
# and re-verify the Rust parity test before committing.
|
|
run: git diff --exit-code crates/op-design-lint/tests/fixtures/golden/
|