rsleigh 0.4.0

SLEIGH (.slaspec) parser and Rust decoder/P-code emitter codegen — Ghidra-compatible disassembly in pure Rust
Documentation
name: CI

on:
  push:
    branches: [master]
  pull_request:
    branches: [master]

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    runs-on: ubuntu-latest
    timeout-minutes: 30
    steps:
      - uses: actions/checkout@v4

      - uses: dtolnay/rust-toolchain@stable

      - uses: Swatinem/rust-cache@v2
        with:
          cache-on-failure: true

      # Generate code from slaspecs (~30s)
      - name: Generate Rust from slaspecs
        run: cargo run -p rsleigh-generate

      # Build all crates (catches compile errors in decompiler, CLI, etc.)
      - name: Build all crates
        run: cargo build --workspace

      # Run golden P-code + decompiler validation tests.
      # --release sidesteps a pre-existing stack overflow in the
      # ghidra_oracle_parity test under debug builds on Linux (recursive
      # SLEIGH lift hits the 8 MiB default thread stack only when unoptimised).
      - name: Test — golden P-code + decompiler validation
        run: cargo test --release -p test-harness

      # Run decompiler unit tests (signature DB, type system)
      - name: Test — decompiler unit tests
        run: cargo test --release -p rsleigh-decompile --lib

      # Build CLI in release mode (catches optimization-only issues)
      - name: Build CLI (release)
        run: cargo build -p rsleigh-cli --release

  clippy:
    runs-on: ubuntu-latest
    timeout-minutes: 20
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - uses: Swatinem/rust-cache@v2

      - name: Generate Rust from slaspecs
        run: cargo run -p rsleigh-generate

      # Lint core crates (pcode-ir, rsleigh-api, rsleigh-decompile)
      # Skip generated crates (they have intentional patterns clippy dislikes)
      - name: Clippy — core crates
        run: cargo clippy -p pcode-ir -p rsleigh-api -p rsleigh-decompile -p rsleigh-cli -- -D warnings
        continue-on-error: true  # Don't block on clippy warnings during development

  # Fast compile check — only pcode-ir (no generated code dependency)
  check:
    runs-on: ubuntu-latest
    timeout-minutes: 5
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2

      - name: Check pcode-ir (no codegen needed)
        run: cargo check -p pcode-ir