kas 0.17.0

A pure-Rust GUI toolkit with stateful widgets
Documentation
name: Tests

on:
  push:
    branches: [ master, '[0-9]+.[0-9]+' ]
  pull_request:
    branches: [ master, '[0-9]+.[0-9]+' ]

permissions:
  contents: read

jobs:
  nightly:
    name: Nightly, format and Doc
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Install toolchain
        uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y libfontconfig1-dev

      - name: Rustfmt check
        run: |
          cargo fmt -- --check
      - name: Build docs
        run: |
          cargo doc --features stable,wayland --workspace --no-deps -Zwarnings --config 'build.warnings="deny"'
      - name: Test kas-macros
        run: |
          cargo test --manifest-path crates/kas-macros/Cargo.toml
          cargo test --manifest-path crates/kas-macros/Cargo.toml --all-features
      - name: Test kas-core
        run: |
          cargo test --manifest-path crates/kas-core/Cargo.toml --features minimal
          cargo test --manifest-path crates/kas-core/Cargo.toml --features nightly
      - name: Test kas-widgets
        run: |
          cargo test --manifest-path crates/kas-widgets/Cargo.toml --features kas/wayland
          cargo test --manifest-path crates/kas-widgets/Cargo.toml --all-features --features kas/wayland
      - name: Test kas-image
        run: |
          cargo test --manifest-path crates/kas-image/Cargo.toml --features kas/wayland
          cargo test --manifest-path crates/kas-image/Cargo.toml --all-features --features kas/wayland
      - name: Test kas-view
        run: |
          cargo test --manifest-path crates/kas-view/Cargo.toml --all-features --features kas/wayland
      - name: Test kas-wgpu
        run: |
          cargo test --manifest-path crates/kas-wgpu/Cargo.toml --no-default-features --features kas/wayland
          cargo test --manifest-path crates/kas-wgpu/Cargo.toml --all-features --features kas/wayland
      - name: Test kas-dylib
        run: |
          cargo test --manifest-path crates/kas-dylib/Cargo.toml --features kas-core/wayland
          cargo test --manifest-path crates/kas-dylib/Cargo.toml --all-features --features kas-soft/x11
      - name: Test kas
        run: |
          cargo test --lib --bins --features nightly,nightly-diagnostics-pedantic -Zwarnings --config 'build.warnings="deny"'
          cargo test --benches --examples --tests --features nightly -Zwarnings --config 'build.warnings="deny"'
      - name: Test kas (experimental; some warnings may be expected)
        run: cargo test --features nightly,experimental
      - name: Test examples/mandlebrot
        run: cargo test --manifest-path examples/mandlebrot/Cargo.toml -Zwarnings --config 'build.warnings="deny"'
      - name: Test examples/text-editor
        run: cargo test --manifest-path examples/text-editor/Cargo.toml -Zwarnings --config 'build.warnings="deny"'

  test:
    name: Test
    runs-on: ${{ matrix.os }}
    strategy:
      fail-fast: false
      matrix:
        os: [macos-latest, windows-latest]
        toolchain: [stable]
        include:
          - os: ubuntu-latest
            toolchain: "1.92.0"
            variant: MSRV
          - os: ubuntu-latest
            toolchain: beta

    steps:
      - uses: actions/checkout@v6
      - name: Not MSRV
        if: ${{ matrix.variant == 'MSRV' }}
        run: cargo generate-lockfile --ignore-rust-version
      - name: Install toolchain
        uses: dtolnay/rust-toolchain@master
        with:
          toolchain: ${{ matrix.toolchain }}
          # components: clippy
      - name: Install dependencies
        if: matrix.os == 'ubuntu-latest'
        run: |
          sudo apt-get update
          sudo apt-get install -y libfontconfig1-dev

      - name: Test kas-macros
        run: cargo test --manifest-path crates/kas-macros/Cargo.toml --features log
      - name: Test kas-core
        run: cargo test --manifest-path crates/kas-core/Cargo.toml --features stable
      - name: Test kas-widgets
        run: cargo test --manifest-path crates/kas-widgets/Cargo.toml --features kas/x11
      - name: Test kas-image
        run: cargo test --manifest-path crates/kas-image/Cargo.toml --all-features --features kas/wayland
      - name: Test kas-view
        run: cargo test --manifest-path crates/kas-view/Cargo.toml --all-features --features kas/wayland
      - name: Test kas-wgpu
        run: cargo test --manifest-path crates/kas-wgpu/Cargo.toml --features kas/x11
      - name: Test kas-soft
        run: cargo test --manifest-path crates/kas-soft/Cargo.toml --features wayland
      - name: Test kas-dylib
        run: cargo test --manifest-path crates/kas-dylib/Cargo.toml --features kas-soft/x11
      - name: Test kas
        run: |
          cargo test --no-default-features --features minimal
          cargo test --features stable
      - name: Test examples/mandlebrot
        run: cargo test --manifest-path examples/mandlebrot/Cargo.toml
      - name: Test examples/text-editor
        run: cargo test --manifest-path examples/text-editor/Cargo.toml
      # - name: Clippy (stable)
      #   if: matrix.toolchain != 'beta' && matrix.toolchain != 'stable'
      #   run: |
      #     cargo clippy --workspace --features stable,workspace -- -D warnings \
      #     -A clippy::collapsible-if \
      #     -A clippy::collapsible_else_if \
      #     -A clippy::module-inception \
      #     -A clippy::comparison_chain \
      #     -A clippy::if_same_then_else \
      #     -A clippy::single-match \
      #     -A clippy::redundant_pattern_matching \
      #     -A clippy::unit_arg