name: Continuous Integration

on:
  push:
    branches:
      - master
  pull_request:


jobs:
  format:
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout sources
        uses: actions/checkout@v3
      - name: Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          profile: minimal
          components: rustfmt
          default: true
      - name: Cargo cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
          key: ${{ runner.os }}-cargo-rust_stable-${{ hashFiles('**/Cargo.toml') }}
      - name: Format
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: -- --check

  tests:
    needs:
      - format
    strategy:
      fail-fast: false
      matrix:
        features:
        - "" # for cosmic-comp, don't remove!
        - 'winit_debug'
        - 'winit_tokio'
        - winit
        - winit_wgpu
        - wayland
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout sources
        uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Get date for registry cache
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: Cargo registry cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry/index
            ~/.cargo/registry/cache
            ~/.cargo/git
          key: ${{ runner.os }}-cargo-registry-${{ steps.date.outputs.date }}
          restore-keys: ${{ runner.os }}-cargo-registry-
      - name: System dependencies
        run: sudo apt-get update; sudo apt-get install -y libxkbcommon-dev libwayland-dev
      - name: Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          default: true
      - name: Test features
        uses: actions-rs/cargo@v1
        env:
          RUST_BACKTRACE: full
        with:
          command: test
          args: --no-default-features --features "${{ matrix.features }}"

  examples:
    needs:
      - format
    strategy:
      fail-fast: false
      matrix:
        examples:
          - "application"
          - "open-dialog"
    runs-on: ubuntu-22.04
    steps:
      - name: Checkout sources
        uses: actions/checkout@v3
        with:
          submodules: recursive
      - name: Get date for registry cache
        id: date
        run: echo "::set-output name=date::$(date +'%Y-%m-%d')"
      - name: Cargo registry cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/registry/index
            ~/.cargo/registry/cache
            ~/.cargo/git
          key: ${{ runner.os }}-cargo-registry-${{ steps.date.outputs.date }}
          restore-keys: ${{ runner.os }}-cargo-registry-
      - name: System dependencies
        run: sudo apt-get update; sudo apt-get install -y libxkbcommon-dev libwayland-dev
      - name: Rust toolchain
        uses: actions-rs/toolchain@v1
        with:
          toolchain: stable
          override: true
          default: true
      - name: Test example
        uses: actions-rs/cargo@v1
        env:
          RUST_BACKTRACE: full
        with:
          command: check
          args: -p "${{ matrix.examples }}"

