name: Rust Linux

on: [push, pull_request]

env:
  deb_packages: >-
    libreadline-dev
    libwxgtk3.0-gtk3-dev

jobs:
  check:
    name: Check
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ env.deb_packages }}
      - name: Cargo Check
        run: cargo check --all

  build:
    name: Build
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ env.deb_packages }}
      - name: ls
        run: |
          ls
          pwd
      - name: Cargo Build
        run: cargo build --all
      - name: Cargo Install
        run: cargo install --path bossac --bins --root dist
      - uses: actions/upload-artifact@v3
        with:
          name: linux_release_binaries
          path: dist/bin

  fmt:
    name: Rustfmt
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: rustfmt
      - name: Rustfmt Check
        uses: actions-rust-lang/rustfmt@v1

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
      - uses: dtolnay/rust-toolchain@nightly
        with:
          components: clippy
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ env.deb_packages }}
      - name: Cargo Clippy
        run: cargo clippy --all-targets -- -D warnings

  udeps:
    name: cargo-udeps
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v3
        with:
          submodules: true
      - uses: dtolnay/rust-toolchain@nightly
      - name: Install dependencies
        run: |
          sudo apt-get update
          sudo apt-get install -y ${{ env.deb_packages }}
      - name: cargo-binstall
        run: |
          mkdir -p ~/.cargo/bin
          wget https://github.com/cargo-bins/cargo-binstall/releases/latest/download/cargo-binstall-x86_64-unknown-linux-musl.tgz
          tar xf cargo-binstall*.tgz -C ~/.cargo/bin
      - run: cargo binstall --no-confirm cargo-udeps
      - name: Cargo Udeps
        run: cargo udeps --all-targets
