on: [push, pull_request]

name: CI

env:
  # This is required to enable the web_sys clipboard API which egui_web uses
  # https://rustwasm.github.io/wasm-bindgen/api/web_sys/struct.Clipboard.html
  # https://rustwasm.github.io/docs/wasm-bindgen/web-sys/unstable-apis.html
  RUSTFLAGS: --cfg=web_sys_unstable_apis

jobs:
  check_default:
    name: cargo check (default features)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: sudo apt-get update && sudo apt-get install libspeechd-dev
      - uses: actions-rs/cargo@v1
        with:
          command: check

  check_all_features:
    name: cargo check --all-features
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: sudo apt-get update && sudo apt-get install libspeechd-dev
      - uses: actions-rs/cargo@v1
        with:
          command: check
          args: --all-features

  check_web_default:
    name: cargo check web (default features)
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: rustup target add wasm32-unknown-unknown
      - uses: actions-rs/cargo@v1
        with:
          command: check
          args: -p egui_demo_app --lib --target wasm32-unknown-unknown

  check_egui_demo_app:
    name: cargo check -p egui_demo_app
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - name: check
        run: cargo check -p egui_demo_app

  check_wasm_eframe_with_features:
    name: cargo check wasm eframe
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: rustup target add wasm32-unknown-unknown
      - name: check
        run: cargo check -p eframe --lib --no-default-features --features persistence --target wasm32-unknown-unknown

  check_web_all_features:
    name: cargo check web --all-features
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: rustup target add wasm32-unknown-unknown
      - uses: actions-rs/cargo@v1
        with:
          command: check
          args: -p egui_demo_app --lib --target wasm32-unknown-unknown --all-features

  test:
    name: cargo test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: sudo apt-get update && sudo apt-get install libxcb-render0-dev libxcb-shape0-dev libxcb-xfixes0-dev libspeechd-dev libxkbcommon-dev libssl-dev libgtk-3-dev # libgtk-3-dev is used by rfd
      - uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all-features

  fmt:
    name: cargo fmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: rustup component add rustfmt
      - uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check

  clippy:
    name: cargo clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: rustup component add clippy
      - run: sudo apt-get update && sudo apt-get install libspeechd-dev libgtk-3-dev # libgtk-3-dev is used by rfd
      - uses: actions-rs/cargo@v1
        with:
          command: clippy
          args: --workspace --all-targets --all-features --  -D warnings -W clippy::all

  doc:
    name: cargo doc
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: sudo apt-get update && sudo apt-get install libspeechd-dev
      - run: cargo doc -p emath -p epaint -p egui -p eframe -p epi -p egui_web -p egui-winit -p egui_extras -p egui_glium -p egui_glow --lib --no-deps --all-features

  doc_web:
    name: cargo doc web
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: sudo apt-get update && sudo apt-get install libspeechd-dev
      - run: rustup target add wasm32-unknown-unknown
      - run: cargo doc -p egui_web --target wasm32-unknown-unknown --lib --no-deps --all-features

  cargo-deny:
    runs-on: ubuntu-20.04
    steps:
      - uses: actions/checkout@v2
      - uses: EmbarkStudios/cargo-deny-action@v1

  wasm_bindgen:
    name: wasm-bindgen
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.56.0
          override: true
      - run: rustup target add wasm32-unknown-unknown
      - run: cargo install wasm-bindgen-cli
      - run: ./sh/wasm_bindgen_check.sh
