embedded-gui 0.2.0

no_std GUI and HUD primitives for embedded-graphics displays
Documentation
name: CI

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

concurrency:
  group: ${{ github.workflow }}-${{ github.head_ref || github.run_id }}
  cancel-in-progress: true

permissions:
  contents: read

env:
  CARGO_TERM_COLOR: always
  CARGO_INCREMENTAL: "0"
  CARGO_BUILD_JOBS: "1"
  MSRV: "1.87"
  CLIPPY_ARGS: "--lib --all-features"
  DOCS_ARGS: "--lib --no-deps --all-features"
  CHECK_ARGS: "--lib --all-features"
  CI_UNIT_TEST_ARGS: "--lib --all-features"
  CI_INTEGRATION_TEST_ARGS: "--all-features"
  CI_INTEGRATION_CHECK: "true"
  CI_INTEGRATION_CHECK_CMD: "cargo build --examples --all-features"
  NEEDS_SDL: "true"

jobs:
  fmt:
    name: Formatting
    runs-on: ubuntu-latest
    permissions:
      contents: write
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - run: cargo fmt --all --check

  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo check ${{ env.CHECK_ARGS }}

  check-no-std-matrix:
    name: "Check (no_std: ${{ matrix.target }})"
    runs-on: ubuntu-latest
    strategy:
      fail-fast: false
      matrix:
        target:
          - thumbv6m-none-eabi
          - thumbv7em-none-eabihf
          - thumbv8m.main-none-eabihf
          - riscv32imac-unknown-none-elf
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: ${{ matrix.target }}
      - uses: Swatinem/rust-cache@v2
      - run: cargo check --lib --no-default-features --features libm --target ${{ matrix.target }}
      - run: cargo check --lib --no-default-features --features rich-widgets,libm --target ${{ matrix.target }}

  msrv:
    name: MSRV check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ env.MSRV }}
      - run: cargo check --lib --no-default-features --features libm

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
          targets: thumbv7em-none-eabihf
      - uses: Swatinem/rust-cache@v2
      - run: cargo clippy ${{ env.CLIPPY_ARGS }} -- -W clippy::all
      - run: cargo clippy --lib --no-default-features --features rich-widgets,libm --target thumbv7em-none-eabihf -- -W clippy::all

  test:
    name: Test Suite
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - name: Install SDL2
        if: ${{ env.NEEDS_SDL == 'true' }}
        run: sudo apt-get update && sudo apt-get install -y libsdl2-dev
      - run: cargo test --all-features

  bench-check:
    name: Benchmarks Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo bench --no-run --all-features

  size-harness:
    name: Embedded Size Harness Footprint Budget
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
        with:
          targets: thumbv7em-none-eabihf
      - uses: Swatinem/rust-cache@v2
      - name: Build size harness release binary
        run: cargo build --manifest-path size_harness/Cargo.toml --target thumbv7em-none-eabihf --release

  docs:
    name: Docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - uses: dtolnay/rust-toolchain@stable
      - uses: Swatinem/rust-cache@v2
      - run: cargo doc ${{ env.DOCS_ARGS }}