xcp 0.24.1

xcp is a (partial) clone of the Unix `cp` command, with more user-friendly feedback and some performance optimisations. See the README for features and limitations.
name: Tests

on: [push]

jobs:
  ubuntu:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: CI runtime info
        run: uname -a && cat /etc/os-release

      - name: Add necessary packages
        run: sudo apt-get update && sudo apt-get install -y libacl1-dev

      - name: Update Rust to latest
        run: ~/.cargo/bin/rustup update

      - name: Create filesystems
        # f2fs and exfat modules are in linux-modules-extra-azure
        # and cannot be installed reliably:
        # https://github.com/actions/runner-images/issues/7587
        run: tests/scripts/make-filesystems.sh ext2 ext4 xfs btrfs ntfs fat zfs

      - name: Run tests on ext2
        run: /fs/ext2/src/tests/scripts/test-linux.sh
        if: always()

      - name: Run tests on ext4
        run: /fs/ext4/src/tests/scripts/test-linux.sh
        if: always()

      - name: Run tests on XFS
        run: /fs/xfs/src/tests/scripts/test-linux.sh
        if: always()

      - name: Run tests on btrfs
        run: /fs/btrfs/src/tests/scripts/test-linux.sh
        if: always()

      - name: Run tests on ntfs
        run: /fs/ntfs/src/tests/scripts/test-linux.sh
        if: always()

      - name: Run tests on fat
        run: /fs/fat/src/tests/scripts/test-linux.sh
        if: always()

      - name: Run tests on ZFS
        run: /fs/zfs/src/tests/scripts/test-linux.sh
        if: always()

  expensive:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Add necessary packages
        run: sudo apt-get update && sudo apt-get install -y libacl1-dev

      - name: Update Rust to latest
        run: ~/.cargo/bin/rustup update

      - name: Run expensive tests
        run: ./tests/scripts/test-linux.sh test_run_expensive

  macos:
    runs-on: macos-latest
    steps:
      - uses: actions/checkout@v4

      - name: Install Rust
        run: curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | bash /dev/stdin -y

      - name: Update Rust (installer may lag behind)
        run: ~/.cargo/bin/rustup update

      - name: Run all tests
        run: ~/.cargo/bin/cargo test --workspace --features=test_no_reflink,test_no_sockets,test_run_expensive

  freebsd:
    runs-on: ubuntu-latest
    steps:
    - uses: actions/checkout@v4

    - uses: vmactions/freebsd-vm@v1
      with:
        usesh: true
        prepare: |
          pkg install -y curl
          pw user add -n testing -m
        run: |
          su testing -c '
            curl -sSf https://sh.rustup.rs | sh /dev/stdin -y \
              && ~/.cargo/bin/cargo test --workspace --features=test_no_reflink,test_no_sockets \
              && ~/.cargo/bin/cargo clean
          '

  nightly:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Add necessary packages
        run: sudo apt-get update && sudo apt-get install -y libacl1-dev

      - name: Install Rust nightly
        run: ~/.cargo/bin/rustup toolchain install nightly

      - name: Compile and test with nightly
        run: ~/.cargo/bin/cargo +nightly test --workspace --features=test_no_reflink

  msrv-check:
    runs-on: ubuntu-latest
    steps:
      - uses: actions/checkout@v4

      - name: Update Rust to latest
        run: ~/.cargo/bin/rustup update

      - name: Install MSRV checker
        run: ~/.cargo/bin/cargo install cargo-msrv

      - name: Check MSRV
        run: ~/.cargo/bin/cargo msrv verify