name: Continuous Integration

on:
  push:
    branches:
      - master
  pull_request:

jobs:
  format:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6
      - name: Rust toolchain
        uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          toolchain: nightly
          components: rustfmt
          rustflags: ""
      - name: Format
        run: cargo +nightly fmt -- --check

  tests:
    needs:
      - format
    strategy:
      fail-fast: false
      matrix:
        test_args:
          - --no-default-features --features "" # for cosmic-comp, don't remove!
          - --no-default-features --features "winit_debug"
          - --no-default-features --features "winit_tokio"
          - --no-default-features --features "winit"
          - --no-default-features --features "winit_wgpu"
          - --no-default-features --features "wayland"
          - --no-default-features --features "applet"
          - --no-default-features --features "desktop,smol"
          - --no-default-features --features "desktop,tokio"
          - -p cosmic-theme
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6
        with:
          submodules: recursive
      - name: System dependencies
        run: sudo apt-get update; sudo apt-get install -y libxkbcommon-dev libwayland-dev
      - name: Rust toolchain
        uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          rustflags: ""
      - name: Test features
        run: cargo test ${{ matrix.test_args }} -- --test-threads=1
        env:
          RUST_BACKTRACE: full

  examples:
    needs:
      - format
    strategy:
      fail-fast: false
      matrix:
        examples:
          - "application"
          - "open-dialog"
          - "context-menu"
          - "nav-context"
    runs-on: ubuntu-latest
    steps:
      - name: Checkout sources
        uses: actions/checkout@v6
        with:
          submodules: recursive
      - name: System dependencies
        run: sudo apt-get update; sudo apt-get install -y libxkbcommon-dev libwayland-dev
      - name: Rust toolchain
        uses: actions-rust-lang/setup-rust-toolchain@v1
        with:
          rustflags: ""
      - name: Check example
        run: cargo check -p "${{ matrix.examples }}"
        env:
          RUST_BACKTRACE: full
