woab 0.9.0

Widgets on Actors Bridge - a GUI microframework for combining GTK with Actix
name: CI
on:
  pull_request:
  push:
    branches: [main]

# Sets permissions of the GITHUB_TOKEN to allow deployment to GitHub Pages
permissions:
  contents: read
  pages: write
  id-token: write
  checks: write

jobs:
  ci:
    name: CI
    needs: [test, clippy, docs]
    runs-on: ubuntu-latest
    steps:
      - name: Done
        run: exit 0
  test:
    name: Tests
    strategy:
      fail-fast: false
      matrix:
        os: [ubuntu-latest]
        rust: [1.77.2, nightly]
    runs-on: ${{ matrix.os }}
    steps:
      - uses: actions/checkout@v3
      - name: Install rust
        uses: dtolnay/rust-toolchain@stable
        with:
          toolchain: ${{ matrix.rust }}
      - name: Install packages for gtk-test
        run: |-

          sudo apt-get update
          sudo apt-get install xvfb
          sudo apt-get install libgtk-4-dev
          sudo apt-get install libxdo-dev
      - name: Ready cache
        if: matrix.os == 'ubuntu-latest'
        run: sudo chown -R $(whoami):$(id -ng) ~/.cargo/
      - name: Cache cargo
        uses: actions/cache@v1
        id: cache
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - name: Test WoAB
        env:
          RUST_TEST_NOCAPTURE: 1
          RUST_TEST_THREADS: 1
        run: xvfb-run cargo test --verbose
  fmt:
   name: Rustfmt
   runs-on: ubuntu-latest
   steps:
     - uses: actions/checkout@v3
     - uses: dtolnay/rust-toolchain@stable
       with:
         profile: minimal
         toolchain: nightly
         components: rustfmt
     - name: Run fmt --all -- --check
       run: cargo fmt --all -- --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          profile: minimal
          toolchain: nightly
          components: clippy
      - name: Install packages for testing GTK
        run: |-

          sudo apt-get update
          sudo apt-get install libgtk-4-dev
      - name: Cache cargo
        uses: actions/cache@v1
        id: cache
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - name: Run clippy --all-targets --
        uses: actions-rs/clippy-check@v1
        with:
          token: ${{ secrets.GITHUB_TOKEN }}
          args: --all-targets --
  docs:
    name: Docs
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@stable
        with:
          profile: minimal
          toolchain: nightly
      - name: Install packages for testing GTK
        run: |-

          sudo apt-get update
          sudo apt-get install libgtk-4-dev
      - name: Cache cargo
        uses: actions/cache@v1
        id: cache
        with:
          path: ~/.cargo
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
      - name: Run doc tests
        run: cargo test --doc
      - name: Check WoAB docs
        run: cargo doc --no-deps
  docs-ghpages:
    name: Update Docs in GitHub Pages
    runs-on: ubuntu-latest
    if: github.ref == 'refs/heads/main'
    steps:
      - uses: actions/checkout@v3
      - name: Install packages for testing GTK
        run: |-

          sudo apt-get update
          sudo apt-get install libgtk-4-dev
      - name: Build docs
        run: |-

          cargo doc --verbose &&
          echo "<meta http-equiv=refresh content=0;url=woab/index.html>" > target/doc/index.html
      - name: Add read permissions
        run: |-

          chmod --recursive +r target/doc
      - name: Upload artifact
        uses: actions/upload-pages-artifact@v1
        with:
          path: target/doc
  deploy-ghpages:
    environment:
      name: github-pages
      url: ${{ steps.deployment.outputs.page_url }}
    runs-on: ubuntu-latest
    needs: docs-ghpages
    if: github.ref == 'refs/heads/main'
    steps:
      - name: Deploy to GitHub Pages
        id: deployment
        uses: actions/deploy-pages@v2