jobflow 0.3.0

Executes jobs in order
Documentation
on:
  push:
    branches:
      - main
  pull_request:
    branches:
      - main

concurrency:
  group: ${{ github.workflow }}-${{ github.event.pull_request.number || github.ref }}
  cancel-in-progress: true

env:
  EXTERNAL_DEPENDENCIES: libasound2-dev libudev-dev libwayland-dev wget gzip
  RUSTFLAGS: -Awarnings
  CARGO_PROFILE_debug_CODEGEN_UNITS: 1
  CARGO_PROFILE_debug_INCREMENTAL: false
  CARGO_BUILD_JOBS: 2

name: build
jobs:
  build-dev:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal
      - name: Install Dependencies
        run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
      - uses: rui314/setup-mold@v1
      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: dev
      - name: Build dev
        run: cargo build --workspace --all-features
  check:
    runs-on: ubuntu-latest
    needs: [ build-dev ]
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal
      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: dev
      - name: Install Dependencies
        run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
      - run: cargo check --all-features --workspace
  semver-check:
    runs-on: ubuntu-latest
    needs: [ build-dev ]
    steps:
      - uses: actions/checkout@v4
      - name: Check semver
        uses: obi1kenobi/cargo-semver-checks-action@v2

  unit-test:
    runs-on: ubuntu-latest
    needs: [ build-dev, check ]
    permissions: write-all
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal
      - name: Install Dependencies
        run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
      - uses: rui314/setup-mold@v1
      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: dev
          cache-all-crates: true
          save-if: 'false'
      - name: Install cargo-nextest
        uses: taiki-e/install-action@nextest
      - run: cargo nextest run --workspace --all-features --profile ci-unit -E 'kind(bin) + kind(lib)'
        name: Run unit tests
      - name: Test Report
        uses: dorny/test-reporter@v1
        if: success() || failure()
        with:
          name: Unit Test Results
          path: target/nextest/ci-unit/junit.xml
          reporter: java-junit
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
  integration-test:
    needs: [ build-dev, unit-test ]
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal
      - name: Install Dependencies
        run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
      - uses: rui314/setup-mold@v1
      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: dev
          save-if: 'false'
      - name: Install cargo-nextest
        uses: taiki-e/install-action@nextest
      - run: cargo nextest run --workspace --all-features --profile ci-int -E 'kind(test)'
        name: Run integration tests
      - name: Test Report
        uses: dorny/test-reporter@v1
        if: success() || failure()
        with:
          name: Integration Test Results
          path: target/nextest/ci-int/junit.xml
          reporter: java-junit
        env:
          GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}

  fmt:
    needs: [ check ]
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal -c rustfmt
      - name: Install Dependencies
        run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: dev
          save-if: 'false'
      - name: Check rustfmt
        run: cargo fmt -- --check

  clippy:
    needs: [ fmt ]
    permissions: write-all
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4
      - name: Install Rust
        run: rustup toolchain install stable --profile minimal -c clippy
      - name: Install Dependencies
        run: sudo apt-get update; sudo apt-get install --no-install-recommends -y $EXTERNAL_DEPENDENCIES
      - uses: Swatinem/rust-cache@v2
        with:
          shared-key: dev
          save-if: 'false'
      - name: Check rustfmt
        run: cargo clippy