fuser 0.17.0

Filesystem in Userspace (FUSE) for Rust
Documentation
name: CI

on:
  pull_request:
  push: # required for actions/cache to work
    branches:
      - master

jobs:
  compile:
    runs-on: ubuntu-24.04
    timeout-minutes: 10
    strategy:
      matrix:
        libfuse: [libfuse-dev, libfuse3-dev]
        features: [ '' ]

    env:
      RUSTFLAGS: --deny warnings
      RUSTDOCFLAGS: --deny warnings

    steps:
      - uses: actions/checkout@v4

      - name: Cache
        id: rust-cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            ~/.rustup/toolchains/
            target/
          key: ${{ runner.os }}-cargo-compile-v1-${{ matrix.libfuse }}-${{ matrix.features }}-${{ hashFiles('**/Cargo.toml', '.github/workflows/*.yml') }}

      - name: Install packages
        run: |
          sudo apt update
          sudo apt install -y ${{ matrix.libfuse }} build-essential

      - name: Install Rust
        if: steps.rust-cache.outputs.cache-hit != 'true'
        run: |
          rustup target add x86_64-unknown-linux-musl

      - name: Run tests
        run: |
          cargo build --all --all-targets --features=libfuse,${{ matrix.features }}
          cargo build --all --all-targets --features=${{ matrix.features }}
          cargo build --target=x86_64-unknown-linux-musl
          cargo test --all --features=libfuse,${{ matrix.features }}
          cargo test --all --features=${{ matrix.features }}
          cargo doc --all --no-deps --features=${{ matrix.features }}
          make test_passthrough

  ci:
    runs-on: ubuntu-22.04
    timeout-minutes: 10
    env:
      RUSTFLAGS: --deny warnings
      RUSTDOCFLAGS: --deny warnings
    steps:
      - uses: actions/checkout@v4

      - name: Cache
        id: rust-cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            ~/.rustup/toolchains/
            target/
          key: ${{ runner.os }}-cargo-ci-v1-${{ hashFiles('**/Cargo.toml', '.github/workflows/*.yml') }}

      - name: Install packages
        run: |
          sudo apt update
          sudo apt install -y libfuse-dev libfuse3-dev build-essential

      - name: Install Rust
        run: |
          rustup component add --toolchain nightly rustfmt
          rustup component add clippy
          rustc --version
          cargo --version

      - name: Install cargo-deny
        if: steps.rust-cache.outputs.cache-hit != 'true'
        run: cargo install --force --version 0.16.2 cargo-deny --locked

      - name: Run tests
        run: INTERACTIVE="" make pre

  mac-ci:
    runs-on: macos-26
    env:
      RUSTFLAGS: --deny warnings
      RUSTDOCFLAGS: --deny warnings
      PKG_CONFIG_PATH: /usr/local/lib/pkgconfig:$PKG_CONFIG_PATH
    steps:
      - uses: actions/checkout@v4

      - name: Cache
        id: rust-cache
        uses: actions/cache@v4
        with:
          path: |
            ~/.cargo/bin/
            ~/.cargo/registry/index/
            ~/.cargo/registry/cache/
            ~/.cargo/git/db/
            ~/.rustup/toolchains/
            target/
          key: ${{ runner.os }}-${{ runner.arch }}-cargo-compile-v1-${{ hashFiles('**/Cargo.toml', '.github/workflows/*.yml') }}

      - name: Install packages
        run: |
          brew update > /dev/null && brew install autoconf automake
          brew install --cask macfuse

      - name: Install Rust
        run: |
          rustup component add --toolchain nightly rustfmt
          rustup component add clippy
          rustc --version
          cargo --version

      - name: Install cargo-deny
        if: steps.rust-cache.outputs.cache-hit != 'true'
        run: cargo install --force --version 0.16.2 cargo-deny --locked

      - name: Build
        run: |
          cargo check --features=macos-no-mount
          cargo build --all --all-targets
          cargo build --all --all-targets --all-features

      - name: Docs
        run: cargo doc --all --no-deps --all-features

      - name: Lint
        run: INTERACTIVE="" make pre

  test:
    runs-on: ubuntu-22.04
    timeout-minutes: 120
    strategy:
      matrix:
        test_group: [mount_tests, pjdfs_tests, xfstests]

    steps:
      # https://github.com/marketplace/actions/maximize-build-disk-space-only-remove-unwanted-software
      - name: Maximize build space
        uses: AdityaGarg8/remove-unwanted-software@v5
        with:
          remove-android: 'true'
          remove-dotnet: 'true'
          remove-haskell: 'true'
          remove-codeql: 'true'
          # remove-docker-images: 'true'
          remove-large-packages: 'true'
          remove-cached-tools: 'true'
          # verbose: 'true'

      - uses: actions/checkout@v4

      - name: Run tests
        run: INTERACTIVE="" make ${{ matrix.test_group }}