funera 0.2.4

Flexible and security-oriented LLM agent framework for Rust — ReAct loop, tools, skills, middleware, security
Documentation
name: CI

on:
  push:
    branches: [main]
  pull_request:
    branches: [main]

env:
  CARGO_TERM_COLOR: always

concurrency:
  group: ${{ github.workflow }}-${{ github.ref }}
  cancel-in-progress: true

jobs:
  fmt:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo fmt --check --all

  doc:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc --no-deps --all-features

  clippy:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        crate: [funera-core, funera-orchestrate]
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy -p ${{ matrix.crate }} --all-features -- -D warnings

  semver:
    runs-on: ubuntu-latest
    continue-on-error: true
    steps:
      - uses: actions/checkout@v4
      - uses: obi1kenobi/cargo-semver-checks-action@v2

  test-core:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        features:
          - { name: default, flags: "" }
          - { name: security, flags: "--features deepseek,tool,security" }
          - { name: sec-mid, flags: "--features deepseek,tool,security,middleware" }
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo test --lib ${{ matrix.features.flags }} -p funera-core

  test-orchestrate:
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        features:
          - { name: minimal, flags: "--no-default-features --features deepseek" }
          - { name: default, flags: "--features deepseek,tool" }
          - { name: security, flags: "--features deepseek,tool,security" }
          - { name: sec-mid, flags: "--features deepseek,tool,security,middleware" }
          - { name: sec-sb, flags: "--features deepseek,tool,security,sandbox,funera-builtin-tools" }
          - { name: all, flags: "--features deepseek,tool,security,sandbox,middleware,skill,funera-builtin-tools" }
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo test --lib ${{ matrix.features.flags }} -p funera-orchestrate

  test-cross:
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest, windows-latest, macos-latest]
        crate:
          - { name: funera-core, flags: "--all-features" }
          - { name: funera-orchestrate, flags: "--features deepseek,tool,security,sandbox,middleware,skill,funera-builtin-tools" }
    steps:
      - uses: actions/checkout@v4
      - uses: Swatinem/rust-cache@v2
      - run: cargo test --lib ${{ matrix.crate.flags }} -p ${{ matrix.crate.name }}