gflow 0.4.14

A lightweight, single-node job scheduler written in Rust.
Documentation
name: Continuous Integration

on:
    push:
        branches:
            - main
    pull_request:

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

jobs:
    test:
        name: Test Suite
        runs-on: ubuntu-latest
        timeout-minutes: 30
        steps:
            - name: Checkout repository
              uses: actions/checkout@v6
            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@stable
            - uses: Swatinem/rust-cache@v2
            - name: Run tests
              run: cargo test --locked --all-features --workspace

    rustfmt:
        name: Rustfmt
        runs-on: ubuntu-latest
        timeout-minutes: 10
        steps:
            - name: Checkout repository
              uses: actions/checkout@v6
            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@stable
              with:
                  components: rustfmt
            - uses: Swatinem/rust-cache@v2
            - name: Check formatting
              run: cargo fmt --all --check

    clippy:
        name: Clippy
        runs-on: ubuntu-latest
        timeout-minutes: 30
        steps:
            - name: Checkout repository
              uses: actions/checkout@v6
            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@stable
              with:
                  components: clippy
            - uses: Swatinem/rust-cache@v2
            - name: Clippy check
              run: cargo clippy --all-targets --all-features --workspace -- -D warnings

    docs:
        name: Docs
        runs-on: ubuntu-latest
        timeout-minutes: 20
        steps:
            - name: Checkout repository
              uses: actions/checkout@v6
            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@stable
            - uses: Swatinem/rust-cache@v2
            - name: Check documentation
              env:
                  RUSTDOCFLAGS: -D warnings
              run: cargo doc --no-deps --document-private-items --all-features --workspace --examples

    coverage:
        name: Code Coverage
        runs-on: ubuntu-latest
        timeout-minutes: 30
        steps:
            - name: Checkout repository
              uses: actions/checkout@v6
            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@stable
              with:
                  components: llvm-tools-preview
            - uses: Swatinem/rust-cache@v2
            - name: Install cargo-llvm-cov
              uses: taiki-e/install-action@cargo-llvm-cov
            - name: Generate code coverage
              run: cargo llvm-cov --all-features --workspace --lcov --output-path lcov.info
            - name: Upload coverage to Codecov
              uses: codecov/codecov-action@v5
              with:
                  files: lcov.info
                  fail_ci_if_error: false
                  token: ${{ secrets.CODECOV_TOKEN }}

    nightly-smoke:
        name: Nightly Smoke (informational)
        runs-on: ubuntu-latest
        timeout-minutes: 30
        continue-on-error: true
        steps:
            - name: Checkout repository
              uses: actions/checkout@v6
            - name: Install Rust toolchain
              uses: dtolnay/rust-toolchain@nightly
              with:
                  components: clippy
            - uses: Swatinem/rust-cache@v2
            - name: Run nightly smoke checks
              env:
                  RUSTDOCFLAGS: -D warnings
              run: |
                  cargo test --locked --all-features --workspace
                  cargo clippy --all-targets --all-features --workspace -- -D warnings
                  cargo doc --no-deps --document-private-items --all-features --workspace --examples