on: [push, pull_request]

name: CI

env:
  # web_sys_unstable_apis is required to enable the web_sys clipboard API which eframe web uses,
  # as well as by the wasm32-backend of the wgpu crate.
  # 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 -D warnings
  RUSTDOCFLAGS: -D warnings

jobs:
  fmt-crank-check-test:
    name: Format + check + test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: default
          toolchain: 1.61.0
          override: true
      - name: Install packages (Linux)
        if: runner.os == 'Linux'
        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
      - name: Set up cargo cache
        uses: Swatinem/rust-cache@v2
      - name: Rustfmt
        uses: actions-rs/cargo@v1
        with:
          command: fmt
          args: --all -- --check
      - name: Install cargo-cranky
        uses: baptiste0928/cargo-install@v1
        with:
          crate: cargo-cranky
      - name: Check all features
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --locked --all-features
      - name: Check default features
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --locked
      - name: Check no default features
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: --locked --no-default-features --lib
      - name: Test doc-tests
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --doc --all-features
      - name: cargo doc --lib
        uses: actions-rs/cargo@v1
        with:
          command: doc
          args: --lib --no-deps --all-features
      - name: cargo doc --document-private-items
        uses: actions-rs/cargo@v1
        with:
          command: doc
          args: --document-private-items --no-deps --all-features
      - name: Test
        uses: actions-rs/cargo@v1
        with:
          command: test
          args: --all-features
      - name: Cranky
        uses: actions-rs/cargo@v1
        with:
          command: cranky
          args: --all-targets --all-features --  -D warnings

  check_wasm:
    name: Check wasm32 + wasm-bindgen
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.61.0
          target: wasm32-unknown-unknown
          override: true
      - run: sudo apt-get update && sudo apt-get install libgtk-3-dev
      - name: Set up cargo cache
        uses: Swatinem/rust-cache@v2
      - name: Check wasm32 egui_demo_app
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: -p egui_demo_app --lib --target wasm32-unknown-unknown
      - name: Check wasm32 egui_demo_app --all-features
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: -p egui_demo_app --lib --target wasm32-unknown-unknown --all-features
      - name: Check wasm32 eframe
        uses: actions-rs/cargo@v1
        with:
          command: check
          args: -p eframe --lib --no-default-features --features glow,persistence --target wasm32-unknown-unknown
      - name: wasm-bindgen
        uses: jetli/wasm-bindgen-action@v0.1.0
        with:
          version: "0.2.82"
      - run: ./sh/wasm_bindgen_check.sh --skip-setup

  cargo-deny:
    name: cargo deny
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: EmbarkStudios/cargo-deny-action@v1
        with:
          rust-version: "1.61.0"

  android:
    name: android
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v2
      - uses: actions-rs/toolchain@v1
        with:
          profile: minimal
          toolchain: 1.61.0
          target: aarch64-linux-android
          override: true
      - name: Set up cargo cache
        uses: Swatinem/rust-cache@v2
      - run: cargo check --features wgpu --target aarch64-linux-android
        working-directory: crates/eframe
