name: CI on: [push, pull_request] env: CARGO_TERM_COLOR: always jobs: rustfmt: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - name: Check formatting run: | cargo fmt -- --version cargo fmt --all -- --check windows: runs-on: windows-2019 steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Prepare test resources run: | cd tests (New-Object Net.WebClient).DownloadFile('https://github.com/WrinklyNinja/testing-plugins/archive/1.4.0.zip', "$PWD/1.4.0.zip") 7z x 1.4.0.zip mv testing-plugins-1.4.0 testing-plugins (New-Object Net.WebClient).DownloadFile('https://github.com/loot/libloot/releases/download/0.18.2/libloot-0.18.2-0-gb1a9e31_0.18.2-win32.7z', "$PWD/libloot_win32.7z") 7z x libloot_win32.7z mv libloot-0.18.2-0-gb1a9e31_0.18.2-win32 libloot_win32 (New-Object Net.WebClient).DownloadFile('https://github.com/loot/libloot/releases/download/0.18.2/libloot-0.18.2-0-gb1a9e31_0.18.2-win64.7z', "$PWD/libloot_win64.7z") 7z x libloot_win64.7z mv libloot-0.18.2-0-gb1a9e31_0.18.2-win64 libloot_win64 (New-Object Net.WebClient).DownloadFile('https://github.com/loot/loot-api-python/releases/download/4.0.2/loot_api_python-4.0.2-0-gd356ac2_master-python2.7-win32.7z', "$PWD/loot_api_python.7z") 7z x loot_api_python.7z mv loot_api_python-4.0.2-0-gd356ac2_master-python2.7-win32 loot_api_python cd .. - name: Build and run tests run: cargo test --all --all-features # Need to rebuild the FFI wrapper so that its binary is given a filename # without a hash. - name: Build FFI wrapper run: cargo build --manifest-path ffi/Cargo.toml --features ffi-headers # Use bash because PowerShell doesn't fail if one command fails. - name: Build and run C++ tests shell: bash run: | mkdir ffi/build cd ffi/build cmake .. cmake --build . ctest linux: runs-on: ubuntu-20.04 steps: - uses: actions/checkout@v3 - uses: actions/cache@v3 with: path: | ~/.cargo/bin/ ~/.cargo/registry/index/ ~/.cargo/registry/cache/ ~/.cargo/git/db/ target/ key: ${{ runner.os }}-cargo-${{ hashFiles('**/Cargo.lock') }} - name: Install cargo-llvm-cov uses: taiki-e/install-action@cargo-llvm-cov - name: Prepare test resources run: | cd tests wget https://github.com/WrinklyNinja/testing-plugins/archive/1.4.1.tar.gz tar -xf 1.4.1.tar.gz mv testing-plugins-1.4.1 testing-plugins wget https://github.com/loot/libloot/releases/download/0.18.2/libloot-0.18.2-0-gb1a9e31_0.18.2-win32.7z 7z x libloot-0.18.2-0-gb1a9e31_0.18.2-win32.7z mv libloot-0.18.2-0-gb1a9e31_0.18.2-win32 libloot_win32 wget https://github.com/loot/libloot/releases/download/0.18.2/libloot-0.18.2-0-gb1a9e31_0.18.2-win64.7z 7z x libloot-0.18.2-0-gb1a9e31_0.18.2-win64.7z mv libloot-0.18.2-0-gb1a9e31_0.18.2-win64 libloot_win64 wget https://github.com/loot/loot-api-python/releases/download/4.0.2/loot_api_python-4.0.2-0-gd356ac2_master-python2.7-win32.7z 7z x loot_api_python-4.0.2-0-gd356ac2_master-python2.7-win32.7z mv loot_api_python-4.0.2-0-gd356ac2_master-python2.7-win32 loot_api_python cd .. - name: Build and run tests with code coverage run: cargo llvm-cov --workspace --lcov --output-path lcov.info - name: Upload code coverage to Coveralls uses: coverallsapp/github-action@v2 # Need to rebuild the FFI wrapper so that its binary is given a filename # without a hash. - name: Build FFI wrapper run: cargo build --manifest-path ffi/Cargo.toml --features ffi-headers # Use bash because PowerShell doesn't fail if one command fails. - name: Build and run C++ tests shell: bash run: | mkdir ffi/build cd ffi/build cmake .. cmake --build . ctest