korrosync 0.4.0

A KOReader Sync Server
Documentation
name: Rust CI

on:
  pull_request:
    branches: [master]
    paths:
      - "Cargo.lock"
      - "Cargo.toml"
      - "flake.lock"
      - "flake.nix"
      - ".github/workflows/ci.yml"
      - "**/*.rs"
  push:
    branches: [master]
    paths:
      - "Cargo.lock"
      - "Cargo.toml"
      - "flake.lock"
      - "flake.nix"
      - ".github/workflows/ci.yml"
      - "**/*.rs"

env:
  CARGO_TERM_COLOR: always

jobs:
  test:
    name: Test
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Cache cargo registry
        uses: actions/cache@v5
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-
      - uses: dtolnay/rust-toolchain@stable
      - name: Run tests
        run: cargo test

  fmt:
    name: Format
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: rustfmt
      - name: Enforce formatting
        run: cargo fmt --check

  clippy:
    name: Clippy
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v6
      - name: Cache cargo registry
        uses: actions/cache@v5
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-
      - uses: dtolnay/rust-toolchain@stable
        with:
          components: clippy
      - name: Linting
        run: cargo clippy -- -D warnings

  machete:
    name: Detect unused dependencies
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v6
      - name: Machete
        uses: bnjbvr/cargo-machete@main

  coverage:
    name: Code coverage
    runs-on: ubuntu-latest
    container:
      image: xd009642/tarpaulin
      options: --security-opt seccomp=unconfined
    steps:
      - name: Checkout repository
        uses: actions/checkout@v6
      - name: Cache cargo registry
        uses: actions/cache@v5
        with:
          path: |
            ~/.cargo/registry
            ~/.cargo/git
            target
          key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: |
            ${{ runner.os }}-cargo-
      - name: Generate code coverage
        run: |
          cargo tarpaulin --verbose --workspace -o lcov -o html
      - name: Upload coverage reports to Codecov
        uses: codecov/codecov-action@v6
        with:
          token: ${{ secrets.CODECOV_TOKEN }}
          files: lcov.info
          fail_ci_if_error: false
          verbose: true
          flags: unittests
          name: codecov-umbrella
      - name: Upload coverage artifact
        uses: actions/upload-artifact@v7
        with:
          name: coverage-report
          path: |
            lcov.info
            tarpaulin-report.html
          retention-days: 30