forkfs 0.1.0

ForkFS allows you to sandbox a process's changes to your file system.
Documentation
name: CI/CD

on: [push, pull_request]

jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Cargo Cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-build-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-cargo-
      - name: Build project
        run: cargo build --release --all-features

  test:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Cargo Cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-test-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-cargo-
      - name: Run tests
        run: cargo test

  lint:
    runs-on: ubuntu-latest
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Install Rust
        run: rustup component add rustfmt clippy
      - name: Cargo Cache
        uses: actions/cache@v3
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            target/
          key: ${{ runner.os }}-cargo-lint-${{ hashFiles('**/Cargo.lock') }}
          restore-keys: ${{ runner.os }}-cargo-
      - name: Run lint
        run: |
          cargo fmt --check
          cargo clippy --all-targets --all-features -- -D warnings \
            -W clippy::all \
            -W clippy::float_cmp_const \
            -W clippy::empty_structs_with_brackets \
            -W clippy::pedantic \
            -W clippy::nursery \
            -W clippy::cargo

  deploy_release:
    needs: [build, test, lint]
    runs-on: ubuntu-latest
    if: startsWith(github.ref, 'refs/tags/')
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Publish release
        run: cargo publish
        env:
          CARGO_REGISTRY_TOKEN: ${{ secrets.CARGO_REGISTRY_TOKEN }}

  attach_binaries:
    strategy:
      fail-fast: false
      matrix:
        include:
          - target: x86_64-unknown-linux-gnu
            os: ubuntu-latest
            tool: cargo
          - target: x86_64-unknown-linux-musl
            os: ubuntu-latest
            tool: cargo
    needs: [build, test, lint]
    runs-on: ${{ matrix.os }}
    if: startsWith(github.ref, 'refs/tags/')
    steps:
      - name: Checkout
        uses: actions/checkout@v3
      - name: Install Rust
        run: |
          rustup target add ${{ matrix.target }}
          rustup component add rust-src
      - name: Install cross
        if: matrix.tool == 'cross'
        run: cargo install cross
      - name: Build binary
        run: ${{ matrix.tool }} build --release --locked --target=${{ matrix.target }} -Z build-std=std,panic_abort -Z build-std-features=panic_immediate_abort
      - name: Upload binary
        uses: svenstaro/upload-release-action@v2
        with:
          repo_token: ${{ secrets.GITHUB_TOKEN }}
          file: target/${{ matrix.target }}/release/forkfs
          asset_name: forkfs-${{ matrix.target }}
          tag: ${{ github.ref }}